Основные аспекты применения GPGPU систем

Основные аспекты применения GPGPU систем

Д.И. Мирзоян, Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Московский государственный технический университет радиотехники, электроники и автоматики", аспирант, d.i.mirzoyan@gmail.com

GPGPU обозначает, дословно, general purpose graphics processor unit -использование графического процессора для общих целей [1]. Использование графических процессоров для общих (неграфических) вычислений получило мощный толчок с появлением частичной программируемости конвейеров графического процессора в 2000 году [2,3]. В то же время возник и термин GPGPU [4]. Такая возможность возникла благодаря стремительному развитию графических процессоров, прошедших за полтора десятилетия путь от примитивного адаптера дисплея до специализированного высокопараллельного процессора вещественной математики. Это произошло одновременно с широким распространением домашних персональных ЭВМ, и во многом благодаря им.

Графические процессоры появились и развивались, в основном, благодаря развлекательной функции персональных ЭВМ, а конкретно сфере игровых программ с использованием трехмерной виртуальной реальности. Это наложило свой отпечаток на архитектуру и возможности графических процессоров.

Первой, и самой главной, архитектурной особенностью графических процессоров является крайне высокая степень параллелизма. Графический процессор содержит множество так называемых мультипроцессоров, каждый из которых содержит множество одинаковых арифметико-логических устройств, называемых процессорами. Несмотря на, казалось бы, большое количество независимых исполнительных устройств, это не так и они не независимы. В графических процессорах параллелизм имеет место в большей степени по данным - каждый процессор мультипроцессора выполняет в один момент времени одну и ту же инструкцию - но с разными данными. Здесь важно отметить, что некоторые операции, например ветвления, логические, операции двойной точности выполняются на блоках, количество которых в составе мультипроцессора меньше количества собственно процессоров [5]. Эта особенность является следствием происхождения графических

процессоров и в некоторых случаях может потребовать специальной оптимизации для достижения удовлетворительной производительности алгоритма [6]. А на уровне мультипроцессоров уже возможно выполнение различных задач - как в пространстве (различные мультипроцессоры выполняют различные задачи), так и во времени (вытесняющая многозадачность).

Второй отличительной особенностью графических процессоров является своеобразно строение подсистемы памяти (рис. 1).

Мультипроцессор 1

Блок управления

1 Г

Блок обработки ветвлений

1 г

Процессор 1

Процессор 2

Процессор 3

Процессор N

3"

ю О

2Х"

Память устройства

Рис. 1. Строение мультипроцессоров и подсистемы памяти графического процессора

Здесь «графическое» происхождение процессора видно из наличия специальной памяти - кэша текстур, для которого определены на уровне базовых операции выборки и фильтрации текстур. В большинстве счетных задач эти операции не используются, и кэш текстур выполняет кэширование исходных данных задачи. Кэш констант содержит неизменяемые по ходу решения дополнительные данные в контексте задачи. В отличие от кэша данных, его содержимое одинаково для всех

мультипроцессоров, принимающих участие в решении задачи, все время решения этой задачи. Общая память доступна только в рамках одного мультипроцессора. Основное ее назначение - хранение промежуточных результатов вычислений. Память устройства доступна всем мультипроцессорам - это та память, которая по отношению к графическому процессору является внешней (находится не на том же кристалле).

Существенные различия этих типов памяти заключаются в скорости и типе доступа к ним. Кэш констант и кэш текстур доступны на полной скорости, но только на чтение. Общая память тоже доступна на полной скорости (задержки при доступе - несколько машинных тактов), но уже и на чтение, и на запись. Память устройства доступна и для чтения, и для записи - но она крайне медлительна - операция чтения занимает в сотни раз больше времени чем для общей памяти. Причем, операция записи результата в память устройства намного «дешевле» операции чтения. Это достигается тем, что процессор не ждет окончания записи данных, а направляет их в специальный блок [7,8].

Третьей особенностью графических процессоров является сам механизм их работы. Программа, выполняющаяся на графическом процессоре (в принятой терминологии ядро) разбивается по данным на множество потоков. Несколько таких потоков образуют блок потоков, выполняющийся целиком на одном мультипроцессоре (или их фиксированной группе). В свою очередь, блок разбивается на несколько основ (также называется волновой фронт) - групп потоков, одновременно выполняемых на мультипроцессоре(ах). Количество потоков в основе - аппаратно заданная константа, обычно равная учетверенному количеству процессоров в мультипроцессоре. Таким образом, требуется минимум четыре прохода для выполнения одной основы - так достигается ускорение доступа к основной памяти - пока несколько потоков ждут данные, выполняются те, для которых данные уже получены. Этим маскируется низкая скорость работы с памятью устройства. Отдельно следует рассмотреть процесс обработки ветвлений. Из-за того, что все процессоры вынуждены выполнять одну и ту же инструкцию, ветвления обрабатываются на уровне основы. Каждый раз при ветвлении основа разделяется, если хотя бы один поток пошел по другой ветви алгоритма. Отделенные потоки выделяются и рассчитываются отдельно, кратно увеличивая тем самым время, необходимое для вычисления. «Отделившиеся» потоки не вычисляются в основном русле, уменьшая эффективность работы процессора.

Однако, несмотря на ограничения, графические процессоры обладают феноменальной производительностью, сравнимой с суперкомпьютерной. Во многом это достигается и благодаря тем же

ограничениям - чем больше ограничена функциональность (в графических процессорах основной упор сделан на вещественную матрично-векторную арифметику), тем проще аппаратная реализация, чем проще аппаратная реализация, тем меньше места она занимает на кристалле, и, тем самым, тем больше одинаковых блоков можно разместить в рамках одной микросхемы. Таким образом, достигаем очень высокой параллельности — для примера, графический процессор Cayman XT (AMD Radeon HD 6970) имеет в своем составе 1536 потоковых процессоров [9]. Суперкомпьютер, содержащий 1536 традиционных процессорных ядер, будет занимать несколько комнат и требовать море электроэнергии для своей работы.

Также, можно применить гетерогенный подход к построению вычислительной системы [10] и серьезно увеличить производительность суперкомпьютера, оставаясь в разумных пределах по занимаемой площади и энергопотреблению, и не прибегая к использованию облачных систем. Именно этот путь выбрали в Национальном суперкомпьютерном центре в городе Тяньцзинь в Китае, построив на основе 14 336 центральных процессоров и 7 168 графических процессоров самый мощный на сегодня суперкомпьютер Тяньхэ-1А с пиковой производительностью 4,7 ПетаФлопс [11,12].

Область применения GPGPU систем (и гетерогенных систем на основе GPGPU) довольно широка. Она включает в себя:

• построение и визуализацию трехмерных сцен — основная задача графических процессоров, и та, для которой они предназначались;

• цифровую обработку сигналов;

• цифровую обработку изображений;

• цифровую обработку видеоинформации;

• фотографически точное построение трехмерных сцен методом трассировки лучей;

• физические, климатические, биохимические, астрономические, квантово-механические, и многие другие научные расчеты;

• нейросети;

• базы данных [10];

• криптографию [11];

• системы автоматизированного проектирования;

• математическое моделирование;

• компьютерное распознавание, образов и речи;

• военное применение, в частности, распознавание целей [10];

• многие другие области, требующие интенсивных арифметических расчетов.

Можно заметить, что область применения GPGPU систем практически совпадает с областью применения суперкомпьютерных и параллельных систем в целом.

В сфере параллельных вычислений любой алгоритм должен быть реализован с учетом архитектурных особенностей системы, на котором он будет выполняться. Это верно и для GPGPU. Однако в этом случае требуется более «глубокая» подгонка под конкретную архитектуру, часто порождающая дополнительные сложности. В частности, существуют проблемы отладки, профилирования и недостаточной производительности алгоритмов [5-7]. Другой проблемой, прямо влияющей на сложность реализации является то, что современные графические процессоры неспособны на какие-либо вызовы функций в ядре. Это ограничение может быть обойдено компилятором путем прямой подстановки всех функций, но полностью исключает возможность рекурсии. Кроме того, многочисленные ветвления в некоторых алгоритмах могут полностью «убить» производительность. Вообще, практически все алгоритмы, реализуемые на графических процессорах, для достижения приемлемой производительности должны пройти специальную оптимизацию или даже быть полностью переработаны с учетом архитектурных особенностей последних [3].

Другие ограничения прямо вытекают из достоинств - графические процессоры практически неприменимы в расчетах с малой степенью параллелизма или малой долей арифметики. Именно расположение к арифметическим расчетам и отличает область применения GPGPU от области применения параллельных систем вообще.

В настоящее время существует четыре основных программных платформы GPGPU вычислений: AMD Stream, NVidia CUDA, Microsoft DirectCompute и OpenCL.

AMD Stream и NVIDIA CUDA - это API, представленные производителями графических процессоров (AMD Readeon и NVIDIA GeForce соответственно) и предназначенные исключительно для работы с «родным» графическим процессором. Они включают в себя инструментарий разработки и отладки GPGPU программ, собственные (и не совместимые друг с другом) языки программирования (в обоих случаях это расширения C) и набор базовых служебных и математических библиотек. Эти API обеспечивают наилучшую производительность и совместимость, но ограничены использованием графических процессоров только собственного производства. Таким образом, получается, что для разработки универсального GPGPU приложения с использованием данных API требуется двойная работа для реализации, отладки и оптимизации GPGPU части.

Microsoft DirectCompute - это часть пакета Microsoft DirectX, начиная с версии 11. Это универсальный API — он подходит для графических процессоров обоих производителей, упрощая создание универсальных программ. Однако он дает несколько меньшее быстродействие, и не всегда использует преимущества той или иной архитектуры полностью. Также использование DirectCompute возможно только на системах под управлением ОС линейки Microsoft Windows, начиная с Vista, что ограничивает его использование домашними системами и рабочими станциями под управлением этих ОС.

OpenCL - это открытая, свободная среда для создания GPGPU программ. Главными преимуществами этой среды является полная открытость (свобода от лицензионных отчислений), универсальность (работает на графических процессорах обоих производителей). Учитывая тенденцию производителей аппаратной части к дальнейшему развитию именно этого API, этой платформы, можно порекомендовать для использования в GPGPU системах именно ее.

GPGPU и гетерогенные системы на их основе - это новое слово в области высокопроизводительных параллельных систем. Они позволяют существенно улучшить эксплуатационные характеристики вычислительных систем - уменьшить размер и энергопотребление при сохранении вычислительной мощности, увеличить производительность при сохранении размеров. Кроме того, они обладают довольно низкой стоимостью на единицу производительности, позволяя строить более дешевые и более мощные вычислительные системы. Именно этот подход обеспечил китайскому суперкомпьютеру Тяньхэ-1А первое место в мировых рейтингах производительности, что явно говорит всем - будущее параллельных вычислений - за GPGPU.

Литература

1. About GPGPU // http://gpgpu.org/about

2. ACM Digital Library, Event: GPGPU//http://portal. acm. org/event. cfm?id= RE243&CFID=4640883&CFTOKEN= 14871446

3. History of GPGPU // http://GPGPU.org/oldsite/data/history.shtml

4. Case studies on GPU usage and data structure design // Jens Breitbart //Kassel University 2008//http://www.uop.edu.jo/download/PdfCourses/DS/Jens Breitbart thesis%20(1).pdf

5. NVIDIA Corporation. NVIDIA CUDA Compute Unifed Device Architecture Programming Guide Version 2.0,2008// http://developer.download.nvidia.com/compute/cuda72 0/docs/NVIDIA CUDA Programming Guide 2.0.pdf

6. DirectX Frequently Asked Questions// http://msdn.microsoft.com/en-us/library/ee416788. aspx

7. Visions for Application Development on Hybrid Computing Systems //Roger Chamberlain, Joseph Lancaster, Ron Cytron // Washington University,2007//http://citeseerx.ist.psu.edu/viewdoc/download?doi= 10.1.1.133.9 277&rep=rep 1 &type=pdf

8. GPU-based Sorting in PostgreSQL // Naju Mancheril // School of Computer Science-Carnegie Mellon University //http://www.cs.cmu.edu/afs/cs.cmu.edu /Web/People/ngm/15-823/project/Final.pdf

9. AMD Radeon HD 6970 Graphics// http://www.amd.com/us/ products/desktop/graphics/amd-radeon-hd-6000/hd-6970/Pages/amd-radeon-hd-6970-overview.aspx

10. Owen Harrison, John Waldron, Efficient Acceleration of Asymmetric Cryptography on Graphics Hardware // 2009 //

11. http://www.springerlink.com/

content/v83j50l 12p7446v2/?p=4faeca75 397543a5a70ac35 86840bcc2&pi=21

12. Song Jun Park, Dale Shires // Central Processing Unit/Graphics Processing Unit (CPU/GPU) Hybrid Computing of Synthetic Aperture Radar Algorithm // 2009 // http://www.arl.army.mil/arlreports/2010/ARL-TR-5074.pdf

13. NVIDIA Tesla GPUs Power World's Fastest Supercomputer// http://pressroom.nvidia.com/easyir/customrel.do?easyirid=A0D622CE9F579F09 &version=live&prid=678988&releasejsp=release 157