Размер рабочей группы должен быть больше 16 и быть кратным 16.
Поскольку две возможные полосы SIMD в Gen — это 8 или 16. Чтобы не тратить дорожки SIMD впустую, нам нужно следовать этому правилу.
Также упоминается в вычислительных Архитектура процессорной графики Intel Gen7.5:
Для продуктов на основе Gen7.5 каждый EU имеет семь потоков, что в сумме составляет 28 Кбайт файла регистров общего назначения (GRF).
...
В вычислительной архитектуре Gen7.5 большинство моделей программирования SPMD используют генерацию кода в этом стиле и выполнение процессора EU. По сути, каждый экземпляр ядра SPMD выполняется последовательно и независимо в пределах своей собственной дорожки SIMD.
На самом деле, каждый поток одновременно выполняет количество экземпляров ядра, равное числу SIMD-Width. Таким образом, для компиляции SIMD-16 вычислительного ядра возможно, чтобы SIMD-16 x 7 потоков = 112 экземпляров ядра выполнялись одновременно на одном EU. Аналогично, для SIMD-32 x 7 потоков = 224 экземпляра ядра, выполняющихся одновременно в одном EU.
Если я правильно понимаю, используя SIMD-16 x 7 threads = 112 kernel instances
в качестве примера, чтобы запустить 224 потока на одном EU, размер рабочей группы должен быть 16. Тогда компилятор OpenCL свернет 16 экземпляров ядра в 16-полосный поток SIMD и сделает это 7 раз по 7 рабочим группам и запускать их на одном ЕС?
Вопрос 1: прав ли я до сих пор?
Однако спецификация OpenCL также предоставляет векторные типы данных. Таким образом, можно полностью использовать вычислительные ресурсы SIMD-16 в ЕС с помощью обычного программирования SIMD (как в NEON и SSE).
Вопрос 2. Если это так, использование типа данных vector-16 уже явно использует ресурсы SIMD-16 и, следовательно, снимает ограничение не менее 16 элементов на рабочую группу. . Так ли это?
Вопрос 3: Если все вышеперечисленное верно, то как эти два подхода соотносятся друг с другом: 1) 112 потоков объединяются в 7 потоков SIMD-16 компилятором OpenCL; 2) 7 собственных потоков, закодированных для явного использования типов данных vector-16 и операций SIMD-16?