Операционная система Mac OS X version 10.6 корпорации Apple Computers, получившая название Snow Leopard (“Снежный барс”, предыдущая версия называлась просто Leopard) и выпущенная на рынок 28 августа, изобилует новыми технологиями, но одна из главных её особенностей, кроме поддержки 64-разрядных процессоров, которая, как обещают разработчики, скоро появится и в Microsoft Windows, Linux и на других основных платформах, — язык параллельного программирования OpenCL (Open Computing Language). Ожидаемыми областями его применения будет обработка речи и видео, 3D-моделирование, криптография, работа с медицинскими изображениями, компьютерные игры и многое другое.
Этот язык высокого уровня (ЯВУ), базирующийся на синтаксисе языка Си, первоначально был предложен корпорацией Apple для поддержки параллельного программирования на графических процессорах (GPU). Графический процессор представляет собой специализированный микропроцессор графической карты или графического ускорителя, применяемых в ПК либо в игровых консолях. Поскольку типичное изображение содержит около миллиона точек (пикселов), то для их обработки в таких процессорах раньше, чем многоядерность в обычных ЦП, начали применять блоки параллельной обработки, и сейчас GPU может одновременно обрабатывать сотни пикселов. Суммарная производительность GPU составляет уже 1 Тфлопс, т. е. достигла производительности суперкомпьютеров.
Естественно, что возникла мысль использовать эти процессоры не только для работы с графикой, но и для решения более широкого класса задач. Данную идею уже несколько лет активно продвигают поставщики GPU, в первую очередь компания Nvidia.
Хотя для GPU существуют и другие языки программирования, например широко известный CUDA (Compute Unified Device Architecture) компании Nvidia, также представляющий собой расширение языка Си, или Brook — потоковый язык программирования, разработанный в Стэнфордском университете. Вместо того, чтобы выбрать один из этих языков, Apple решила создать новый открытый стандарт, не зависящий от стандартов поставщиков графических средств.
В действительности OpenCL уже не зависит даже и от самой Apple. С самого начала Apple предложила сопровождать его стандартизацию организации Khronos Group, управляющей процессом стандартизации другой распространённой в мире компьютерной графики спецификации — OpenGL. Члены рабочей группы по OpenCL за полгода превратили предварительный вариант подготовленной Apple спецификации языка в спецификацию 1.0 поставляемой версии OpenCL — и в процессе было создано то, что может быть лучшим вариантом решения общей проблемы параллельного программирования, поскольку OpenCL предназначен не только для GPU, но с самого начала разрабатывался также и для поддержки многоядерных процессоров. OpenCL достаточно гибок, чтобы поддерживать и процессорно-оптимизированный, и GPU-оптимизированный код. В зависимости от конфигурации компьютера выбирается тот или иной. Отмечу, что это же могут делать и конкурирующие языки.
OpenCL может использовать преимущества параллелизма на уровне задач (одновременное исполнение многих задач, причём как различных, так и копий одной задачи) и на уровне данных, когда одна команда программы применяется сразу ко многим элементам данных. Такое свойство более известно под аббревиатурой SIMD (один поток управления — много потоков данных). А вот это уже могут делать не все конкурирующие ЯВУ.
Интересна и реализация OpenCL: программа на нём компилируется на лету и автоматически оптимизируется для исполнения на конкретном типе оборудования, установленного в компьютере.
Но главное преимущество OpenCL не является по своей природе техническим — это то, что другие ЯВУ не могут широко поддерживать. Такая поддержка начинается со Snow Leopard, но идёт значительно дальше. Компании AMD и Nvidia для своих GPU будут создавать для OpenCL драйверы под Windows и Linux. (В архитектуре OpenCL драйвер находится между библиотекой поддержки времени исполнения OpenCL-программы и GPU.) OpenCL уже поддерживает графические процессоры GeForce 8800 GS, 8800 GT, 8600M GT, 9400M, 9600M GT, GT 120, GT 130, GTX 285, Quadro FX 4800, FX 5600 и другие модели компании Nvidia. Будут поддерживать OpenCL на своих процессорах AMD и Intel (включая интеловский ЦП Larrabee). А AMD уже поставляет свою первую реализацию OpenCL для процессоров Athlon и Opteron. В разработке — версии языка для игровых видеоприставок и процессоров цифровой обработки сигналов (DSP, ЦОС).
Таким образом, у разработчиков появилась серьёзная возможность выбора.