Передача в __global__ функцию массива

189
14 декабря 2021, 06:10

К примеру есть такой код:

#include <cuda.h>                                                           
#include <iostream>                                                         
struct Matrix {
  int mat[9];                                                               
};                                                                          
__global__ void kernel(Matrix mat, int *out) {                              
  for (int i = 0; i < 9; ++i) {
    *out += mat.mat[i];
  }
}
int main() {
  int *out = nullptr;                                                       
  cudaMalloc(&out, sizeof(int));                                            
  Matrix matrix{};                                                          
  for (int i = 0; i < 9; ++i) {                                             
    matrix.mat[i] = 1;                                                      
  }
   kernel<<<1, 1>>>(matrix, out);                                            
   int retval;                                                               
   cudaMemcpy(&retval, out, sizeof(int), cudaMemcpyDeviceToHost);            
   std::cout << retval << std::endl;                                         
   return EXIT_SUCCESS;                                                      
 }

При этом код работает и выводит верный результат, в связи с чем возникает вопрос: насколько он корректен? С одной стороны мы можем разыменовывать указатели на cpu память в cuda функциях, однако массив на стэке иммет другой тип (хотя и автоматически приводится к указателю).

READ ALSO
Как отсортировать двумерный vector

Как отсортировать двумерный vector

Есть условный, уже инициализированный 2х вектор:

100
Проблема с таймером с++

Проблема с таймером с++

Помогите разобраться, стоит задача: нужно по таймеру вызывать функцию в другом потоке Вот что у меня получается

177
Ввести порядковый нoмер игральной карты от(0 до 35) и определить масть и достоинство карты(не надо писать 36 if или switch)

Ввести порядковый нoмер игральной карты от(0 до 35) и определить масть и достоинство карты(не надо писать 36 if или switch)

Написала с 36 свитчами,нельзя использовать цикл и тдНужно ограничаться ифами и свитчами,буду рада помощи

110