24.11.2020

Представлена спецификация OpenCL 3.0


Концерн Khronos, отвечающий за разработку спецификаций семейства OpenGL, Vulkan и OpenCL, объявил о завершении разработки спецификаций OpenCL 3.0, определяющих API и расширения языка С для организации кросс-платформенных параллельных вычислений с использованием многоядерных CPU, GPU, FPGA, DSP и других специализированных чипов, от тех, что применяются в суперкомпьютерах и облачных серверах, до чипов, которые можно встретить в мобильных устройствах и встраиваемой технике. Стандарт OpenCL полностью открыт и не требует лицензионных отчислений. В работе над стандартом приняли участие такие компании, как IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments и Toshiba.

На текущей стадии спецификации присвоен статус предварительной (provisional), что подразумевает возможность доработки на основе отзывов, отправленных через GitHub. После того как замечания будут учтены, спецификация получит статус финальной и будет опубликован итоговый тестовый набор для проверки совместимости имеющихся реализаций.

Наиболее заметные особенности OpenCL 3.0:

  • API OpenCL 3.0 теперь охватывает все версии OpenCL, без предоставления отдельных спецификаций для каждой версии, а также приведён в соответствие к окружению, расширениям и спецификациям универсального промежуточного представления SPIR-V, которое применяется в API Vulkan. OpenCL 3.0 также предусматривает возможность расширения основной функциональности через интеграцию дополнительный спецификаций, которые будут наслаиваться не блокируя монолитный характер OpenCL 2.X.
  • Обязательно объявлена только функциональность, соответствующая OpenCL 1.2, а все возможности, предложенные в спецификациях OpenCL 2.x, отнесены к числу необязательных. Подобный подход упростит создание специализированных реализаций, совместимых с OpenCL 3.0, и расширит спектр устройств, на которых может использоваться OpenCL 3.0. Например, производители могут реализовать поддержку OpenCL 3.0, не реализуя отдельные возможности OpenCL 2.x. Для доступа к необязательным возможностям языка в OpenCL 3.0 добавлена система проверочных-запросов, позволяющая оценить поддержку отдельных элементов API, а также специальные макросы.

    Унификация с ранее выпущенными спецификациями упрощает перевод приложений на OpenCL 3.0. Приложения OpenCL 1.2 смогут работать на устройствах с поддержкой OpenCL 3.0 без внесения изменений. Приложения OpenCL 2.x также не потребуют изменения кода, но если окружение предоставляет необходимую функциональность (для обеспечения переносимости в будущем приложениям OpenCL 2.x рекомендуется добавить проверочные запросы для оценки поддержки используемых возможностей OpenCL 2.X). Разработчики драйверов с реализациями OpenCL смогут легко обновить свои продукты до OpenCL 3.0, добавив лишь обработку запросов на наличие тех или иных вызовов API, и со временем постепенно наращивать функциональность.

  • Добавлена поддержка операций с подгруппами через использование промежуточного представления SPIR-V для вычислительных ядер. Поддержка спецификации SPIR-V 1.3 внесена в основной состав OpenCL 3.0 в качестве опциональной возможности.
  • Добавлена поддержка расширения для выполнения асинхронных DMA-операций (Asynchronous DMA), поддерживаемого в DSP-подобных чипах с прямым доступом к памяти. Asynchronous DMA даёт возможность использовать транзакции DMA для передачи данных между глобальной и локальной памятью в асинхронном режиме, параллельно с производимыми вычислениям или другими операциями передачи данных.
  • Спецификация расширений параллельного программирования для языка Си обновлена до версии 3.0, а развитие языковых расширений OpenCL C++ прекращено в пользу проекта «C++ for OpenCL». C++ for OpenCL представляет собой компилятор, основанный на Clang/LLVM и транслирующий ядра на C++ и OpenCL C в промежуточное представление SPIR-V или низкоуровневый машинный код. Через трансляцию в SPIR-V также организована сборка С++ приложений, использующих библиотеку шаблонов SYCL, упрощающую создание параллельных приложений.
  • Для трансляции OpenCL через API Vulkan предложены компилятор clspv, преобразующий ядра OpenCL в представление Vulkan SPIR-V, и прослойка clvk для обеспечения работы API OpenCL поверх Vulkan.

Источник: https://www.opennet.ru/opennews/art.shtml?num=52824

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