Я написал ядро CUDA, и когда я копирую массив шортов в память устройства и затем передаю его ядру, оно не работает. Упрощенный код ниже выражает мою проблему.
KernelCaller()
{
const int size = 1;
short hostArray[size]{41};
short* devPointer;
cudaMalloc((void**)&devicePointer, size * sizeof(short));
cudaMemcpy(devPointer, hostArray, size * sizeof(short), cudaMemcpyHostToDevice);
cudaKernel<<<1,1>>>(devPointer);
}
__global__
void cudaKernel(short* arr)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
short val = arr[idx];
}
На данный момент значение val
равно 1063714857, и я хочу, чтобы это было 41. Я предполагаю, что проблема в 41 в шестнадцатеричном является 0x29 и у меня есть значение 0x3F670029, так что похоже, что он читает слишком много байтов, потому что 0x29 находится в начале. Когда я переключаюсь на массив с плавающей точкой, он работает отлично, но я пытался сэкономить память. Разве CUDA не допускает массив шорт?