内存拷贝问题???????

cudamalloc(A_dev,…);
A_hst = malloc(…);
cudaMemset(A_dev,0,…);// 设备内存置0
cudaMemcpy(A_hst,A_dev,…);

fprintf()出来发现,A_hst里的值都为无效值(-431602080.00).
请教各位,这是为什么?

楼主您好,

为了性能,cudaMalloc()和malloc()均不对分配出的内存清0的。

以及,A_hst = malloc(…);//填充A_dev (此行为并不会填充A_dev,也不会清零它)。

因为cudaMalloc出来的缓冲区没有清零,自然您cudaMemcpy回来也不不能保证都是0. (存在一定概率它们不用清0,本身就是0,但这要看运气)

所以您的问题得到了解答。

不好意思 我写错了,我的意思是,分配完内存,对设备端内存A_dev操作(省略)后,将其拷贝到主机端,发现值不对。不知是何原因。

嗯嗯。收到楼主的最新更正说明。

如果都是-431602080.00f, 这是一个很规律的0xcd cd cd cd,这个是VC的典型的debug下的行为。对heap分配出的内存的“未初始化”值(在正常release后是随机值,这个是辅助调试的)

即:
楼主的cudaMemcpy没有执行,导致VC的调试用的magic number一直没有被改变。

建议:
楼主检查之前的“填充操作”是否正确。
楼主检查cudaMemcpy是否成功。

非常感谢版主,之前我在cudaMemcpy加入到cutilSafeCall中了,去掉后正常,请问版主这是什么原因?

不懂cutilSafeCall, 这不是CUDA的一部分。不能为您提供技术支持。

Thanks all the same!:handshake