Основы Программирования Процессора


Основы программирования GPU, потоковая модель вычислений, реализация условных конструкций на современных GPU
Сентябрь 17, 2016 – 23:54
Регистры общего назначения

За последние несколько лет GPU прошли путь от просто растеризаторов (с возможностью наложения одной текстуры) до мощных процессоров, вычислительная мощность которых в десятки раз превосходит мощность центрального процессора (CPU).

Ключевыми понятиями, позволившими GPU осуществить подобный скачок являются параллелизм и потоковая модель вычислений (stream computing model).

Потоковая модель вычислений

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

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

Спецификой GPU с самого начала была параллельная обработка данных и наличие графического конвейера. Объем кэш-памяти даже на современных GPU очень мал по сравнению с объемом кэш-памяти центрального процессора.

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

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

Если посмотреть на архитектуру современных GPU, то сразу видно наличие нескольких независимо работающих вершинных (до 6 на GeForce 6800) и фрагментных (до 16) процессоров, работающих параллельно.

Все это очень хорошо укладывается в так называемую потоковую модель вычислений (stream computing model).

Основой этой модели является понятие потока (stream), как последовательности элементов одного и того же типа.

Так массив координат вершин можно рассматривать как поток (состоящий из четырехмерных векторов). Поток может состоять как из простых элементов, так и сложных.

Source: steps3d.narod.ru
Похожие публикации