如何实现忙等待机制,示例如下:
为了避免变量被缓存,即使变量最终被设置为1,该线程也会无限期地阻塞。对我来说,这一切都是非常奇怪的行为,因为在CPU上复制此代码会产生正确的行为。
编辑:奇怪的是,如果我每个块只有1个线程,则这似乎可以正常工作,但如果我在一个块中有几个线程,则不能看到同一块中的线程所做的写入,但可以看到来自其他块的线程所做的写入。奇怪...
while(variable == 0);
当某个CUDA线程在发生某些事件后将变量更新为1时。
我试图按照上面的方式编写代码,但是调用线程似乎完全忽略了它并且不等待。我非常确定该值为0,但线程根本不等待。 此外,如果我这样写:
while(variable == 0) __threadfence();
为了避免变量被缓存,即使变量最终被设置为1,该线程也会无限期地阻塞。对我来说,这一切都是非常奇怪的行为,因为在CPU上复制此代码会产生正确的行为。
编辑:奇怪的是,如果我每个块只有1个线程,则这似乎可以正常工作,但如果我在一个块中有几个线程,则不能看到同一块中的线程所做的写入,但可以看到来自其他块的线程所做的写入。奇怪...