30.06.2022

Опубликован HPVM 2.0, компилятор для CPU, GPU, FPGA и аппаратных ускорителей

Проект LLVM представил выпуск компилятора HPVM 2.0 (Heterogeneous Parallel Virtual Machine), нацеленного на упрощение программирования для гетерогенных систем и предоставляющего средства для генерации кода для CPU, GPU, FPGA и предметно-ориентированных аппаратных ускорителей. Код проекта распространяется под лицензией Apache 2.0.

Программирование для гетерогенных параллельных систем усложнено из-за наличия в одной системе компонентов, использующих разные модели достижения параллелизма (ядра CPU, векторные инструкции, GPU и т.п.), разные наборы инструкций и разные иерархии памяти. В каждой системе используется своя комбинация подобных компонентов. Основная идея проекта HPVM в использовании при компиляции унифицированного представления параллельно выполняемых программ, которое может применяться для различных видов оборудования, поддерживающего распараллеливание вычислений, включая GPU, векторные инструкции, многоядерные процессоры, FPGA и различные специализированные чипы-ускорители.

В отличие от других систем в HPVM попытались совместить три возможности для организации гетерогенных вычислений — независимое от языка программирования и оборудования промежуточное представление (IR), виртуальную архитектуру набора команд (V-ISA) и планирование во время выполнения (runtime scheduling):

  • Промежуточное представление HPVM расширяет промежуточное представление инструкций LLVM применением иерархического графа потоков данных, позволяющим охватывать параллелизм на уровне задач, данных и вычислительных конвейеров. Промежуточное представление HPVM также включает векторные инструкции и разделяемую память. Основной целью применения промежуточного представления является эффективная генерация кода и оптимизации для гетерогенных систем.
  • Виртуальная архитектура набора команд (V-ISA) абстрагирует низкоуровневые особенности оборудования и унифицирует различные формы параллелизма и архитектуры памяти, используя только базовую модель обеспечения параллелизма — граф потоков данных. V-ISA позволяет добиться переносимости между разными типами оборудования для параллельных вычислений и даёт возможность не терять производительность при использовании разных элементов гетерогенных систем. Виртуальная ISA также может применяться для поставки универсального исполняемого кода программ, который может запускаться с привлечением CPU, GPU, FPGA и различных ускорителей.
  • Гибкие политики планирования вычислительного процесса применяются во время выполнения и реализуются как на основе информации о программе (структуры графа), так и через компилирование отдельных узлов программы для выполнения на любом из целевых вычислительных устройств, доступных в системе.

Развиваемые проектом генераторы кода, способны транслировать узлы приложений, определённые при помощи виртуальной ISA, для выполнения с использованием GPU NVIDIA (cuDNN и OpenCL), векторных инструкций Intel AVX, FPGA и многоядерных CPU x86. Отмечается, что производительность результатов работы трансляторов HPVM сопоставима с написанным вручную кодом OpenCL для GPU и векторных вычислительных устройств.

Основные новшества HPVM 2.0:

  • Предложен языковой фронтэнд Hetero-C++, упрощающий распараллеливание кода приложений на языках C/C++ для компиляции в HPVM. Hetero-C++ определяет расширения для параллелизма на уровне данных и иерархических задач, преобразуемые в графы потоков HPVM.
  • Добавлен бэкенд FPGA, обеспечивающий поддержку выполнения кода на FPGA производства Intel. Для организации выполнения используется Intel FPGA SDK для OpenCL.
  • Добавлен фреймворк DSE (Design Space Exploration), включающий оптимизации компилятора и механизмы выявления узких мест для автоматического тюнинга приложений для заданной аппаратной платформы.
    Фреймворк содержит готовую модель производительности для FPGA от Intel и даёт возможность подключать собственные обработчики для оптимизации под любые устройства, поддерживаемые HPVM. Оптимизации могут применяться как на уровне графа потоков данных HPVM, так и на уровне LLVM.
  • Компоненты LLVM обновлены до версии 13.0.
  • Проведена реорганизация кода, нацеленная на упрощение навигации по кодовой базе, библиотекам и утилитам.
  • Улучшена инфраструктура для тестирования, добавлены новые тесты различных компонентов HPVM.

Источник.