The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

08.02.2025 11:08

Компания Intel опубликовала компилятор ISPC 1.26 (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.26:

  • Улучшена поддержка архитектуры ARM:
    • Изменено поведение флага "--arch=arm", который теперь связан с архитектурой ARMv8 (32-bit), а не ARMv7 (для ARMv8 в 64-разрядном режиме как и раньше следует использовать флаг "--arch=aarch64").
    • Прекращена поддержка процессоров ARMv7 Cortex-a9 и Cortex-a15.
    • Добавлена поддержка процессоров Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520, а также новых ARM-процессоров Apple.
    • Добавлены новые сборочные цели: neon-i16x16 и neon-i8x32.
    • Добавлена поддержка операций на базе векторных инструкций ARM SDOT и UDOT.
    • Проведена оптимизация, производительность для ARMv8 в среднем увеличилась на 13%.
  • Добавлен новый вид сборочных целей - "generic", позволивший оптимизировать внутреннюю архитектуру компилятора и упростить добавление новых сборочных целей. Идея в том, чтобы поддерживать базовые цели для специфичных аппаратных возможностей, поверх которых легко можно создавать цели с частными оптимизациями. На использование generic-целей переведена поддержка архитектуры ARM.
  • В генераторе кода проведена корректировка развёртывания циклов и функций для сокращения размера результирующего кода в режиме оптимизации "-O1". Улучшена генерация кода для встроенных функций count_leading_zeros и count_trailing_zeros, а также при возвращении структур из функций и при сохранении или загрузки данных с типами int8/int16.
  • Расширена поддержка встроенных функций (intrinsics) LLVM, активируемая при указании флага "--enable-llvm-intrinsics".
  • Инструментарий LLVM обновлён до версии 18.1.8 с патчами. Добавлен макрос для определения используемой в ISPC версии LLVM.
  • Разрешено применение атрибута "__attribute__((deprecated))" к функциям для вывода предупреждения при вызове функции.
  • Удалена сборочная цель avx512knl-x16 (KNL).
  • Добавлена опция "--darwin-version-min" для указания минимально поддерживаемой версии целевой платформы для macOS и iOS.


  1. Главная ссылка к новости (https://github.com/ispc/ispc/r...)
  2. OpenNews: Выпуск компилятора ISPC 1.25, развиваемого Intel для языка Си с расширениями SPMD
  3. OpenNews: Доступен Vcc, C/C++ компилятор для Vulkan
  4. OpenNews: Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лицензии Apache 2.0 и LLVM
  5. OpenNews: Intel представил nGraph, компилятор для систем машинного обучения
  6. OpenNews: Linux ядро адаптировано для сборки компилятором Intel C/C++
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62692-ispc
Ключевые слова: ispc, compile, intel
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (27) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:13, 08/02/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > компилятор для сборки кода на языке Си
    > код проекта написан на языке С++

    Хехе, это настолько типично))

     
     
  • 2.2, Аноним (2), 11:20, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А системы сборки пишут на питоне, представь себе!
     
     
  • 3.5, 12yoexpert (ok), 11:51, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    cmake и make не на питоне, а других не бывает
     
     
  • 4.7, Аноним (7), 12:09, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    gnome/gtk, wayland, xorg, mesa, systemd и др., использующие meson (на питоне), глядя на твой комментарий, тихонько недоумевают
     
     
  • 5.14, Аноним (14), 14:16, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Meson - не система сборки, там на самом деле собирает ninja. И он на C++.
     
  • 5.34, Аноним (-), 08:55, 09/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > gnome/gtk, wayland, xorg, mesa, systemd и др., использующие meson (на питоне), глядя
    > на твой комментарий, тихонько недоумевают

    К счастью есть такая штука как muon - реализация языка meson на си, так что можно и без питона к счастью :)

     
  • 4.8, openssh_user (ok), 12:19, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Meson для вас шутка
     
     
  • 5.31, 12yoexpert (ok), 23:46, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    именно, причём несмешная
     
  • 4.23, Семен (??), 17:22, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Уже как много лет в большом количестве проектов отказываются от cmake в сторону meson + ninja, так как даже на простых проектах cmake сценарии очень сильно раздувает и они становятся не читаемыми, их сложно поддерживать. make сам по себе не сильно умеет динамические сценарии сборки, для этого используют automake и autoconf. Плюс у meson более приятный и удобный синтаксис чем в m4, можно на python легко реализовать любую логику сборки, и сложные сценарии сборки. При этом сборочные скрипты будут легковесными и понятными любому.
     
     
  • 5.26, Аноним (26), 20:14, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ох уж эти фантазеры, прям много лет и на большом количестве, да?
     
     
  • 6.35, Аноним (7), 10:27, 09/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Много лет и на большом количестве, да.
     
  • 4.25, Аноним (7), 19:10, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    SCons
     
  • 4.36, Гром (?), 13:27, 09/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Cmake - это не система сборки, а конвертор конфигов из своего формата в форматы конфигов для систем сборки. Сам он ничего не собирает.
     
  • 4.37, Аноним (37), 23:30, 09/02/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На M4 бывает.
     
  • 3.9, Аноним (-), 12:34, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > А системы сборки пишут на питоне, представь себе!

    Система сборки чуток проще чем оптимизирующий компилятор. Совсем чуть-чуть))

    Ну и тот факт, что на сегодняшний день нет ни одного оптимизирующего компилятора на сишке, а только на плюсах - это просто показательно.

     
     
  • 4.11, Аноним (11), 13:30, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Показательно что? С++ там только из-за STL контейнеров, с которыми сильно проще строить AST. Это единственная причина почему Си компилятор написаны на С++. Но вообще есть ещё pcc и tinycc, которые написаны на Си.
     
     
  • 5.13, Аноним (2), 14:01, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    На С++ кодеры медленно работают. Джава и лучше. Если мешают GC и проверки - можно по идее для компилятора сделать сборку jre без этого, компилятору не обязательно убирать мусор - он один файл собирает и завершается, память ОС обратно забирает сама.
     
  • 5.19, Bottle (?), 15:28, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    О да! Видимо, по какой-то причине сишники не осилили написать собственные STL-контейнеры! Казалось бы, что им мешало, если Сишка такой хороший язычок?
     
  • 5.20, Аноним (-), 15:49, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Показательно что?

    Показательно что на сишке не осилили)))

    > С++ там только из-за STL контейнеров, с которыми сильно проще строить AST.

    Ахаха, это еще более показательно!

    > pcc и tinycc...

    ... не являются оптимизирующими компиляторами.

    pcc 1.1.0 поддерживает только x86 и x86-64, последний раз релизился 10 лет назад (читай нет поддержки современных процов) и его выкинули даже из бзди.
    tinycc чуть лучше, он еще в арм смог, но все равно никаких оптимизаций

     
  • 2.3, Семен (??), 11:30, 08/02/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, так как ISPC использует как ядро LLVM. Нет смысла писать компилятор с нуля, когда LLVM дает очень удобный API для написания компиляторов. Скорость разработки в разы выше будет и 80% работы сделает LLVM. ISPC похож в работе на polly из LLVM, только может гибче и лучше векторизировать код.
     

  • 1.4, 12yoexpert (ok), 11:51, 08/02/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > параллельного выполнения нескольких экземпляров одной программы с разными наборами входных данных

    микросервисы задолбали даже самих интел. видимо, только так можно с ними бороться

     
     
  • 2.38, Аноним (38), 02:12, 10/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, это чтобы во всяких ffmpeg обойтись без ассемблерных вставок.
     
  • 2.39, Аноним (39), 09:34, 10/02/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Микросервисы это не про параллельность обработки данных, а про разбиение кода и его изоляцию друг от друга. Иначе миллионы строк когда нереально поддерживать, а сборка проектов может длиться днями на средних компах. В общем хотя бы первые курсы универа закончи с дабами на c++ и переходи на что-то серьезнее.
     

  • 1.17, Ю.Т. (?), 15:15, 08/02/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Править не буду, лень, но SPMD это не "несколько экземпляров входных данных". Это то, что на практике делают со средой MPI, которая формально MIMD - распределенное исполнение с физически разделенной памятью. То есть данные не "входные", а те, которые поданы на соответствующий процесс из программы.
     
  • 1.27, Аноним (27), 20:37, 08/02/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Удобно для реализации алгоритмов обучения нейронных сетей (в частности, ресурсоемких градиентных). А вот это
    > Поддерживается работа в Linux, Windows, macOS и FreeBSD

    достойно.

     
     
  • 2.33, Аноним (33), 06:39, 09/02/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Приличные люди проприетарные системы поддерживать не будут. У сабжа пермиссивная лицензия. Неудивительно.
     

  • 1.40, Аноним123 (?), 13:04, 10/02/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем он нужен? Чтобы компилировать С программы под видеокарту?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру