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

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

CC BY
327
82
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
высокопроизводительные вычисления / архитектура спецпроцессоров / графический процессор / high-performance computing / architecture of special purpose processors / graphics processing unit

Аннотация научной статьи по математике, автор научной работы — Ершов Э. С., Сухотерин Е. А.

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

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

The architecture of NVIDIA's 8th generation GPUs in relation to general purpose computations

This article deals with the implementation of general purpose computations on graphics processing units (GPUs). The architecture of NVIDIA's 8th generation GPUs is described in general terms, the drawbacks of the previous generation's architecture are also mentioned along with the ways these drawbacks were improved. All the advantages and disadvantages are spoken of from the point of view of general purpose computations. The statistics are also given in the article proving the effectiveness of the new generation of GPUs.

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

УДК 004.021.42

АРХИТЕКТУРА ГРАФИЧЕСКИХ ПРОЦЕССОРОВ NVIDIA ВОСЬМОГО ПОКОЛЕНИЯ С ТОЧКИ ЗРЕНИЯ ВЫЧИСЛЕНИЙ ОБЩЕГО НАЗНАЧЕНИЯ © 2008 Э. С. Ершов, Е. А. Сухотерин

Э. С. Ершов - студент 5-го курса факультета информатики и вычислительной

техники nforcer@kursknet. ru

Е. А. Сухотерин - кандидат технических наук, доцент кафедры программного обеспечения и администрирования информационных систем evgeniy. soukhoterin'cigmail. ru

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

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

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

Ключевые слова: высокопроизводительные вычисления, архитектура

спецпроцессоров, графический процессор.

1. Введение

Произведённый NVIDIA видеопроцессор G70 в своё время поразил всех невиданной производительностью в игровых приложениях и программах, работающих с графикой. В последнее время всё более широкое распространение получают вычисления общего назначения на графических процессорах (GPGPU), задействующие видеокарты в расчётах, не имеющих к графике никакого отношения [Pharr 2005; Челноков 2006]. И именно с точки зрения GPGPU процессор G70 не так уж и впечатляет. Ему на замену был выпущен принципиально новый графический процессор G80. Рассмотрим вкратце преимущества новинки и недостатки предшественника.

2. Ограничения архитектуры G70

Хотя процессор G70 и обладал серьёзной для своего времени мощью, он не был лишён некоторых недостатков, которые проявились несколько позже, при первых попытках программирования его для вычислений общего назначения.

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

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

Вторая серьёзная проблема, которая возникла с первыми попытками программирования обычных вычислений на 070, заключалась в неудобстве программирования шейдеров, отвечающих за вычисления общего назначения [Боресков 2006]. Не было специальных функций, операторов, библиотек, упрощающих программирование, механизмы обмена данными с видеокартой приходилось часто придумывать самому. Таким образом, ОРОРи (вычисления общего назначения на ОРИ) стали в некотором роде уделом избранных, способных разобраться в сложнейших механизмах. Кроме того, отсутствовала также и стандартизованная среда программирования. Каждый писал программы на том языке и в той среде, которая ему нравилась, что, с одной стороны, повышало скорость написания программ, а с другой -создавало проблемы переносимости. Код, написанный и отлаженный у одного, мог вообще не работать у другого.

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

Рис. 1. Общая схема архитектуры G80. Здесь: ВПВ - выборка из потока вершин (Vertex Thread Issue); ВПГ - выборка из потока геометрии (Geometry Thread Issue); ВПП - выборка из потока пикселей (Pixel Thread Issue); ПУП - процессор управления потоками (Thread Processor); SP - потоковый процессор (Streaming Processor); TF - блок фильтрации текстур (Texture Filtering Unit); L1 - кэш-память первого уровня; L2 - кэш-память второго уровня; FB - шина обмена данными (Front Bus)

3. Преимущества архитектуры 080

По заявлениям КУГО1А пиковая производительность процессора 080 достигает 520 гигафлопс, в то время как для 070 этот показатель ненамного превышал 200 гигафлопс. Естественно, вместе с этим возросли и энергопотребление, и выделяемое тепло, но не так значительно, как производительность. Причём такой прирост был достигнут не только количественными, но и качественными изменениями.

Впервые в видеокартах, доступных в розничной продаже, была использована унифицированная архитектура шейдерных процессоров. Во всех видеопроцессорах, предшествовавших 080, в том числе и в 070, существовали отдельные обрабатывающие процессоры для вершинных и пиксельных шейдеров. Они имели в своём составе два векторных АЛУ, работающих с векторами, имеющими четыре координаты. Таких мини-процессоров в 070 было 24 для пиксельных и 8 для вершинных шейдеров. В 080 нет разделения на пиксельные и вершинные процессоры. Любой мини-процессор в 080 (называемый потоковым процессором) может выполнять любую функцию и осуществлять вычисления любого характера. Таких потоковых процессоров в 080 128 (в будущем их количество будет только увеличиваться), причём все они скалярные, т.е. работают только с отдельными числами, а не с векторами. Это понижает эффективность одного отдельно взятого мини-процессора по сравнению с его векторным предком, но значительно возросшее их количество и в три раза большая частота работы (1,4 ГГц против 450 МГц) позволяют добиться впечатляющего превосходства. Кроме того, тот факт, что процессоры скалярные, позволяет легко использовать их в вычислениях общего назначения, ведь в этом плане они ничем не отличаются от центрального процессора. Более того, сходство только усиливается, ведь в 080 мини-процессоры объединены в группы по 8 и каждая группа имеет кэш-память первого и второго уровней (причём кэш второго уровня доступен для обращения всем остальным группам) (рис. 2).

ml ти ■ ■ ■ ■

IS ■ ■ ■ ■

ТА ТА ТА ТА

TF ТТ

TF TF

ТУ TF

TF1TF

Рис. 2. Структура мультипроцессора. Здесь: SP - потоковый процессор (Streaming Processor); TA - блок адресации текстур (Texture Address Unit); TF - блок фильтрации текстур (Texture Filtering Unit); Ll - кэш-память первого уровня; L2 - кэш-память второго уровня

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

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

4. Преимущества G80 с точки зрения вычислений общего назначения

Итак, первая проблема G70 решена, а что же со второй? Естественно, и она решена тоже. Если помните, проблема была в отсутствии единой стандартной среды разработки для GPGPU. Теперь такая среда есть, и называется она CUD A (Compute Unified Device Architecture), что можно примерно перевести как «архитектура с унифицированными вычислениями». Название не очень звучное, но NVIDIA собирается дать ей более простое и запоминающееся - «GPU Computing», означающее, собственно, вычисления на GPU. Эта среда представляет собой надстройку над языком С, которая вводит несколько новых операторов и процедур, значительно облегчающих программирование расчётов общего назначения, а также компилятор. На данный момент среда CUDA находится в стадии бета-версии, но уже в работоспособном состоянии. И хотя её возможности ещё далеки до заявленных, уже сейчас с её помощью можно программировать различные операции над матрицами и некоторые другие, и разница в быстродействии по сравнению с CPU видна невооружённым глазом. Единственным недостатком на данном этапе видится то, что написанные в CUDA программы можно запустить только на G80 и производных от него младших процессорах G84 и G86. Сейчас доля этих видеокарт на рынке очень мала, и поэтому огромное количество владельцев видеокарт прошлых поколений не будут иметь возможности использовать преимущества GPGPU, а ведь прирост производительности хорошо заметен и на их видеокартах.

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

Рис. 3. Ускорение вычислений при использовании графических процессоров. Каждый столбец диаграммы показывает увеличение производительности при решении на графическом процессоре относительно центрального процессора для следующих задач: Rigid Body Physics Solver - физика твёрдых тел; Matrix Numerics - матричные вычисления; Wave Equation - волновые уравнения; Biological Sequence Match - биологические задачи; Finance - задачи в финансовой области

Согласно данным, предоставленным NVIDIA на презентации G80 (рис. 3), результаты тестирования показывают 10-кратное превосходство видеопроцессора над CPU при расчёте физических эффектов, 13-кратное - при работе с матрицами, 15-кратное - при расчёте волновых уравнений, решение биологических задач ускоряется в 47 раз, а финансовых - в 197 раз. Таким образом, важность и перспективность использования видеопроцессоров для расчётов во всех областях науки очевидна.

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

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

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

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

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