金属计算着色器threadgroup& threadExecutionWidth

时间:2018-04-30 04:05:29

标签: ios metal compute-shader metalkit threadgroup

有人可以用简单的术语解释什么线程组在金属计算着色器和SIMD组,threadExecutionWidth(wavefront)等其他术语中的概念?我阅读了文档,但更加困惑。例如,如果我有一个1024x1024的图像,我可以拥有多少个线程组,如何将线程映射到每个像素,可以同时运行多少个等等?我找不到描述计算着色器和这些概念的WWDC视频。

1 个答案:

答案 0 :(得分:2)

线程组是一组线程,它们协同工作来解决某个(子)问题。您可以在线程组中拥有最多5121024个线程(取决于您使用的设备)。

threadExecutionWidth是使用的SIMD组的大小。它通常为32,这意味着每个SIMD组中都有32个线程。为获得最佳性能,线程组中的线程数应为threadExecutionWidth的倍数。 (这确实是其他人所说的波前或扭曲。)

如果您有一个1024x1024图像,并且您希望一个线程处理一个像素,并且最大线程组大小为512,那么您可以创建一个包含1024x1024个线程的网格32x64大小为32x16的线程组(即512)。

但实际上,你可以根据需要划分线程。您还可以拥有大小为2x1024的{​​{1}}个线程组的网格,或者其他任何内容。