Cuda易变变量需要Threadfence吗?

时间:2014-10-27 15:28:11

标签: cuda

每个共享/全局内存写入/读取的易失性力直接进入共享/全局内存。这会自动完成threadfenced的功能吗?例如:

volatile __shared__ int s;

s = 2;
s = 10

那么“s = 2”和“s = 10”之间不需要使用threadfence吗?

我们可以说对于volatile变量,不需要threadfence吗?如果没有,任何一个例子?

1 个答案:

答案 0 :(得分:1)

对于如下定义的共享内存中的volatile变量:

volatile __shared__ int s;

执行以下行后,threadblock中其他线程的任何访问:

s = 2;

s视为包含2,假设没有s的进一步更新。但是volatile不会导致任何障碍__threadfence() and its derivatives执行障碍。在确保共享内存和全局内存(对于__threadfence())的更新对其他线程可见之前,有问题的线程不会超出该障碍。

但是,按以下顺序:

s = 2;
s = 10;

无法保证其他线程会看到什么(除了在warp同步情况下,并且还有你未提供的进一步场景描述),除了它们将看到2或10(并且再次假设没有进一步更新s)。