О стандарте OpenCL
Архитектура современных процессоров для увеличения производительности все чаще использует принципы параллелизма. Сталкиваясь с техническими проблемами высоких тактовых частот при фиксированном диапазоне электрического напряжения, производительность центральных процессоров (CPU, Central Processing Units) сейчас улучшается добавлением процессорных ядер. Графические процессоры (GPU, Graphics Processing Units) так же развились из устройств фиксированной функциональности построения графических сцен в программируемые параллельные процессоры. Ввиду того, что современные компьютеры часто включают высоко параллельные CPU, GPU и другие типы процессоров, важно дать возможность разработчикам программного обеспечения (ПО) использовать эти гетерогенные процессорные системы в полной мере.
Создание приложений для гетерогенных параллельных вычислительных платформ является сложным процессом, поскольку классические подходы к программированию для многоядерных CPU и GPU значительно различаются. Модели программирования CPU хотя в большинстве случаев и основаны на стандартах, но обычно они предполагают наличие общего адресного пространства и не учитывают возможность векторных операций.
Модели программирования GPU общего назначения, включая сложные иерархии памяти и векторные операции, традиционно остаются платформо-зависимыми. Эти ограничения затрудняют доступ разработчиков к обширной базе исходных кодов для CPU, GPU и других типов процессоров. Как никогда, сейчас требуется предоставить возможность разработчикам программного обеспечения эффективно использовать все преимущества гетерогенных вычислительных платформ - от высокопроизводительных вычислительных серверов, через персональные компьютеры к мобильным устройствам, которые включают разнообразные параллельные CPU, GPU и другие процессоры, такие как сигнальные (DSP) и ускорители Cell/B.E.
OpenCL (Open Computing Language) - открытый, не требующий лицензионных отчислений стандарт для универсального параллельного программирования различных типов процессоров. Стандарт предоставляет программистам переносимый и эффективный доступ ко всей мощи гетерогенных вычислительных платформ. OpenCL поддерживает широкий круг ПО: от встроенных и клиентских приложений до высокопроизводительных решений через достаточно низкоуровневневый, пригодный для использования в высокопроизводительных решениях, переносимый программный интерфейс.
В результате создания эффективного, учитывающего аппаратные особенности платформы программного интерфейса, OpenCL способен сформировать базовый уровень параллельного вычислительного кода независимых от аппаратной платформы программных инструментов, промежуточного ПО и других видов приложений.
OpenCL также хорошо подходит на важную роль в интенсивно развивающихся интерактивных графических приложений, которые включают как универсальные алгоритмы параллельных вычислений, так и алгоритмы построения сложных графических сцен.
Стандарт OpenCL описывает API для управления процессом параллельных вычислений среди гетерогенных процессоров; так же кросс-платформенный язык программирования с детально описанным вычислительным окружением.
Стандарт OpenCL:
- поддерживает различные модели параллелизма;
- использует подмножество стандарта С99 с расширениями поддержки параллелизма;
- поддерживает стандарт арифметики чисел с плавающей точкой IEEE 754;
- определяет профили конфигураций для переносных и встраиваемых устройств.