536.91K

Застосування технології CUDA для неграфічних обчислень

1.

Застосування
технології CUDA
для неграфічних
обчислень
Виконав: студент групи ПА-18-3
Чорний Максим
Керівник:
Дзюба П. А.

2.

АКТУАЛЬНІСТЬ ТЕМИ ТА ПРОБЛЕМА
ДОСЛІДЖЕННЯ
• ДЛЯ
ПРИСКОРЕННЯ
РОЗРАХУНКІВ
В
ОСТАННІ
РОКИ
АКТИВНО
ВІДБУВАЄТЬСЯ
ПЕРЕХІД
ВІД
ПОСЛІДОВНИХ
ДО
ПАРАЛЕЛЬНИХ
РОЗРАХУНКІВ, НЕВАЖЛИВО ЦЕ ЧИ CPU, АБО GPU, ОСКІЛЬКИ З КОЖНИМ
РОКОМ СТАЄ ВСЕ ВАЖЧЕ ДОДАВАТИ НОВІ ЯДРА. РАНІШЕ ПРО
ПАРАЛЕЛЬНІСТЬ МОЖНА БУЛО ЛИШЕ МРІЯТИ, АДЖЕ CPU БУВ
ОДНОЯДЕРНИМ ТА ОДНИМ ПРОЦЕСОРОМ В СИСТЕМІ , А GPU, ЯКИЙ
З'ЯВИВСЯ ТРОХИ ПІЗНІШЕ,
ВІДПОВІДАВ ЗА
ВІДРИСОВКУ РОБОЧОГО
СТОЛУ ТА БУВ ДРУГОРЯДНИМ КУСКОМ ТЕКСТОЛІТУ, ЯКИЙ НЕ БУВ
ОБОВ'ЯЗКОВИМ, АЛЕ СЬОГОДНІ ЦЕ ПОВНОЦІННИЙ КОМП'ЮТЕР ЗІ СВОЄЮ
ПАМ 'ЯТТЮ, ЯДРАМИ ТА ЛОГІКОЮ ОБРОБКИ СИГНАЛІВ.

3.

ОБ'ЄКТОМ
МОГО ДОСЛІДЖЕННЯ Є ПРОГРАМНО-АПАРАТНА
ТЕХНОЛОГІЯ CUDA КОМПАНІЇ NVIDIA

4.

МЕТА МОГО ДОСЛІДЖЕННЯ: З'ЯСУВАТИ ЩО
СОБОЮ ЯВЛЯЄ ТЕХНОЛОГІЯ CUDA, ДЛЯ ЯКИХ
ТИПІВ ЗАВДАНЬ ЇЇ МОЖНА ВИКОРИСТАТИ, ЯКІ Є
ПЕРЕВАГИ ТА НЕДОЛІКИ ЇЇ ВИКОРИСТАННЯ,
НАСКІЛЬКИ АКТУАЛЬНО ЇЇ
ВИКОРИСТОВУВАТИ ТА ДЛЯ ЯКИХ ЗАВДАНЬ
ВОНА ВИКОРИСТОВУЄТЬСЯ

5.

ЩО ТАКЕ CUDA ЯДРА
В ВІДЕОКАРТІ
CUDA-архітектура - це така форма організації
внутрішнього устрою ядер в відеокарті. ЇЇ
метою є ефективні паралельні
обчислення. Одне ядро CUDA,
АЛП, аналогічно процесорного, з тією лише
різницею, що воно простіше за своєю
структурою, проте їх кількість дуже велика.
Типовий процесор має від 2 до 16 ядер, а
ядер CUDA в відеокарті - сотні, навіть в
бюджетних відеокартах Nvidia. А
високопродуктивні рішення і зовсім
налічують тисячі. Більш детальне
порівняння CPU та GPU можна знайти на
стор. 6-7

6.

ПРИКЛАД, ДОДАВАННЯ ДВОХ ВЕКТОРІВ, ДЛЯ
ПОРІВНЯННЯ ОБЧИСЛЕННЯ НА CPU ТА GPU «З
КОРОБКИ»
«Класичний» варіант
функції:
void add(int* a, int* b, int* c)
{
int tid = 0;
while (tid < N) {
c[tid] = a[tid] + b[tid];
tid += 1;
}
}
Функція з використанням
CUDA :
__global__ void add(int* a,
int* b, int* c) {
int tid = blockIdx.x;
if (tid < N)
c[tid] = a[tid] + b[tid];
}
Як в могли помітити, функція з використанням CUDA не
містить лічильника, але містить int tid = blockIdx.x;
blockIdx це змінна, яку нам надає виконуючу середовище
CUDA, вона містить індекс блока пристрою в якому
виконується поточний код, більш детально на сторінці 10.

7.

РЕЗУЛЬТАТИ
Як видно з рисунку, ми вже
отримали приріст в
обчисленнях приблизно у 10
разів. Це пов'язано з
особливостями відеокарт
та CUDA-архітектурою.

8.

ГЛОБАЛЬНА ТА ТЕКСТУРНА ПАМ'ЯТЬ
Глобальна пам’ять
• У документації CUDA в якості одного з основних досягнень технології
наводиться можливість довільної адресації глобальної пам'яті. Тобто
можна читати з будь-якої комірки пам'яті, і писати можна теж в довільну
клітинку, однак за універсальність в даному випадку доводиться
розплачуватися швидкістю.
Текстурна пам’ять
• Це один з видів пам’яті, який призначений тільки для читання та дозволяє
підвищити продуктивність та скоротити трафік між процесором та пам’яттю
при певних способах доступу. Як і константна пам’ять, текстурна кешується
на кристалі, якщо бути точним текстурні кеші призначені для графічних
застосувань, в яких доступ пам’яті характеризується високою транспортною
локальністю, більш детально на стор. 16

9.

МОДЕЛЬ ТЕПЛООБМІНУ
В моїй моделі теплообміну я розглядаю кімнату, яку умовно ділю на
квадрати, та розставляю нагрівачі різної температури.
В якості кімнати я буду використовувати Bitmap, детальніше на
сторінці 20. Завдяки її властивості самооновлення я буду відображати
анімацію. Грубо кажучи в мене буде масив, який буде оновлюватися
за моїми законами, детальніше сторінці 21.
Оновлення
температур я буду
здійснювати шляхом
додавання до
поточної
температури різниці
температур сусідніх
та поточною комірок

10.

РЕЗУЛЬТАТИ ОДНОГО З МОЇХ
МОДЕЛЮВАНЬ

11.

ВИСНОВКИ
• Популярність та актуальність програмної частини CUDA
• Чи варто нам використовувати програмну частину CUDA?
English     Русский Правила