我试图将无符号整数数组(在msgs
中)复制到GPU上进行处理,但以下代码并未复制任何内容。我在cudaMemcpy
电话周围投入了一些cuda错误检查代码,我收到了以下内容:invalid argument
。
...
unsigned int *device_msgs;
size_t size_msgs = (size_t)(16*num_msgs);
cudaMalloc((void **) &device_msgs, size_msgs);
cudaMemcpy(device_msgs, msgs,
sizeof(unsigned int)*16*num_msgs,
cudaMemcpyHostToDevice);
...
我将cudaMalloc
包装在相同的错误检查代码中,没有任何看似错误。实际的内核调用导致相同的invalid argument
cuda错误,但这可能与memCpys
有关,因为我传入了设备指针。任何人都知道这里发生了什么?
编辑:要明确,msgs
事先是正确的malloc。
答案 0 :(得分:2)
您似乎为device_msgs分配了16 * num_msgs字节,然后由于sizeof(unsigned int)乘数而尝试复制更多。尝试将其更改为:
unsigned int *device_msgs;
size_t size_msgs = sizeof(unsigned int)*16*num_msgs;
cudaMalloc((void **) &device_msgs, size_msgs);
cudaMemcpy(device_msgs, msgs, size_msgs, cudaMemcpyHostToDevice);