ПредишенСледващото

В тази статия съдържа информация, която ще ви помогне да се разберат основните принципи на GPU-програмиране.

Въведение в архитектурата на GPU

Разделете двата вида устройства - това, което контролира цялостната логика - домакин. и е в състояние бързо да изпълни набор от инструкции на голямо количество данни - устройство.

Въведение към GPU-изчислителна техника, моите си-бележки

за GPU програмиране

Въведение към GPU-изчислителна техника, моите си-бележки

Програми са написани на C езикови разширения от NVidia / OpenCL и събрани с помощта на специален компилатор включени в SDK. Всеки производител своя курс. Има два варианта за монтаж - за целевата платформа - както е ясно посочено какъв хардуер ще бъде изпълнено в някакъв код или междинен код, който, когато се движат по драйвера на съответния хардуер ще се превърне в набор от конкретни инструкции за архитектура (коригирани за хардуерни възможности).

Въведение към GPU-изчислителна техника, моите си-бележки
В изпълнение на програмата за GPU, наречена ядро ​​- ядрото - че за CUDA да OpenCL, че това ще бъде един набор от инструкции, които се прилагат за всички данни. Функция сам, както и данните, на които се извършват - различни - на принципа на SIMD.

CUDA / OpenCL водача разделя входни данни в множество части (изпълнение нишки комбинирани в блокове), и определя да изпълнява за всеки поток процесор. Програмистът може да зададете на водача и трябва да се направи най-ефективно използване на съществуващите ресурси на компютъра, като се посочва блокови размери и броя на конци в тях. Разбира се, на максимално допустимите стойности варират от устройство на устройство. Добра практика - преди параметри искане изпълнение желязо, върху които да работят ядрото и въз основа на тях се изчислява оптималните размери.

Схематично, разпределението на задачите на графичния процесор е както следва:

Въведение към GPU-изчислителна техника, моите си-бележки

изпълнение на програмата на GPU

работна позиция (OpenCL) или конци (CUDA) - и набор ядро ​​данни се извършва на Stream Processor (обработка на елемент в случая ATI устройства).
работна група (OpenCL) или конци блок (CUDA) се извършва на Multi процесор (SIMD двигателя)
Grid (блокове, поставени като концепция е само Nvidia) = извършени върху цялото устройство - GPU. За изпълнение на графичния всички потоци се комбинират в основата (основа - CUDA) или veyffronty (фронта на вълната - OpenCL) - нишка басейн назначен да изпълнява един многопроцесорни. Това означава, че ако броят на дялове или работни групи е по-висок от броя на multiprotsessorov - в действителност, във всеки даден момент тече група (или групи), комбинирана основа - всички други чакат реда си.

Едно ядро ​​може да се извърши на няколко GPU устройства (за CUDA и за OpenCL, както ATI карта и за NVidia).
Един графичния устройство може едновременно да изпълнява множество ядра (за CUDA и за OpenCL, за NVidia - от 20 и по-горе архитектура). Връзки по тези въпроси, които виждате. В края на краищата.

OpenCL модел памет (в скоби - CUDA терминология)

Въведение към GPU-изчислителна техника, моите си-бележки

Най-важното нещо, за да си спомня за времето на достъп до всеки вид памет. Най-бавно тази глобална памет - от графичния адаптер днес чак до 6GB. Освен това, скоростта е споделена памет (споделено - CUDA, местни - OpenCL) - обща за всички теми, в блока (конец блок - CUDA, работна група - OpenCL) - но това никога не е достатъчно - 32-48 KB за многопроцесорни. Най-бързият е локалната памет в резултат на използването на регистрите и кеш, но трябва да се разбере, че всичко, което не се вписва в кешовете \ регистри - ще се съхраняват в глобалната памет, с всички последици.

Моделите на паралелно програмиране за GPU

Въведение към GPU-изчислителна техника, моите си-бележки

Карта - GPU паралелен модел

Толкова е просто - да вземе сет на въвеждане на данни и се прилагат към всеки елемент от изявление - ядрото - не влияе на останалите елементи - това е, Ние чете и пише на определени места на паметта.

Съотношението - 12:59 (едно-към-едно).

Пример - матрични стъпки умножение оператор или понижавания приложени към всеки елемент на матрицата и т.н.

Въведение към GPU-изчислителна техника, моите си-бележки

Точкова - GPU паралелен модел

За всеки елемент на входния масив, ние изчисляваме позиция в изходния масив, в който ще повлияе (чрез прилагане на съответния оператор).

Отношение - като един към много (един към много).

3. Транспониране

Въведение към GPU-изчислителна техника, моите си-бележки

Транспониране - GPU паралелен модел

Този модел може да се разглежда като специален случай на разсейването модел.
Използва се за оптимизиране на компютри - преразпределение на елементите в паметта, можете да постигнете значително увеличение на производителността.

Въведение към GPU-изчислителна техника, моите си-бележки

Съберете - GPU паралелен модел

Това е обратното на модел на разпръскване - за всеки елемент от изхода масива, ние изчисляваме индексите на елементите на входния масив, който ще окаже влияние върху него:

Отношение - някои за един (много-към-едно).

Въведение към GPU-изчислителна техника, моите си-бележки

Шаблон - GPU паралелен модел

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

Съотношението на няколко една (няколко към един)

Пример: Gaussian филтър.

Въведение към GPU-изчислителна техника, моите си-бележки

Намаляване - GPU паралелен модел

Има ли някой (All-към-едно)

Пример - изчисляване на максималните количества или в масив.

При изчисляването на изходните стойности във всяка клетка на масива е необходимо да се помисли за стойността на всеки вход елемент. Има два основни изпълнение - Хилс и Стийл и Blelloch.

от [Ь] = F [Ь] = оператор (F [I-1] в [Ь])

Съотношението на всички на всички (всички към всички).

Примери за - сортиране на данните.

Полезни връзки

Въведение в CUDA:

Подкрепете проекта - споделете линка, благодаря!