Может ли кто-нибудь объяснить простыми словами, что концептуально представляет группа потоков в вычислительных шейдерах Metal и другие термины, такие как группа SIMD, threadExecutionWidth (wavefront)? Я читал документы, но еще больше запутался. Например, если у меня есть изображение размером 1024x1024, сколько у меня может быть групп потоков, как я могу сопоставить потоки с каждым пикселем, сколько потоков может выполняться одновременно и т. д.? Я не могу найти видео WWDC с описанием вычислительных шейдеров и этих концепций.
Вычислительные шейдеры Metal threadgroup и threadExecutionWidth
Ответы (1)
Группа потоков — это группа потоков, которые работают вместе для решения определенной (под)проблемы. В группе потоков может быть максимум 512
или 1024
потоков (в зависимости от используемого устройства).
threadExecutionWidth
— это размер используемых групп SIMD. Обычно это 32
, что означает, что в каждой группе SIMD есть 32
потоков. Для оптимальной производительности количество потоков в вашей группе потоков должно быть кратно threadExecutionWidth
. (Это действительно то, что другие называют волновым фронтом или деформацией.)
Если у вас есть изображение 1024x1024
и вы хотите, чтобы один поток обрабатывал один пиксель, а максимальный размер группы потоков равен 512
, вы можете создать сетку из 1024x1024
потоков, состоящую из 32x64
групп потоков размером 32x16
(т. е. 512
).
Но на самом деле, вы можете разделить потоки, как хотите. У вас также может быть сетка из 2x1024
групп потоков размером 512x1
или что-то еще.