cuda threadfence

Mar*_*ila 2 synchronization cuda gpgpu

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

我用_ threadfence()和第一个维度(N <192)进行同步,这是好的,但如果我插入其他在这段代码中使用_threadfence(),结果对于更多维度是正确的.

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

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

Cyg*_*sX1 8

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

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

您可以查看以下问题:

  • 不。`__threadfence()`仅保证*当前*线程不会继续,直到当前线程对全局内存的所有先前更改都被其他线程可见。然而,其他线程可能会尝试在此之前读取相同的内存单元,读取旧数据并在“__threadfence()”之外继续执行。 (3认同)