Рубрика:
Разработка /
Графика
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АЛЕКСЕЙ ВЕРИЖНИКОВ, системный архитектор в филиале ЗАО «Корпорация ГРИНН», г. Орел, туристический многофункциональный комплекс «ГРИНН», mail_aw@mail.ru
Компьютерная графика на основе OpenGL Часть 5. Использование OpenCL
Расскажем о возможности использования ресурсов видеосистемы компьютера не только для обработки компьютерной графики, но и для других задач
Пример таких задач – системы моделирования взаимодействий: моделирование погоды, астрономические вычисления, взаимодействие атомов при химических реакциях, биологические процессы и т.д. Рядовому пользователю ПК эта технология пригодится для более быстрой обработки видео- и аудиоинформации, ну и, конечно, в играх.
OpenGL как система, использующая конечный автомат для обработки задач, по своей сути, является линейной. Технология OpenCL создана для работы с параллельными вычислениями. Рассмотрим некоторые аспекты многозадачности и возникающие при этом проблемы, а также их преимущество перед последовательно выполняемыми процессами.
Что такое OpenCL?
Название OpenCL похоже на OpenGL, отличается лишь одной буквой. OpenCL можно расшифровать как Open Computing Language, что переводится на русский как «Открытый язык вычислений». Похожая технология разрабатывалась NVIDIA для своих продуктов, и назвали ее CUDA. Чтобы заново не переделывать уже имеющуюся базу, была сделана надстройка для CUDA для возможности обработки команд OpenCL. То есть программы, написанные на OpenCL, в процессе компиляции переводятся в код для CUDA и затем выполняются. Возникает резонный вопрос: зачем это нужно – CUDA, OpenCL?
Понятно, что ресурсы ЦПУ компьютера конечны, поэтому для разгрузки и ускорения работы используются мощности дополнительных устройств, например, видеокарты.
Как же ускоряется работа программы? Для этого посмотрим на структурную схему видеокарты (см. рис. 1). Помимо GPU, там имеются конвейерные процессорные элементы, которые отвечают за обработку пиксельных и вершинных шейдеров. Считается, что чем больше этих процессорных элементов, тем мощнее видеокарта. Конечно же, первичные и самые важные параметры – это частоты GPU и работы памяти, но уже сейчас принимаются во внимание частота работы шейдерного конвейера и количество процессорных элементов.
Почему я называю их именно «процессорные элементы», а не «процессоры»? Дело в том, что набор команд каждого процессорного элемента не очень большой и гораздо меньше набора команд ЦПУ. В последнее время получили распространение унифицированные шейдерные конвейеры, у которых набор команд одинаков и позволяет проводить операции как с пиксельными, так и с вершинными программами или шейдерами. Ускорение достигается за счет параллельного выполнения определенной простой команды. То есть за такт времени выполняется сразу несколько команд, по количеству теоретически равные числу процессорных элементов. OpenCL, по сути, является языком для этих команд.
На данный момент все новые ресурсоемкие системы (например, программы для моделирования химических процессов, системы расчета погодных явлений, перекодировщики видео и т.д.) основаны на технологии CUDA от NVIDIA. Но OpenCL развивается быстрыми темпами. Уже готова спецификация OpenCL 2.0, но нет пока в продаже устройств, которые ее поддерживают.
Когда и зачем это придумали?
Сейчас OpenCL и CUDA – новые развивающиеся технологии, но, как часто бывает, «новое – это хорошо забытое старое». Многопроцессорные параллельные вычисления были придуманы на заре процессорной эпохи.
В 1975 году один из руководителей компании CDC Seymour Cray (Сеймур Крей), организовавший собственную фирму, известную под названием Cray-1, один из первых продемонстрировал конвейерный компьютер с быстродействием, превосходящим 150 млн операций в секунду или 150 МГц.
У него было 12 конвейеров с множеством регистров и процессорных элементов по обработке команд. Так как время на такт обработки команды составляло 12,5 нс (80 МГц) и более (ну не могли еще тогда делать быстрее), то, чтобы быстро выполнять необходимые задачи, их надо было распараллеливать. Теоретически суммарная частота работы должна быть 12 х 80 = 960 МГц.
К заслуге инженеров и программистов, они смогли получить среднюю частоту работы около 150 МГц. Читатель может сказать, что сейчас считается уже мощность в гигагерцах и калькулятор работает быстрее. Это, конечно же, так. И тем не менее.
Теоретически увеличивать частоту работы можно до уровней, сравнимых с уровнями частот колебаний световой волны. Сегодня, по моему мнению, транзисторная полупроводниковая технология дошла до отметки 7 ГГц (частота обработки команд) и далее сможет расти уже с чрезвычайно большими усилиями.
В скором будущем ожидается новая технология, которая должна значительно увеличивать частоты выполнения команд. А уже сейчас сложность задач только увеличивается как по ресурсоемкости, так и по мощности необходимого оборудования для их выполнения. Соответственно если нельзя сделать быстрее один процессор, то приходится распараллеливать задачи на несколько процессоров с определенной конечной частотой.
Ранее, когда я рассказывал об одном из первых суперкомпьютеров, прослеживается аналогия с нашим вопросом. По сути, та же самая проблема нехватки мощности отдельного процессора, только там все в мегагерцах, а сейчас в гигагерцах. Вот для решения этой проблемы и начали активно работать над OpenCL.
Рисунок 1. Структурная схема видеокарты
Описание технологии OpenCL
Драйвер технологии OpenCL создает абстракцию работы с аппаратными возможностями устройства, в нашем случае – видеокартой. Саму программу можно разделить на две части.
- Первая – код для инициализации устройства, на котором будут производиться вычисления, также создание и выделение областей обрабатываемой памяти, отправка в память GPU и получения итоговых результатов.
- Вторая – программный код, который будет выполняться на GPU.
Статью целиком читайте в журнале «Системный администратор», №12 за 2013 г. на страницах 53-57.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|