Как потоки в группе потоков могут работать вместе? - PullRequest
0 голосов
/ 07 июня 2019

В документации групп потоков говорится, что "Threads организованы в threadgroups, которые выполняются вместе и могут совместно использовать общий блок памяти. Хотя иногда функции ядра разрабатываются так, что потоки работать независимо друг от друга, it's also common for threads in a threadgroup to collaborate on their working set. "

На данный момент я работал только с некоторыми программами GPGPU, у которых есть потоки, работающие в своих целях. Может ли кто-нибудь привести пример, как threads в threadgroup могут работать вместе? Как они могли использовать общую память для совместной работы?

1 Ответ

0 голосов
/ 09 июня 2019

Особенность потоковых групп в том, что они работают на SIMD, как наборы данных.Вы выполняете 1 инструкцию, и она работает с несколькими элементами данных.Существуют специальные инструкции Metal, в которых потоки в группе потоков могут передавать результаты другим потокам, но они существуют только для реализации MacOSX, а не для iOS.Но есть и другой вид «совместной работы», который возможен с помощью компьютерного шейдера.Если вы хотите увидеть пример усовершенствованного Rice-декодера на основе Metal, который использует вычислительный шейдер для работы с несколькими входными элементами, а затем испускает несколько выходных элементов, взгляните на мой Rice-декодер Rice-декодер для Metal .Этот код в основном работает побайтово и распаковывает данные, но чтение выполняется по 4 байта за раз, так что выполнение SIMD обеспечивает наилучшую возможную производительность.

...