Си-программа с расширениями SPMD компилируется для выполнения на вычислительных блоках SIMD, предоставляемых CPU и GPU, что позволяет задействовать в программах механизмы векторизации SIMD без низкоуровневых оптимизаций и явного применения в коде SIMD-инструкций. Для написания распараллеливаемых функций используется привычный синтаксис и идиомы языка Си. Данные SPMD-функции могут интегрироваться с приложениями на C/C++, и
напрямую взаимодействовать с их функциями и структурами. Для отладки программ могут применяться существующие отладчики.
В качестве бэкенда для генерации кода и оптимизации используется инфраструктура LLVM. Поддерживается использование векторных инструкций x86 (SSE2, SSE4, AVX, AVX2, AVX512) и ARM (NEON), а также вынос вычислений на сторону GPU (Intel Gen9 и Xe). На архитектурах с векторными блоками SSE, обрабатывающими по 4 элемента за раз, применение ISPC позволяет добиться ускорения выполнения программы в 3 или более раз, а на архитектурах с векторными блоками AVX, обрабатывающими по 8 элементов за раз, ускорение может составлять 5-6 раз. При этом помимо размера векторного блока, масштабирование также достигается за счёт выполнения на разных процессорных ядрах.
Основные новшества, добавленные в версии ISPC 1.24:
- Добавлена поддержка нетипизированных параметров в шаблонах функций. В качестве параметров шаблона теперь можно использовать унифицированные целые и перечисляемые значения (с признаком «uniform«).
- Добавлены dot-функции для знаковых и беззнаковых типов int8 и int16, в которых используются инструкции AVX-VNNI и AVX512-VNN.
- Добавлены определения макросов, определяющих ограничения размерности чисел.
- Добавлены новые целевые платформы: avx2vnni-i32x4, avx2vnni-i32x8, avx2vnni-i32x16 c поддержкой инструкции AVX-VNNI, и avx512icl-x4, avx512icl-x8, avx512icl-x16, avx512icl-x32, avx512icl-x64 c поддержкой инструкции AVX512-VNNI.
- Решены проблемы с использованием лишних векторных инструкций при генерации кода для GPU.
- Флаг командной строки «—pic» приведён к соответствию флагу «-fpic» в Clang и GCC, а флаг «—PIC» — к соответствию «-fPIC».
Источник: http://www.opennet.ru/opennews/art.shtml?num=61253