cuda threadfence

时间:2012-07-19 23:29:13

标签: synchronization cuda gpgpu

我正在编写一个必须执行块间同步的代码(N维和其他内存传输操作的总和)。当我增加问题的维度时,结果是错误的。

我与 _ threadfence() 进行同步,并且第一个维度(N <192)没问题,但如果我插入其他 _threadfence()在代码段中,结果对于更多维度是正确的。

一个threadfence()不足以同步?另外,数据结果用在同一个块中。

在编程指南中,信息表明threadfence等待所有内存空间准备就绪(共享和全局)

1 个答案:

答案 0 :(得分:8)

没有很好的方法来执行块之间的同步。您可以采用旋转等待的方法,占用GPU内存带宽,也可以终止内核并开始新的内核。

对于块之间的同步,

__threadfence() __threadfence()用于暂停当前线程,直到其他线程可以看到对共享和全局内存的所有先前写入。它不会停止也不会影响其他线程的位置!

您可以查看以下问题: