Темы



Выпуск компилятора ISPC 1.32, развиваемого Intel для языка Си с расширениями SPMD

Коротко сгенерировано ИИ по тексту статьи
  • ISPC 1.32 получила полную поддержку AVX10.2 и APX для целей Diamond Rapids и Nova Lake.
  • Добавлена поддержка AMD Zen 6 через параметр `--cpu=znver6` и функции параллельного извлечения и размещения битов.
  • LLVM обновлён до версии 23.1.2; появились функции загрузки GPU-модулей SPIR-V из памяти и начальная поддержка LLVM 24.

Компания Intel опубликовала компилятор ISPC 1.32 (Implicit SPMD Program Compiler), предназначенный для сборки кода на языке Си с расширениями параллельного программирования SPMD (Single Program, Multiple Data), позволяющими добиться параллельного выполнения нескольких экземпляров одной программы с разными наборами входных данных. Код проекта написан на языке С++ и распространяется под лицензией BSD. Поддерживается работа в Linux, Windows, macOS и FreeBSD.

Си-программы с расширениями SPMD компилируются для выполнения на вычислительных блоках SIMD, предоставляемых CPU и GPU, что позволяет задействовать механизмы векторизации SIMD без низкоуровневых оптимизаций и явного применения в коде SIMD-инструкций. Для написания распараллеливаемых функций используется привычный синтаксис и идиомы языка Си — SPMD-функции напрямую взаимодействуют с функциями и структурами, написанными на C/C++. Для отладки программ могут применяться существующие отладчики.

В качестве бэкенда для генерации кода и оптимизации в ISPC используется инфраструктура LLVM. Поддерживаются векторные инструкции x86 (SSE2, SSE4, AVX, AVX2, AVX512) и ARM (NEON), а также вынос вычислений на сторону GPU (Intel Gen9 и Xe). На архитектурах с векторными блоками SSE, обрабатывающими по 4 элемента за раз, применение ISPC даёт возможность добиться ускорения выполнения программы в 3 или более раз, а на архитектурах с векторными блоками AVX, обрабатывающими по 8 элементов за раз, ускорение может достигать 5–6 раз. При этом помимо размера векторного блока, масштабирование также обеспечивается за счёт выполнения на разных процессорных ядрах.

Основные новшества, добавленные в версии ISPC 1.32:

  • Обеспечена полная поддержка расширений AVX10.2 и APX (Advanced Performance Extensions), применяемых при генерации кода для сборочных целей avx10.2dmr (CPU Intel Diamond Rapids) и avx10.2nvl (CPU Intel Nova Lake).
  • Добавлена поддержка процессоров на базе микроархитектуры AMD Zen 6, включаемая через опцию »--cpu=znver6».
  • В стандартную библиотеку добавлены функции pdep32(), pext32(), pdep64() и pext64() для выполнения операций над битами «параллельное извлечение» и «параллельное размещение».

  • В ISPC Runtime реализованы функции ispcrtLoadModuleFromMemory () и ispcrtLoadModuleFromMemoryWithOptions (), при помощи которых можно загрузить GPU-модуль из находящегося в оперативной памяти буфера SPIR-V.

  • Инструментарий LLVM обновлён до версии 23.1.2. Добавлена начальная поддержка сборки с находящейся в разработке веткой LLVM 24.



Источник: http://www.opennet.ru/opennews/art.shtml? num=66467

© OpenNet