金属计算着色器threadgroup&threadExecutionWidth

问题描述 投票:0回答:1

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

ios metal compute-shader metalkit threadgroup
1个回答
2
投票

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

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

如果你有一个1024x1024图像并且你想要一个线程处理一个像素,并且最大线程组大小是512,那么你可以创建一个1024x1024线程的网格,它包含大小为32x6432x16线程组(即512)。

但实际上,您可以根据需要划分线程。你也可以有一个大小为2x1024512x1线程组的网格,或者其他什么。

© www.soinside.com 2019 - 2024. All rights reserved.