我碰巧遇到了CUDA手册中的__threadfence()!什么是__threadfence()以及它是如何有用的?我们也可以使用__threadfence()来模拟块级同步吗?
答案 0 :(得分:1)
现代架构有一个宽松的内存模型,这意味着内存访问不一定按它们在程序中出现的顺序执行。
Threadfence指令实际上是一个内存栅栏 - 它确保在栅栏实际执行栅栏之前出现的内存访问。正如您在手册中看到的那样,围栏有3种变体处理共享(块)内存,全局内存和主机内存。
另一方面,__ syncthreads提供块级同步,即块中的线程将等待。请注意,__ syncthreads还充当同一块中线程的内存栅栏。
手册中的示例是一个很好的例证。
查看nv论坛的回复 https://devtalk.nvidia.com/default/topic/412600/trying-to-understand-memory-fence-function-example/