Разработчики проекта LLVM выпущен недавно выпустил компилятор гетерогенных параллельных виртуальных машин (ХПВМ) 1.0, Целью которой является упрощает программирование для гетерогенных систем и предоставляет инструменты генерации кода для ЦП, графических процессоров, ПЛИС и аппаратных ускорителей зависит от домена (поддержка FGPA и ускорителей не была включена в версию 1.0).
Основная идея за HPVM заключается в компиляции единого представления исполняемых программ одновременно которые можно использовать для работы на разнообразном параллельном оборудовании, включая графические процессоры, векторные инструкции, многоядерные процессоры, FPGA и различные специализированные микросхемы ускорителей.
Программирование для гетерогенных параллельных систем осложняется наличием в системе компонентов (ядер ЦП, векторных инструкций, графических процессоров и т. Д.), Которые используют разные модели для достижения параллелизма, разные наборы инструкций и разные иерархии памяти, и каждая система имеет комбинацию такие компоненты меняются.
Исследовательская группа LLVM Compiler Research Group штата Иллинойс рада объявить о выпуске HPVM с открытым исходным кодом (версия 1.0). HPVM - это переориентирующая структура компилятора, ориентированная на ЦП, ГП и ускорители (этот выпуск не включает поддержку ускорителей) [1]. HPVM использует независимый от цели компилятор IR, который расширяет компилятор LLVM 9.0.0 IR с помощью явного иерархического представления потока данных, которое фиксирует задачи, данные и конвейерный параллелизм.
Эта версия является важным дополнением к нашей первой версии (версия 0.5), которая добавляет поддержку тензорных операций линейной алгебры, интерфейсы Pytorch и Keras, аппроксимации для операторов свертки и эффективную и гибкую структуру для аппроксимации.
Следует отметить, что использование HPVM может значительно повысить производительность как eПроизводительность трансляторов HPVM сопоставима с производительностью кода OpenCL. рукописный для графических процессоров и векторных вычислительных устройств. В отличие от других систем, HPVM попытался объединить три возможности для организации гетерогенных вычислений: независимое от языка и оборудования промежуточное представление, виртуальную архитектуру набора команд (V-ISA) и программирование во время выполнения.
Независимое промежуточное представление (IR) целевой системы а язык программирования, используемый в HPVM, основан на промежуточном представлении инструкций LLVM 9.0. и расширяет его с помощью иерархического графа потока данных, чтобы охватить параллелизм на уровне задач, данных и вычислительных конвейеров.
Промежуточное звено HPVM также включает векторные инструкции и разделяемую память. Основная цель использования промежуточного представления - эффективная генерация кода и оптимизация для гетерогенных систем.
Архитектура виртуального набора команд (V-ISA) абстрагирует низкоуровневые аппаратные функции и объединяет различные формы параллелизма и архитектур памяти, используя только базовую модель параллелизма, граф потока данных. V-ISA позволяет достичь переносимости между различными типами параллельного вычислительного оборудования и позволяет не терять производительность при использовании разных элементов гетерогенных систем. Virtual ISA также может использоваться для предоставления универсального исполняемого программного кода, который можно запускать с использованием CPU, GPU, FPGA и различных ускорителей.
На текущем этапе развития, HPVM предлагает генераторы кода, способные переводить узлы приложений, определенные ISA. Virtual для запуска с использованием графических процессоров NVIDIA (cuDNN и OpenCL), векторных инструкций Intel AVX и многоядерных процессоров x86. }
Во время выполнения HPVM применяет гибкие политики планирования для вычислительного процесса, реализуемые как на основе информации о программе (графическая структура), так и посредством компиляции отдельных программных узлов для выполнения на любом из вычислительных устройств назначения, доступных в системе.
По сравнению с первой предварительной версией, HPVM 1.0 включает поддержку тензорных операций линейной алгебры, интерфейсы для Pytorch и Keras, а также фреймворк настройки аппроксимации, который автоматически выбирает оптимальные приближения для определенных тензорных операций и выбирает настройку для оптимальной производительности.
Наконец, если вам интересно узнать больше об этом компиляторе, Вы можете проверить подробности по следующей ссылке.