有人可以用简单的术语解释什么线程组在金属计算着色器和SIMD组,threadExecutionWidth(wavefront)等其他术语中的概念?我阅读了文档,但更加困惑。例如,如果我有一个1024x1024的图像,我可以拥有多少个线程组,如何将线程映射到每个像素,可以同时运行多少个等等?我找不到描述计算着色器和这些概念的WWDC视频。
答案 0 :(得分:2)
线程组是一组线程,它们协同工作来解决某个(子)问题。您可以在线程组中拥有最多512
或1024
个线程(取决于您使用的设备)。
threadExecutionWidth
是使用的SIMD组的大小。它通常为32
,这意味着每个SIMD组中都有32
个线程。为获得最佳性能,线程组中的线程数应为threadExecutionWidth
的倍数。 (这确实是其他人所说的波前或扭曲。)
如果您有一个1024x1024
图像,并且您希望一个线程处理一个像素,并且最大线程组大小为512
,那么您可以创建一个包含1024x1024
个线程的网格32x64
大小为32x16
的线程组(即512
)。
但实际上,你可以根据需要划分线程。您还可以拥有大小为2x1024
的{{1}}个线程组的网格,或者其他任何内容。