我正在编写一个必须执行块间同步的代码(N维和其他内存传输操作的总和)。当我增加问题的维度时,结果是错误的。
我与 _ threadfence() 进行同步,并且第一个维度(N <192)没问题,但如果我插入其他 _threadfence()在代码段中,结果对于更多维度是正确的。
一个threadfence()不足以同步?另外,数据结果用在同一个块中。
在编程指南中,信息表明threadfence等待所有内存空间准备就绪(共享和全局)
答案 0 :(得分:8)
没有很好的方法来执行块之间的同步。您可以采用旋转等待的方法,占用GPU内存带宽,也可以终止内核并开始新的内核。
对于块之间的同步, __threadfence()
不。 __threadfence()
用于暂停当前线程,直到其他线程可以看到对共享和全局内存的所有先前写入。它不会停止也不会影响其他线程的位置!
您可以查看以下问题: