Копирование 2D массивов в CUDA - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь скопировать 2D-массив из CPU в GPU. Со стороны хоста я отправляю базовый указатель 2D-массива, P - количество элементов в одном измерении

 int *d_a;

 cudaMalloc(d_a,P*P*sizeof(int));

 copyKernelHostToDevice((int(*)[P])d_a,(int(*)[P])hAligned_a);

 copyKernelHostToDevice((int(*)[P])d_b,(int(*)[P])hAligned_b);


 inline void copyKernelHostToDevice(int (*A)[P],int (*B)[P]){

      for(int i=0;i<P;i++)
      cutilSafeCall(cudaMemcpyAsync(A[i],B[i],P*sizeof(int),cudaMemcpyHostToDevice));

}

но приведенный выше код дает мне ошибку во время выполнения

cudaSafeCall () Ошибка API времени выполнения 11: неверный аргумент.

Я что-то упустил? P значительно больше ... и 2048

1 Ответ

1 голос
/ 29 марта 2012

Похоже, d_a не является допустимым указателем устройства, потому что ваш cudaMalloc вызов выглядит неверным. Это должно быть примерно так:

int *d_a;
cudaMalloc((void **)&d_a,P*P*sizeof(int));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...