В группе Размер optimization guide of Beignet, an open source implementation of OpenCL targeting Intel GPUsКак максимально использовать SIMD в OpenCL?
Работа должна быть больше, чем 16 и быть кратным 16.
Как два возможных SIMD полос на Gen 8 или 16. Для того, чтобы не тратить SIMD полосы, мы должны следовать этому правилу.
Также упоминается в Compute Architecture of Intel Processor Graphics Gen7.5:
для продуктов на основе Gen7.5, каждый ЕС имеет семь темы в общей сложности 28 Кбайт файла регистров общего назначения (GRF).
...
На Gen7.5 архитектуры вычислительных, большинство моделей программирования SPMD используют этот стиль генерации кода и выполнения процессор ЕС. Фактически, каждый Ядро ядра SPMD, как представляется, выполняется серийно и независимо в пределах собственной SIMD-полосы.
В действительности каждый поток выполняет число SIMD-Width экземпляров ядра> одновременно. Таким образом, для SIMD-16 компиляции из вычислительного ядра, это возможно для SIMD-16 х 7 нитей = 112 экземпляров ядра , чтобы быть выполняется параллельно на одном ЕС. Аналогично, для SIMD-32 x 7 потоков = 224 экземпляров ядра, выполняющихся одновременно на одном ЕС.
Если я правильно понимаю, используя SIMD-16 x 7 threads = 112 kernel instances
в качестве примера для того, чтобы запустить 224 потоков на одном ЕС, размер рабочей группы должны быть 16. Затем компилятор OpenCL сбросит 16 экземпляров ядра в 16 lane SIMD thread, и делать это 7 раз на 7 рабочих группах и запускать их в одном ЕС?
Вопрос 1: Я исправлю, пока здесь?
Однако OpenCL spec также предоставляет векторные типы данных. Таким образом, возможно полностью использовать вычислительные ресурсы SIMD-16 в ЕС с помощью обычного программирования SIMD (как в NEON и SSE).
Вопрос 2: Если это так, то использование типа данных типа 16 явно использует ресурсы SIMD-16, поэтому устраняет ограничения по крайней мере на 16 элементов на рабочую группу. Это так?
Вопрос 3: Если все выше верно, то каким образом два подхода сравнить друг с другом: 1) 112 нитей сгиб в 7-SIMD-16 потоков по OpenCL компилятором; 2) 7 собственных потоков, закодированных для явного использования типов данных Vector-16 и операций SIMD-16?