kernel中的循环

我现在需要实现这么一种算法,
在kernel中加入一个循环,每次循环结束得到的都是一个二维数组,然后此二维数组在下次循环中会被更新为新的值,以此类推。。
我想把每次循环得到的这个数组都记录下来写到文件中,有没有办法可以做到呢?
还是说必须得将循环放在CPU上才行呢?放在CPU端,就必须得频繁的拷贝数据吧,是不是这样?

楼主您好,的确是这样的,因为目前在GPU里,您还无法直接写文件(所以你必须复制回来,在CPU上干)。

以及,这实际带来了一个问题,您的代码有三个速度限制:
(1)GPU生成数组的速度限制(例如:生成速率是100GB/S)
(2)数组通过PCI-E传输的限制 (例如:传输回来的速率是8GB/S)
(3)数组写入磁盘文件的速度限制(例如:保存文件的速率是80MB/S)

这三个限制中,往往第三点(在您当前的构思下)是最要命的,您也可以从上文的3个例子数字中直观的看到这点。所以您此时,直接在CPU上完成最方便了。因为您的GPU运算速度和您的保存文件的速度相差太大!为了CUDA而CUDA可能意义不大了。

请您考虑这点。

感谢来访。

横扫斑竹,您好
请问如果在kernel中使用了多个block,怎么才能保证使用的所有的线程都能同步呢?block内的线程同步是 __syncthreads(),因为我现在用到很多block中的很多thread去共同表示一个数组,并参与计算,而且前后值会有影响,所以想要做到所有的block都算完再执行下一步,怎么才能做到呢?

LZ您好:

block之间是不保证顺序的,无法同步,如果需要同步,那么结束该kernel是唯一的方法,您可以先结束一个kernel,然后再启动另外一个kernel接着运行后面的任务。

祝您编码顺利~

嗯 好的 感谢ice斑竹和横扫斑竹