AMD развивает основанный на LLVM универсальный компилятор C++ и CUDA для CPU/GPU

Компания AMD представила инициативу Boltzmann, в рамках которой ведётся разработка средств для организации гибридных вычислений, в которых используется не только CPU, но и GPU. В частности, в рамках инициативы развивается универсальный компилятор HPC (Heterogeneous Compute Compiler), способный генерировать код для CPU и GPU, на основании исходных текстов на языке C++, а также транслятор преобразующий исходные тексту с расширениями CUDA. Одновременно компания AMD представила новую линейку серверных GPU FirePro S, которые в свете обеспечения совместимости с технологией CUDA могут составить конкуренцию компании NVIDIA в области построения высокопроизводительных вычислительных систем.

Компилятор HPC продолжает развитие ранее представленного компилятора HSA, основанного на наработках проекта LLVM/Clang. В HPC компания AMD попыталась устранить основной барьер, мешающий продвижению развиваемых в AMD технологий гибридных вычислений, — излишняя усложнённость предложенного решения. HPC даёт разработчикам более высокоуровневые средства разработки, позволяя использовать язык C++, вместо низкоуровневой разработки на Си с применением OpenCL.

В опубликованной на днях спецификации OpenCL 2.1 привязка к языку была преодолена благодаря появлению ядра OpenCL C++ и средств для использования расширений для языка C++, но OpenCL всё равно остаётся слишком низкоуровневым API, а также весьма неохотно внедряется в продуктах NVIDIA (NVIDIA ограничивается поддержкой OpenCL 1.2), что приводит к его непопулярности в среде разработчиков высокопроизводительных приложений. Компания AMD, которая продолжает верить в будущее OpenCL как единого стандарта, в компиляторе HPC попыталась найти разумный выход: разработчик получил возможность применения одного компилятора и одной кодовой базы на C++ с интегрированными расширениями HIP (Heterogeneous-compute Interface) для организации работы на CPU и GPU, без выделения в отдельные файлы компонентов, выполняемых на стороне GPU.

Параллелизм в HIP реализуется через введение специальных параллельных операций, таких как parallel_for_each, для определения выполняемых параллельно сегментов кода и методов взаимодействия с остальным кодом программы, или через использование высокоуровневого Parallel STL (Standard Template Library), развиваемого в рамках спецификаций C++ 17 и определяющего ряд стандартных функций, выполняемых на стороне GPU. Для решения проблем с совместимостью AMD разработал инструментарий для трансляции кода с расширениями CUDA, позволяющий преобразовывать CUDA-проекты в HIP для из последующей компиляции для GPU AMD и, наоборот, транслировать HIP в CUDA для GPU NVIDIA. Также представлен инструментарий HIPify для автоматического портирования исходных текстов CUDA-проектов на HIP. Таким образом удалось добиться полной совместимости с CUDA и предоставить разработчикам возможность использования уже имеющихся CUDA-программ на GPU AMD.

Компания AMD также развивает специализированный 64-разрядных драйвер для Linux, ориентированный на оснащение узлов вычислительных кластеров и запуск приложений в окружении HSA+, примечательном использованием единого для CPU и GPU унифицированного адресного пространства (GPU и CPU могут напрямую обращаться к общим блокам памяти), что существенно упрощает программирование и приближает доступные для GPU AMD средства к возможностям технологии CUDA, используемой компанией NVIDIA. HSA+ дополняет стандартное окружение HSA (Heterogeneous System Architecture) расширениями, обеспечивающими поддержку дискретных GPU (HSA сосредоточен на APU).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.