我正在编写必须执行块间同步(N个维和其他内存传输操作的总和)的代码。当我增加问题的维度时,结果是错误的。
我正在与__threadfence()
和第一个维度(N <192)进行同步,但是,如果我在代码段中插入其他__threadfence()
,则对于更大的维度,结果是正确的。
一个threadfence()
是否不足以进行同步?另外,数据结果用于同一块中。
在编程指南中,信息表明threadfence
等待所有存储空间都准备好(共享和全局)
没有在块之间执行同步的好方法。您可以通过等待等待和消耗GPU内存带宽来采用骇人听闻的方法,也可以终止内核并启动一个新内核。
__threadfence()
为not”用于块之间的同步。 __threadfence()
用于暂停当前线程,直到其他线程可以看到以前所有对共享和全局内存的写入。但是,它既不停止也不影响其他线程的位置!
您可以检查以下问题: