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