首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金属mem_none与mem_threadgroup

金属mem_none与mem_threadgroup
EN

Stack Overflow用户
提问于 2017-06-20 18:31:57
回答 2查看 841关注 0票数 1

金属着色语言规范中的文档如下:

  • 在这种情况下,mem_none不应用内存隔离,而threadgroup_barrier只充当执行障碍。
  • mem_threadgroup确保为线程组中的线程对线程组内存正确地排序内存操作。

这是否意味着每当我们使用线程组内存时,我们都需要使用mem_threadgroup作为屏障?如果是的话,在什么情况下mem_none就足够了?

我看到了加载线程组内存的代码,但是使用了mem_none (这是代码incorect吗?)还有另一个使用示例mem_threadgroup

EN

回答 2

Stack Overflow用户

发布于 2017-08-26 17:25:49

引用Apple的话:

在屏障中设置的mem标志告诉编译器哪些缓存需要刷新,这样当yoru代码执行屏障时,所有线程都可以看到相同的内容。如果您使用mem_none,则不会刷新缓存,并且没有定义由一个线程写入任何类型的内存的值是否会被任何其他线程看到。如果设置了mem_threadgroup,则可以确保写入线程组内存的任何值(只有线程组内存)都可以由其他线程在屏障之后看到。 因此,要回答您的问题,如果内核不依赖于从另一个线程写入线程组内存的值,则可以使用mem_none。但是,如果首先使用线程组内存,则很可能(但不是给定的)使用它在线程之间进行通信,因此您可能希望设置mem_threadgroup。

票数 4
EN

Stack Overflow用户

发布于 2019-02-07 13:37:38

根据do语言规范,mem_threadgroup确保线程组内存访问操作的顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44660599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档