Научная статья на тему 'Разработка шейдеров для реализации вычислительных алгоритмов общего назначения на графических процессорах нового поколения'

Разработка шейдеров для реализации вычислительных алгоритмов общего назначения на графических процессорах нового поколения Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
238
119
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
графический процессор / высокопроизводительные вычисления / программное обеспечение / шейдеры / graphics processing unit / high-level performance computations / software / shaders

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Гладких Н. А., Сухотерин Е. А.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Гладких Н. А., Сухотерин Е. А.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Development of shader programs for implementation of generic calculation algorithms for new generation of graphics processors

In this paper we show how the modern graphics processors can effectively be used for implementation of generic calculations with the performance exceeding that of the central processors. We describe in brief the existing software development kits wich can be used for implementation of this task; examples of specialized and common tasks which implementation for graphics processor can greatly improve the effectiveness of calculations.

Текст научной работы на тему «Разработка шейдеров для реализации вычислительных алгоритмов общего назначения на графических процессорах нового поколения»

УДК 004.021.42

РАЗРАБОТКА ШЕЙДЕРОВ ДЛЯ РЕАЛИЗАЦИИ ВЫЧИСЛИТЕЛЬНЫХ АЛГОРИТМОВ ОБЩЕГО НАЗНАЧЕНИЯ НА ГРАФИЧЕСКИХ ПРОЦЕССОРАХ НОВОГО ПОКОЛЕНИЯ

© 2008 Н. А. Гладких, Е. А. Сухотерин

Курский государственный университет

Н.А. Гладких - студент 5-го курса факультета информатики и вычислительной техники

gladkih@kuгsknet. ги Е.А. Сухотерин - кандидат технических наук, доцент кафедры программного обеспечения и администрирования информационных систем

evgeniy. soukhoteгin@gmail. ги

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

Ключевые слова: графический процессор, высокопроизводительные вычисления, программное обеспечение, шейдеры.

1. Современные ПЭВМ как высокопроизводительные вычислители

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

Центральный процессор - сердце любого современного персонального компьютера. Это сверхбыстрое арифметико-логическое устройство обеспечивает работу всей вычислительной системы: производит операции с числами высокой точности, пересылает данные от одного устройства к другому, координирует работу всех устройств компьютера. Любая программа, будь то офисное приложение или музыкальный проигрыватель, представляет собой набор инструкций, которые процессор последовательно выполняет.

В настоящее время возможности центральных процессоров поражают. Средняя производительность процессоров на сегодняшний день составляет около 50 ГФлопс (миллиардов арифметических операций с плавающей запятой в секунду). Однако по мере развития технологий возникает ряд проблем.

Во-первых, оперативная память. Ее объем стремительно увеличивается, в то время как скорость ее работы возрастает крайне медленно (ежегодно пропускная способность возрастает на 25%, задержка обращения к фрагменту памяти сокращается на 5%, притом что объем памяти увеличивается на 75-100% в год). Поэтому приходится тратить дополнительные ресурсы на разработку и реализацию алгоритмов, оптимизирующих взаимодействие между центральным процессором и памятью. Так, в настоящее время для более быстрого обращения к оперативной памяти в центральный процессор приходится встраивать быструю кэш-память. Ее объем для современных процессоров составляет 4-8 Мб, и она занимает не менее половины площади кристалла процессора. А это значит, что данную площадь не занимают вычислительные блоки. Это очень невыгодно, так как в большинстве сценариев большой кэш оказывается

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

Во-вторых - последовательный характер большинства программ. С точки зрения программирования очень удобно, когда программа представляет собой последовательный набор инструкций, исполняемых друг за другом. С точки зрения уже работающей программы задержка выполнения любой одной инструкции влечет за собой задержку выполнения всех последующих. Разумеется, инструкции процессора можно распараллелить, но для обеспечения параллелизма приходится занимать еще место на кристалле. Таким образом, площадь, занимаемая вычислительными блоками, по отношению к общей площади кристалла процессора весьма мала.

2. Возможность передачи части вычислительной нагрузки графическому процессору

Сравнительно недавно появилось в некотором роде революционное решение этих проблем [Челноков 2006]. Каждый современный персональный компьютер, помимо центрального, оснащен также графическим процессором. Графический процессор предназначен для обработки изображений, в настоящее время, главным образом, трехмерных. Однако трехмерная графика редко применяется в программах, отличных от компьютерных игр. В связи с этим при работе всех остальных программ графический процессор по большей части простаивает.

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

Трансформация

Программируемый

блок

Вершины

и Сборка/сечение . треугольников

Растеризация,

интерполяция

Попиксельная

обработка

Программируемый

блок

Поверхность

Выборка и ^

фильтрация Видеопамять

т

V

Текстуры

Рис. 1. Графический конвейер

Новая идея - GPGPU (Generic Programming on Graphics Processing Unit), то есть идея решения общих задач на графическом процессоре, состоит в том, чтобы в то время, когда графический процессор не занят обработкой графики, загрузить его другой «полезной» работой - вычислениями с плавающей запятой. Это может быть реализовано посредством написания программ-шейдеров, ориентированных на произвольные вычисления вместо графики.

3. Реализация алгоритмов общего назначения для графических процессоров

Шейдеры (от английского «shade» - тень) - это специальные программы, исполняемые непосредственно графическим процессором, изначально предназначенные для реализации сложных графических эффектов посредством очень тонкой передачи игры света и тени [Pharr 2005; Боресков 2006]. На ранних этапах для написания этих программ использовались специализированные ассемблеры. Когда же количество инструкций в шейдерах достигло десятков, стали появляться C-образные языки высокого уровня (сейчас в арсенале программистов имеются: cg от NVidia, HLSL из DirectX, GLSL из OpenGL и множество прочих). То есть, программисты получили полноценный инструментарий для написания программ произвольного назначения, выполняемых на графическом процессоре.

Судя по публикациям, графическому процессору удается найти применение в самых различных областях высокопроизводительных вычислений, включая высококачественный рендеринг, трассировку лучей, обработку изображений и сигналов, машинное зрение, компрессию, поиск и сортировку, биоинформатику, решение систем линейных уравнений, моделирование физических эффектов [Pharr 2005; Челноков 2006]. Достигаемое ускорение колеблется от случая к случаю, но типично составляет несколько крат по сравнению с расчетом на центральном процессоре.

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

Таким образом, графический процессор может стать весьма перспективной альтернативой в решении многих прикладных задач, не связанных напрямую или вообще с графикой. С появлением унифицированных конвейеров, например, в процессорах семейства G80 от NVIDIA (соединивших в себе возможности и вершинных, и пиксельных) производительность шейдеров возросла скачкообразно. В настоящее время средняя производительность графических процессоров колеблется и составляет около 300 ГФлопс. Это в 6 раз больше, чем типичная производительность центрального процессора персонального компьютера.

Не вызывает сомнений актуальность и практическая значимость разработки алгоритмов и программ общего назначения для графических процессоров. Год за годом графические процессоры прибавляют в скорости работы куда быстрее, чем центральные процессоры, увеличивая и без того немалый отрыв. Поколения графических чипов тоже сменяются куда чаще. Даже для непрофессионального использования уже некоторое время предлагается устанавливать в компьютер две видеокарты (технологии SLI от NVIDIA или Crossfire от ATI). Можно будет использовать вторую плату исключительно как сопроцессор для расчетов, полностью освободив ее от обработки графики или динамически перераспределять нагрузку между двумя графическими процессорами. Радужные перспективы реализации вычислений общего назначения на графических процессорах способны поблекнуть только из-за недостаточной программной поддержки. Однако в настоящее время корпорация NVIDIA, всерьез занявшаяся этой идеей, демонстрирует немалый энтузиазм в данной области [Pharr 2005]. Были выпущены:

• специализированная среда разработки программного обеспечения КУГО1А США ББК;

• подробная документация о программировании шейдеров как графических так и общего назначения;

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

Наиболее подходящими для программирования как с точки зрения архитектуры, так и с точки зрения имеющегося инструментария являются процессоры КУГО1А начиная с серии 080.

4. Область применения шейдеров общего назначения

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

Для дальнейшей оптимизации можно использовать динамическое перераспределение вычислительной нагрузки между центральным процессором и графическим (несколькими графическими процессорами) в зависимости от их загрузки.

К повседневным задачам, требующим большого объема вычислений, в настоящее время можно, например, отнести:

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

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

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

Таким образом, есть основания рассматривать разработку шейдеров для реализации вычислительных алгоритмов общего назначения как одно из самых перспективных и приоритетных направлений в области высоких информационных технологий.

Библиографический список

Боресков А.В. Разработка и отладка шейдеров. - СПб.: БХВ-Петербург, 2006. -

496 с.

Челноков Ф. Персональный суперкомпьютер // Компьютерра. - 2006. - №13 (633). - С. 20 - 24.

Pharr M., Randima F. GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation. - Addison-Wesley, 2005. - 814 pp.

i Надоели баннеры? Вы всегда можете отключить рекламу.