代码之家  ›  专栏  ›  技术社区  ›  tmlen

CUDA中屏障(CLK_GLOBAL_MEM_FENCE)的等价物

  •  0
  • tmlen  · 技术社区  · 6 年前

    什么是呼叫 barrier(CLK_GLOBAL_MEM_FENCE) (OpenCL),在库达?

    够了吗 __syncthreads() ,或是 __threadfence() 对于全局内存围栏是必要的,还是两者都有?如果是的话,这两个词应该以什么顺序来称呼?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Robert Crovella    6 年前

    您可能希望阅读CUDA文档 here 无论是在记忆篱笆上还是在执行障碍上。

    __syncthreads() 既是一个执行屏障(对于块中的线程),也是一个用于共享和全局内存操作的内存围栏。对于全局内存操作,围栏强制仅针对块中的线程。

    这里的击剑有一个特定的含义: 在围栏之前发生的内存操作,在围栏之后发生的操作之前,将对块中的其他线程具有实际发生(即可见)的可见性。请查看已链接的文档以获取对此的详细说明。

    __threadfence() . 不像 , __线程界限() 任何形式的处决障碍。这只是一道记忆篱笆。

    调用的顺序应该无关紧要(只要没有干预操作)。栅栏是一个分界点,它的功能 __线程界限() 是包含在