【发布时间】:2020-04-17 07:21:17
【问题描述】:
我已经编写了一个 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 不允许短裤数组吗?
【问题讨论】:
-
pastebin.com/TQa09ggt——当然可以。如果 pastebin 链接上的代码失败,则您的 CUDA 安装可能已损坏
标签: cuda