发布于 2017-08-26 17:25:49
引用Apple的话:
在屏障中设置的mem标志告诉编译器哪些缓存需要刷新,这样当yoru代码执行屏障时,所有线程都可以看到相同的内容。如果您使用mem_none,则不会刷新缓存,并且没有定义由一个线程写入任何类型的内存的值是否会被任何其他线程看到。如果设置了mem_threadgroup,则可以确保写入线程组内存的任何值(只有线程组内存)都可以由其他线程在屏障之后看到。 因此,要回答您的问题,如果内核不依赖于从另一个线程写入线程组内存的值,则可以使用mem_none。但是,如果首先使用线程组内存,则很可能(但不是给定的)使用它在线程之间进行通信,因此您可能希望设置mem_threadgroup。
发布于 2019-02-07 13:37:38
根据do语言规范,mem_threadgroup确保线程组内存访问操作的顺序。
https://stackoverflow.com/questions/44660599
复制相似问题