Металлические вычислительные шейдеры threadgroup & threadExecutionWidth - PullRequest
0 голосов
/ 30 апреля 2018

Может ли кто-нибудь объяснить простыми словами, что концептуально представляет группа потоков в шейдерах вычислений Metal и другие термины, такие как группа SIMD, threadExecutionWidth (wavefront)? Я читаю документы, но я в замешательстве. Например, если у меня есть изображение 1024x1024, сколько у меня может быть групп потоков, как я могу сопоставить поток с каждым пикселем, сколько может работать одновременно и т. Д.? Я не могу найти видео WWDC, описывающее вычислительные шейдеры и эти концепции.

1 Ответ

0 голосов
/ 30 апреля 2018

Группа потоков - это группа потоков, которые работают вместе для решения определенной (под) проблемы. Вы можете иметь максимум 512 или 1024 потоков в группе потоков (в зависимости от используемого устройства).

threadExecutionWidth - размер используемых групп SIMD. Обычно это 32, то есть каждая SIMD-группа содержит 32 потоков. Для оптимальной производительности число потоков в вашей группе потоков должно быть кратным threadExecutionWidth. (Это действительно то, что другие называют волновым фронтом или деформацией.)

Если у вас есть изображение 1024x1024 и вы хотите, чтобы один поток обрабатывал один пиксель, а максимальный размер группы потоков равен 512, то вы можете создать сетку из 1024x1024 потоков, которая состоит из 32x64 групп потоков из размер 32x16 (т.е. 512).

Но на самом деле вы можете разделять потоки так, как вы хотите. Вы также можете иметь сетку из 2x1024 групп нитей размером 512x1 или чего угодно.

...