Разработчики проекта LLVM опубликовали выпуск компилятора HPVM 1.0 (Heterogeneous Parallel Virtual Machine), нацеленного на упрощение программирования для гетерогенных систем и предоставляющего средства для генерации кода для CPU, GPU, FPGA и предметно-ориентированных аппаратных ускорителей (поддержка FGPA и ускорителей не вошла в выпуск 1.0). Код проекта распространяется под лицензий Apache 2.0.
Основная идея HPVM в том, чтобы использовать при компиляции унифицированное представление параллельно выполняемых программ, которое может применяться для выполнения с использованием различных видов оборудования, поддерживающего распараллеливание вычислений, включая GPU, векторные инструкции, многоядерные процессоры, FPGA и различные специализированные чипы-ускорители. В отличие от других систем в HPVM попытались совместить три возможности для организации гетерогенных вычислений: независимое от языка программирования и оборудования промежуточное представление, виртуальную архитектуру набора команд (ISA) и планирование во время выполнения (runtime scheduling).
Применяемое в HPVM независимое от целевой системы промежуточное представление (IR) основано на промежуточном представлении инструкций LLVM 9.0 и расширяет его иерархическим графом потоков данных, позволяющим охватывать параллелизм на уровне задач, данных и вычислительных конвейеров. Промежуточное представление HPVM также включает векторные инструкции и разделяемую память. Основной целью применения промежуточного представления является эффективная генерация кода и оптимизации для гетерогенных систем.
Виртуальная архитектура набора команд (ISA) позволяет добиться переносимости между разными типами оборудования для параллельных вычислений и даёт возможность не терять производительность при использовании разных элементов гетерогенных систем. Виртуальная ISA также может применяться для поставки универсального исполняемого кода программ, который может запускаться с привлечением CPU, GPU, FPGA и различных ускорителей.
На текущем этапе развития в HPVM предложены генераторы кода, способные транслировать узлы приложений, определённые при помощи виртуальной ISA, для выполнения с использованием GPU NVIDIA (cuDNN и OpenCL), векторных инструкций Intel AVX и многоядерных CPU x86. Во время выполнения HPVM применяет гибкие политики планирования вычислительного процесса, реализуемые как на основе информации о программе (структуры графа), так и через компилирование отдельных узлов программы для выполнения на любом из целевых вычислительных устройств, доступных в системе.
Отмечается, что применение HPVM позволяет добиться существенного прироста производительности. Производительность результатов работы трансляторов HPVM сопоставима с написанным вручную кодом OpenCL для GPU и векторных вычислительных устройств.
По сравнению с первым предварительным выпуском версия HPVM 1.0 включает поддержку тензорных операций линейной алгебры, фронтэнды для Pytorch и Keras, аппроксимации свёрточных операторов и фреймворк для настройки аппроксимации, автоматически выбирающий оптимальные апроксимации для определённых тензорных операций и выбирающий конфигурацию, обеспечивающую оптимальную производительность.