在线程组的documentation中,它说:"Threads
被组织成threadgroups
,它们一起执行,可以共享一个公共的内存块。虽然有时内核函数被设计成线程彼此独立运行,但it's also common for threads in a threadgroup to collaborate on their working set.
“
到目前为止,我只在一些GPGPU程序上工作,这些程序的线程有自己的用途。谁能给我举个例子,threadgroup
中的threads
是如何协同工作的?他们如何使用共享内存进行协作?
发布于 2019-06-09 06:58:46
线程组的问题是,它们像数据集一样在SIMD上工作。你执行一条指令,它会对多个数据元素进行操作。有一些特殊的金属指令,线程组中的线程可以将结果传递给其他线程,但这些指令只存在于MacOSX实现,而不存在于iOS。但是,使用计算着色器可以实现另一种“协同工作”。如果你想看一个高级的基于金属的大米解码器的例子,它使用一个计算着色器来操作多个输入元素,然后发出多个输出元素,看看我的大米解码器Rice decoder for Metal。这段代码基本上是逐字节操作并解压缩数据,但读取是一次4个字节,因此SIMD执行可以获得最佳性能。
https://stackoverflow.com/questions/56485053
复制相似问题