cudaMemcpy实际上没有复制任何东西

时间:2014-05-10 02:30:25

标签: c cuda

我试图将无符号整数数组(在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。

1 个答案:

答案 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);