关于cudaMemcpy的问题

逛了一会论坛,发现各位版主真是很热情,先谢谢各位版主。
菜鸟第一次发帖,言归正传。
我用的是Tesla M2090的卡,在从主机拷贝大小为 5823834sizeof(float)的矩阵到GPU时,出现了问题,拷贝不进去,不知道为什么?大小为1311128sizeof(float)时就没有问题,两个矩阵大小差别比较大,没有找寻临界的大小。
:dizzy:

LZ您好:

1:cudaMemcpy一般只要参数是正确的,就不会出现问题。

2:以及您的5823834sizeof(float),这个容量还不到10MB,其大小并无特殊。

3:请您确定您之前申请的空间足以放下您copy的数据量,这个您应该是知道的,而不是需要“寻找临界大小”。

大致如此,供您参考。

祝您编码顺利~

谢谢你的解答。
是这样的,我用的是同一段代码,试验过几回,也很纳闷,比这个1311128sizeof(float)小的矩阵没有问题,比这个大矩阵就赋不进去,将d_RxPower赋回CPU,并查看,全为0,h_RxPower的值一开始就没进去。。。我代码应该没有问题,空间的申请都是和矩阵匹配的。晕啊。。。

您确定2次分配都成功了么?

能否发一下返回值给ICE. 谢谢!

这个返回值应该怎么得到。。。
菜鸟一直是用很笨的办法,额外设置了一个变量,来返回计算过程中的一些中间变量。
我是跑了好几个case,矩阵比上述小的都没有问题,矩阵大点就有这个毛病。

(1)返回值就是cudaError_t = cudaMemcpy(…);

(2)
以及,考虑到您追加了这一段,您是在cudaMalloc和cudaMemcpy有无过kernel启动?

如果有,那么cudaMemcpy失败可能是因为之前的kernel出错而导致的。建议查一下。

好的,谢谢你,这么晚还回复。
有事得先下线了,明天我验证以后,再与你交流。
:slight_smile:

找到问题了,我的线程是dim3 threads(6,M1); 将582作为M1代入,线程数超过一个线程块的上限,用cudaError_t得到的错误是invalid configuration argument。
恩,好的编码习惯是很重要的。
谢谢千军,谢谢ice;

恭喜楼主解决问题!

欢迎您常来论坛转转~