从本地内存写入全局时,我是否需要本地和全局内存屏障

Do I need both a local and global memory barrier when writing form local memory to global

在我的内核中,每个线程写入本地内存中的一个区域,然后它们 从本地内存复制到全局内存。全局内存永远不会在内核中读取,只能写入。但是,在全局复制完成后,随后将写入本地内存缓冲区。

我在复制代码后是否需要全局内存屏障和本地内存屏障,还是只需要本地内存屏障:

Do I need a global memory barrier as well as a local memory barrier after my copy code, or just a local memory barrier?

视情况而定。没有代码,很难回答你的问题。

In my kernel, each thread writes to a region in local memory, and then they copy from local memory to global memory.

没有看到代码我无法准确回答你的情况,但基本上只有两种情况:

  1. 工作项从它们写入的同一内存读取(数据跨工作项共享):内存屏障不需要.
  2. 从内存中读取的工作项被另一个工作项写入。 (数据在工作项之间共享):需要内存屏障

Global memory is never read in the kernel, only written to.

那你就不需要全局内存屏障了。当您需要对读者和作者之间的操作进行排序时,就需要障碍。如果没有读者(或没有作者),那么障碍就是多余的。