Опубликованы финальные спецификации OpenCL 3.0
Концерн Khronos, отвечающий за разработку спецификаций семейства OpenGL, Vulkan и OpenCL, объявил о публикации финальных спецификаций OpenCL 3.0, определяющих API и расширения языка С для организации кросс-платформенных параллельных вычислений с использованием многоядерных CPU, GPU, FPGA, DSP и других специализированных чипов, от тех, что применяются в суперкомпьютерах и облачных серверах, до чипов, которые можно встретить в мобильных устройствах и встраиваемой технике. Стандарт OpenCL полностью открыт и не требует лицензионных отчислений.
Одновременно опубликован открытый OpenCL SDK с инструментарием, примерами, документацией, заголовочными файлами, обвязками для C++ и Си-библиотеками для разработки приложений, совместимых с OpenCL 3.0. Также представлена начальная реализация OpenCL 3.0 на базе компилятора Clang, которая находится на стадии рецензирования патчей для включения в основной состав LLVM. В работе над стандартом приняли участие такие компании, как IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments и Toshiba.
Наиболее заметные особенности OpenCL 3.0:
- API OpenCL 3.0 теперь охватывает все версии OpenCL (1.2, 2.x), без предоставления отдельных спецификаций для каждой версии. OpenCL 3.0 предусматривает возможность расширения основной функциональности через интеграцию дополнительных спецификаций, которые будут наслаиваться в форме опций, не блокируя монолитный характер OpenCL 1.2/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 3.0 предоставляет необходимую функциональность (для обеспечения переносимости в будущем приложениям OpenCL 2.x рекомендуется добавить проверочные запросы для оценки поддержки используемых возможностей OpenCL 2.x). Разработчики драйверов с реализациями OpenCL смогут легко обновить свои продукты до OpenCL 3.0, добавив лишь обработку запросов на наличие тех или иных вызовов API, и со временем постепенно наращивать функциональность.
- Спецификация OpenCL 3.0 приведена в соответствие с окружением, расширениями и спецификациями универсального промежуточного представления SPIR-V, которое также применяется в API Vulkan. Поддержка спецификации SPIR-V 1.3 внесена в основной состав OpenCL 3.0 в качестве опциональной возможности. Через использование промежуточного представления SPIR-V для вычислительных ядер добавлена поддержка операций с подгруппами.
- Добавлена поддержка расширения для выполнения асинхронных 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.
Источник: http://www.opennet.ru/opennews/art.shtml? num=53810
© OpenNet