OpenCL – общий язык всех *PU

Одна из главных проблем взаимодействия технологий и пользователей — проблема совместимости. Зачастую некоторые элементы системы отказываются работают совместно друг с другом, из-за чего возникают трудности в интеграции, требующие сложных решений. Вопреки лозунгу технологии «plug-and-play» («подключил-и-работай»), принтеры могут не подружиться с ПК, серверы — не всегда корректно взаимодействуют с серверами, работающими под управлением другой операционной системы, приложения разных разработчиков плохо уживаются в одной системе, мобильные устройства не синхронизируются с «большим братьями»... Список можно продолжать почти до бесконечности. Главная сложность даже не во взаимодействии аппаратного и программного обеспечения как таковом, а в том, что постоянно происходят значительные изменения в технологиях. Особенно — в архитектуре центральных и графических процессоров. А разработчикам и пользователям трудно принять эти перемены.

Так, например, в последнее время значительно возрос интерес к использованию графических процессоров для проведения вычислений общего назначения. Конвейеры графической обработки эволюционировали из модулей, выполняющих фиксированный набор функций, до устройств, использующих полностью программируемые вычислительные блоки. Видя это, находчивые разработчики пытались использовать грандиозный потенциал параллельных вычислений на графических ядрах, переписывая свои приложения так, чтобы вписываться в модели программирования, поддерживаемые традиционными программными интерфейсами графических приложений, такими как Microsoft DirectX и OpenGL.

Хотя такой подход снискал популярность среди исследователей, но оказался труден для разработчиков, не привыкших иметь дело с графическими API. Это привело к разработке новых программных интерфейсов, предоставляющих разработчикам больше удобств за счёт скрытия деталей модели графического программирования. Однако массовый переход на новые интерфейсы всё ещё был затруднён. Дело в том, что создаваемые API оказывались собственническими, работая на продуктах только поставщика интерфейса. Кроме того, графический процессор рассматривался как независимое устройство, позволяющее ускорить вычисления, а не как составная часть сбалансированной однородной платформы. В результате, для GPU и CPU писали совершенно разный код — каждому отдавалась определённая часть функций. В свою очередь, это приводило к медленному принятию нового подхода из-за растерянности разработчиков и маркетологов, пытавшихся найти верный путь полного использования дополнительной вычислительной мощи и понять, какой программный интерфейс лучше использовать для модуля.

opencl_icon

История показывает, что рыночная путаница стандартов способна сильно повлиять на продажи продуктов – достаточно вспомнить противостояние стандартов VHS и Betamax или Blu-ray и HD DVD. Пользователи, будь то корпоративные или домашние, могут очень неохотно инвестировать в технологию, если её перспективы туманны. Производители вскоре поняли, что и принятие технологии вычисления на графических процессорах тормозило именно отсутствие единого стандарта. И это осознание подтолкнуло их к утверждению стандарта и началу активного сотрудничества. В прошлом году был образован некоммерческий консорциум Khronos Group, объединивший таких крупных поставщиков CPU и GPU, как Apple, AMD, Intel, nVidia, Sun Microsystems и Sony. Эти компании объединили свои усилия для создания универсального языка программирования Open Computing Language (OpenCL). Разработчики могут использовать этот новый стандартизированный язык для программирования на базе однородных платформ, используя все доступные в системе процессоры, независимо от их типа и их поставщиков.

KhronosGroup_Logo

Созданный Khronos Group стандарт OpenCL рассчитан на выполнение параллельных вычислений на графических и центральных процессорах. Он позволяет передать часть расчётов от CPU к GPU, сбалансировав нагрузку и — как следствие — увеличив эффективность платформы в целом.

9 декабря 2008 года Khronos Group утвердила стандарт OpenCL 1.0, разработанный компанией Apple. Эту спецификацию поддержали AMD, nVidia, IBM, Intel и другие компании. AMD встроила совместимый с OpenCL компилятор в свой бесплатный пакет ATI Stream SDK для разработчиков; NVIDIA также добавила поддержку этого стандарта параллельных вычислений в свой пакет GPU Computing Toolkit.
20 апреля 2009 года nVidia представила бета-версию драйвера и SDK с поддержкой OpenCL.
5 апреля 2009 года AMD открыла для свободной загрузки beta-версию комплекта разработчика ATI Stream SDK v2.0 в который входит язык мультипроцессорного программирования OpenCL.

OpenCL позволяет разработчикам переносить на GPU выполнение задач, параллельных по своей природе, возлагая выполнение остальных задач на CPU. Каждый процессор в системе работает над теми задачами, для которых он лучше всего подходит, что способствует получению больших результатов за меньшее время на том же аппаратном обеспечении.
C помощью SDK от AMD разработчики уже сейчас могут начать переносить свои программы на OpenCL и пользоваться преимуществами вычислений на графических процессорах, когда выйдет полная платформа разработки OpenCL.

На практике польза от применения OpenCL очевидна. К примеру, он даёт возможность улучшить время отклика серверов и высокопроизводительных систем. Скажем, многие компании, имеющие дело с огромными объёмами данных, часто вынужден тратить огромное время на работу с массивами информации, поскольку мощности CPU их серверов не безграничны, а поток данных иногда нарастает лавинообразно. За счёт же использования вычислительной мощи графических процессоров можно получать желаемые результаты значительно быстрее. Используя все доступные *PU, OpenCL позволяет перераспределить нагрузку, выжимая из уже имеющегося оборудования больше вычислительной мощи.
Впрочем, преимуществами OpenCL могут пользоваться не только крупные компании, а любые организации, проводящие массовую обработку данных. Например, научно-исследовательские лаборатории, университеты, отделы автоматизированного проектирования, ТВ-студии и кинокомпании.

Наглядно убедиться в эффективности использования технологии OpenCL при отрисовке видеоэффектов на 24-х ядерной системе можно, посмотрев видеоролик.

Язык OpenCL выделяется тем, что позволяет приложениям динамически определять, какие *PU и ядра доступны, в результате чего разработчики могут динамически масштабировать производительность своих приложений в зависимости от доступного аппаратного обеспечения клиентов. Например, если компания приобретает приложение с поддержкой ускорения OpenCL, которое может использовать доступные в данный момент центральные и графические процессоры, то она может подогнать инвестиции в оборудование под текущие вычислительные потребности. Если затем её потребности возрастут, то она может просто купить дополнительные или более мощные центральные или графические процессоры.
Возможно, самое важное преимущество стандарта OpenCL состоит в том, что он является открытым. Этот стандарт разрабатывается группой компаний, и все поставщики, вовлечённые в эту разработку, заинтересованы в том, чтобы он работал на их оборудовании. Единый проект позволяет всем его участникам договориться друг с другом и создать язык, подходящий для любого оборудования, от чего также выиграют и конечные пользователи, которые смогут быстрее и эффективнее проводить свои вычисления.
Стандарт OpenCL нацелен на то, чтобы решать реальные проблемы конечных пользователей и программистов. Открытый межплатформенный язык, такой как OpenCL, поможет нам приблизиться к эре быстрых и эффективных вычислений.

Полезные ссылки
Ресурсы для разработчиков. http://www.khronos.org/developers/resources/opencl/
Об OpenCL в MacOS X. http://www.apple.com/ru/macosx/technology/#opencl

Редакция выражает благодарность компании AMD за предоставленные информационные материалы.

Рекомендуем почитать: