Параллельные вычисления общего назначения на графических процессорах
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
Издательство Уральского университета
Авторы:
Некрасов Кирилл Александрович, Поташников Святослав Игоревич, Боярченков Антон Сергеевич, Купряжкин Анатолий Яковлевич
Год издания: 2016
Кол-во страниц: 104
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Магистратура
ISBN: 978-5-7996-1722-6
Артикул: 799079.01.99
В учебном пособии изложены основные принципы организации высокоскоростных параллельных вычислений на графических процессорах. Рассмотрены подходы к программированию графических процессоров с использованием шейдерной модели и NVIDIA CUDA. Проанализированы примеры. Пособие предназначено для проведения практических занятий по программированию графических процессоров для магистрантов.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Магистратура
- 09.04.02: Информационные системы и технологии
- 14.04.01: Ядерная энергетика и теплофизика
- 14.04.02: Ядерные физика и технологии
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство образования и науки Российской Федерации Уральский федеральный университет имени первого Президента России Б. Н. Ельцина К. А. Некрасов, С. И. Поташников, А. С. Боярченков, А. Я. Купряжкин Параллельные вычисления общего назначения на графических процессорах Учебное пособие Рекомендовано методическим советом УрФУ для студентов, обучающихся по направлениям подготовки 14.04.02 — Ядерная физика и технологии; 09.04.02 — Информационные системы и технологии; 14.04.01 — Ядерные реакторы и материалы Екатеринбург Издательство Уральского университета 2016
УДК 004.032.24:004.383.5(075.8) ББК 32.97я73 П18 Авторы: Некрасов К. А., Поташников С. И., Боярченков А. С., Купряжкин А. Я. Рецензенты: Институт теплофизики УрО РАН (д‑р физ.‑мат. наук, проф. В. Г. Байдаков); гл. науч. сотр. лаборатории математического моделирования Института промышленной экологии УрО РАН д‑р физ.‑мат. наук, проф. А. Н. Вадаксин П18 Параллельные вычисления общего назначения на графических процессорах : учебное пособие / К. А. Некрасов, С. И. Поташников, А. С. Боярченков, А. Я. Купряжкин. — Екатеринбург : Изд‑во Урал. ун‑та, 2016. — 104 с. ISBN 978‑5‑7996‑1722‑6 В учебном пособии изложены основные принципы организации высокоскоростных параллельных вычислений на графических процессорах. Рассмотрены подходы к программированию графических процессоров с использованием шейдерной модели и NVIDIA CUDA. Проанализированы примеры. Пособие предназначено для проведения практических занятий по программированию графических процессоров для магистрантов. Библиогр.: 22 назв. Рис. 24. Табл. 3. Прил. 1. УДК 004.032.24:004.383.5(075.8) ББК 32.97я73 ISBN 978‑5‑7996‑1722‑6 © Уральский федеральный университет, 2016
Введение Д ля предсказания характеристик и поведения больших систем широко используется вычислительное моделирование, наиболее принципиальным методом повышения производительности которого является распараллеливание вычислений. До последнего времени наиболее доступными системами для параллельных расчетов были кластеры персональных компьютеров или близких к ним по архитектуре машин, в которых вычисления производились на центральных процессорах общего назначения (CPU). Однако такие кластеры достаточно дороги и сложны в эксплуатации. К тому же архитектура CPU персональных компьютеров не оптимизирована для интенсивных математических вычислений, поскольку основной задачей таких процессоров является исполнение последовательных программ со сложным ветвлением. Во второй половине 1990‑х годов началось быстрое развитие графических процессоров (GPU) — дополнительных вычислительных устройств для ускоренного исполнения алгоритмов визуализации трехмерных сцен [1–3]. Поскольку трехмерная визуализация допускает эффективное распараллеливание расчетов, графические процессоры разрабатывались как поточно‑параллельные системы с большим количеством вычислительных блоков, конвейерной обработкой данных и памятью с максимальной пропускной способностью. Современные графические процессоры выполняют не только стандартные алгоритмы визуализации, но и сложные пользовательские программы, что позволяет решать на них задачи общего назначения, включая физико‑математическое моделирование [4–6]. При параллельных расчетах GPU может обеспечить производительность кластера из сотен обычных персональных компьютеров. По соотношению производительности и цены графические процессоры имеют большое преимущество перед другими вычислительными системами, в том числе перед специализированными суперкомпьютерами.
1. Структура и возможности вычислительной системы с графическим процессором 1.1. Задача компьютерной визуализации трехмерных сцен В о многих областях использования компьютеров существует задача визуализации (представления на экране) трехмерных изображений (в дальнейшем — сцен). Трехмерная (3D) визуализация необходима, например, в компьютерных играх, при создании анимации и спецэффектов, а также для инженерного проектирования, наглядного представления физико‑математических моделей. Поскольку графические процессоры создавались именно для решения задачи визуализации, рассмотрим ее основные составляющие. Пусть, для определенности, трехмерная сцена представляет собой совокупность поверхностей, разбитых для дискретной компьютерной обработки на плоские треугольники. В некоторых массивах, которые обычно называют текстурами, хранится информация о цветах треугольников. Кроме того, известны положения и характеристики источников света. Задача визуализации состоит в том, чтобы сформировать изображение этой сцены на плоскости экрана, положение которой определяется точкой зрения наблюдателя. Процесс формирования изображения включает в себя следующие основные этапы: · проектирование треугольников, представляющих сцену, на плоскость экрана; · разбиение полученных проекций на отдельные пиксели, для которых будут определяться цвета (стадия растеризации треугольников);
1.2. Архитектура графического процессора (GPU) · определение видимого цвета элементов поверхности треугольников с учетом исходного цвета и отражающих свойств самой поверхности, прозрачности других поверхностей, освещенности и теней. Обрабатываемые сцены обычно состоят из очень многих треугольников, которые разбиваются на еще большее количество пикселей, так что их визуализация требует больших вычислительных ресурсов. Вместе с тем и вершины, и пиксели можно обрабатывать почти или совсем независимо друг от друга. Соответственно задача визуализации допускает очень эффективное распараллеливание. Именно в целях распараллеливания графических вычислений центральные процессоры персональных компьютеров стали суперскалярными — получили возможность одновременного (векторного) исполнения некоторых операций сразу над несколькими числами (расширения 3DNow! и SSE). Большинство центральных процессоров ПК состоит из нескольких ядер, что дополнительно увеличивает их потенциал как систем для параллельных вычислений. Тем не менее исторически сложилось так, что наиболее эффективными устройствами для распараллеливания вычислений на ПК стали и до сих пор остаются специализированные графические процессоры (GPU). Эти процессоры, разрабатывавшиеся именно для обработки графики, практически полностью ориентированы на параллельную обработку данных. 1.2. Архитектура графического процессора (GPU) 1.2.1. Распараллеливание вычислений по данным Конструктивно графический процессор представляет собой вычислительное устройство, работающее отдельно от центрального процессора, параллельно с ним. Обычно графические процессоры размещают на отдельных печатных платах с собственной системой охлаждения, которые называют графическими ускорителями (или видеокартами). Вместе с GPU на плате графического ускорителя расположена видеопамять — специализированная оперативная память, в которой хранятся обрабатываемые графическим процессором массивы данных.
1. СтруктурА и возможноСти вычиСлительной СиСтемы С грАфичеСким процеССором На рис. 1.1 в качестве примера показана архитектура графического процессора G80 — одного из процессоров компании NVIDIA [4]. Главной (и общей для всех графических процессоров) характеристикой этой архитектуры является то, что GPU представляет собой систему из параллельных вычислительных устройств, каждое из которых применяет заданную, единую для всех устройств, программу (вычислительное ядро, англ. kernel) к различным элементам входных массивов данных, расположенных в общей памяти. Центральный процессор (Host) Устройство управления вычи слительными процессами (Tread Execution Manager) SM SM SM SM ј 16 мультипроцессоров Кеш графического процессора, доступный всем мультипроцессорам. Центральному процессору доступен частично и только для записи Общая память для размещения входных данных и результатов (видеопамять, Global Memory), доступная как всем мультипроцессорам GPU, так и центральному процессору. Размер − до нескольких гигабайтов Отдельный «вычислитель» (процессор), осуществляющий конвейерную обработку данных Параллельный кеш данных (Parallel Data Cache, Shared Memory) – разделяемая память, одновременно доступная всем «вычислителям» одного мультипроцессора SM SM SM SM SM Рис. 1.1. Архитектура графического процессора NVIDIA G80 [4] Параллельная архитектура графических процессоров ориентирована на исполнение алгоритмов, в которых элементы больших входных массивов обрабатываются одинаковым образом независимо или почти независимо друг от друга, то есть использующих распараллеливание вычислений по данным. Множества элементов, подвергаемых однотипной независимой обработке, называют потоками (данных либо результатов), так что графические процессоры осуществляют поточно‑параллельную обработку данных.
1.2. Архитектура графического процессора (GPU) Концепция программирования, заключающаяся в потоковой обработке данных, известна под аббревиатурой SIMD (от англ. Single Instruction — Multiple Data — одна инструкция для множества данных, рис. 1.2). Процессор, работающий по принципу SIMD, преобразует поток данных в поток результатов, используя программу как функцию преобразования. GPU Данные Результаты Инструкции (вычислитель ное ядро) Рис. 1.2. Поточно‑параллельная обработка данных SIMD Выбор концепции SIMD для графических процессоров обусловлен тем, что она обеспечивает параллельное использование большого количества «вычислителей» без явного управления ими: распределения задач, синхронизации вычислений и коммуникации между параллельными расчетами. Разработчикам GPU это позволяет за счет упрощения архитектуры добиваться большей производительности, а при программировании сокращает работу. C 2001 по 2006 годы графические процессоры включали в себя «вычислители» двух типов: вершинные и пиксельные конвейеры (или шейдеры, см. пояснения ниже) [7–8]. Первые были предназначены для проектирования на плоскость экрана вершин, задающих отображаемые поверхности, а вторые — для расчета цветов пикселей на экране. Так выпущенные в 2006 году процессоры ATI Radeon X1900–1950 имели 8 вершинных и 48 пиксельных конвейеров, которые к тому же были суперскалярными (одновременно обрабатывали по 4 компоненты вектора). В 2007 году производители GPU перешли от различающихся вершинных и пиксельных конвейеров к унифицированным потоковым процессорам, заменяющим как вершинные, так и пиксельные конвейеры. Графические процессоры 2014–2015 годов выпуска ATI Radeon Fiji XT и NVIDIA GM200–400 включают 4096 и 3072 потоковых процес
1. СтруктурА и возможноСти вычиСлительной СиСтемы С грАфичеСким процеССором сора (для 32‑битовых вычислений «одинарной» точности) при несколько различной внутренней архитектуре. При этом производительность графических процессоров продолжает быстро увеличиваться. 1.2.2. Взаимодействие графического и центрального процессоров Графический процессор не имеет средств прямого взаимодействия с устройствами ввода‑вывода (кроме монитора), а также доступа к оперативной памяти компьютера. Поэтому управление графическим процессором осуществляется только через центральный процессор. Схема взаимодействия центрального и графического процессоров приведена на рис. 1.3. GPU Общая память GPU (видеопамять) Оперативная память компьютера Пользователь Внешние устройства Вычислительные блоки GPU Программа для GPU Кеш для констант Регистры и разделяемая память вычислительных блоков Языки программирования высокого уровня для CPU • • Драйвер графического процессора Графический ускоритель (видеокарта) Языки для GPU: HLSL, CUDA CPU Шина данных PCI-Express либо AGP CPU Шина данных PCI-Express либо AGP CPU Шина данных PCI-Express либо AGP Шина данных (обычно − PCI-Express) • • • • Рис. 1.3. Схема взаимодействия CPU и GPU с памятью и между собой Графические ускорители подключаются к системной плате персонального компьютера через высокоскоростную шину данных (в настоящее время PCI‑Express). Посредством этой шины центральный процессор получает доступ к видеопамяти, а также к некоторым разделам кеш‑памяти, расположенной на самом графическом процессоре. Через эту же шину CPU загружает в графический процессор программу и запускает ее.
1.2. Архитектура графического процессора (GPU) Перед запуском программы, исполняемой на GPU, центральный процессор передает графическому процессору данные двух видов: · значения констант, используемых в программе; · один или несколько больших массивов данных для потоковой обработки. К константам необходим постоянный и быстрый доступ, поэтому они записываются в кеш‑память (или регистры), расположенную на кристалле графического процессора. Массивы данных часто бывают настолько велики, что целиком в кеш‑память не помещаются. Однако при простейшей потоковой обработке каждый из элементов массивов данных используется только один раз. Так что для хранения этих массивов предназначена видеопамять (общая память), представляющая собой отдельные микросхемы на плате графического ускорителя. Она работает медленнее кеш‑памяти и регистров, зато имеет бόльший объем, до нескольких гигабайтов. Результаты своей работы графический процессор может сразу записывать в раздел видеопамяти, называемый буфером кадра, откуда они передаются на монитор. Но существует также возможность вообще не отображать расчет на экране, а копировать результаты из видеопамяти в оперативную память компьютера, где они становятся доступными для дальнейшей обработки центральным процессором. На этом и основано использование графических процессоров для вычислений общего назначения, не связанных с обработкой графики. На схеме (рис. 1.3) указаны также типы программ, которые исполняются центральным и графическим процессорами на различных этапах обработки данных. Такие программы будут далее подробно рассмотрены. 1.2.3. Иерархия памяти, доступной центральному и графическому процессорам Как показано на схемах (рис. 1.1, рис. 1.3), в программах для графических процессоров используется память нескольких разновидностей с различными характеристиками и назначением. Это так, поскольку время, затрачиваемое центральным и графическим процессорами на операции чтения данных из памяти и записи в память, является одним из важнейших факторов, определяющих быстродействие программ для графических процессоров.
1. СтруктурА и возможноСти вычиСлительной СиСтемы С грАфичеСким процеССором Использование памяти различных типов обусловлено необходимостью баланса между объемом памяти и скоростью доступа к данным. Разновидности памяти, имеющие наибольшую емкость, обычно характеризуются бόльшим временем доступа к данным, и наоборот. Быстродействие памяти, в свою очередь, определяется двумя характеристиками — латентностью и пропускной способностью. Латентность — это время доступа к памяти, точнее, время ожидания процессором данных после запроса. Латентностью определяется производительность вычислений при решении задач, требующих частого обращения к различным по расположению неупорядоченным ячейкам памяти (произвольный доступ к памяти). Такой обмен с памятью характерен для интерактивных приложений (программы, интенсивно взаимодействующие с другими приложениями и с пользователями), а также для приложений, управляющих сложными процессами. Подобные алгоритмы обычно исполняются центральным процессором. Как можно меньшая латентность памяти необходима современным центральным процессорам, работающим на очень высоких частотах, еще и потому, что таким частотам должна соответствовать высокая скорость доступа к данным. Пропускная способность памяти характеризует объем данных, которые могут быть переданы к процессору или от процессора за единицу времени. Высокая пропускная способность оказывается эффективнее низкой латентности в задачах, позволяющих организовать последовательный доступ к памяти — считывание (или запись) данных из ячеек памяти, расположенных друг за другом, непрерывным потоком. При поточно‑параллельной обработке данных предпочтителен именно последовательный доступ к памяти, поэтому видеопамять, предназначенная для обмена данными с графическим процессором, должна обладать максимальной пропускной способностью даже в ущерб латентности. Иерархия памяти, используемой центральным и графическим процессорами, уже отчасти отражена на рис. 1.1 и рис. 1.3. На рис. 1.4 приведена еще одна схема, иллюстрирующая основные принципы использования памяти различных типов. Особенности и назначение каждого вида памяти кратко пояснены рядом и будут подробнее прокомментированы в примерах.