HPVM 2.0, אַ קאַמפּיילער פֿאַר קפּו, גפּו, 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.

מקור: opennet.ru

לייגן אַ באַמערקונג