cudaMemcpy失败

运行完kernel函数后,我将数据从Device拷贝到Host,拷贝失败,可能是什么方面的原因呢

楼主您好,复制失败的最大除了您给出的参数错误外,最大的可能不在复制本身。

而在之前您的kernel失败,
请您检查cudaError_t result = cudaMemcpy(…);的返回值result,
看看result是否是cudaErrorUnknown之类的常见的kernel出错值。

感谢您的来访,请您一定要按我说的做。

输出错误可以用
printf(“%s\n”, cudaGetErrorString(result));

对楼上一个简单补充!

值得注意的是,cudaGetErrorString()得到的字符串和cudaError_t的枚举类型里面的各情况叫法是不一致的,请LZ注意,以免疑惑。

对楼上一个简单补充!:slight_smile:

对,应该输出的是cudaGetLastError();
放在cudaGetErrorString()里面,把这个printf整体放在memcpy的后面看看!

总版大,我说的不是你那个意思,你3#的用法是可以的,因为2#是收集的cudaMemcpy()这个同步函数的返回值,这没问题的。

我的意思是,cudaSuccess这个cudaError_t的枚举值,用cudaGetErrorString得到的字符串是 no error。

这两个叫法并不统一,为了避免LZ迷惑,特此说明。