Конференція Високопродуктивні обчислення, Київ, 13-15 жовтня 2014

Топ 10 причин проти обчислень на GPU

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

Обчислення на GPU мають усі ознаки революційної технології. Все почалось з невеликої групи однодумців, готових кинути виклик складній задачі з перетворення графічних мов програмування типу Cg або GLSL у мови, придатні для виконання обчислень загального призначення.

У HPC з’явився новий потужний гравець, який почав підтримувати такі починання. Ці мови дали непересічні, на порядок більші прискорення у порівнянні зі звичайними методами, у більшій кількості випадків, ніж спочатку прогнозувалось.

Наближаючись до чотирирічного релізу NVidia CUDA, який дехто називає відправною точкою ідеології GPGPU обчислень, бачимо що є безліч людей, які пробували або активно застосовують ці технології, але так само є багато спеціалістів, які з різних причин залишаються осторонь.

У нашій роботі ми часто перетинаємось з другим типом, що змусило нас зібрати докупи найбільш загальні питання, проблеми та твердження, які є джерелом упередженості до обчислень на GPU.

Нижче ми спробуємо викласти ці заперечення, переглянути їх у світлі нових досягнень і нашого розуміння майбутнього розвитку цієї галузі. Чесно кажучи, технології GPGPU не є універсальним рішенням усіх задач в сфері HPC, але багато хто вважає їх застосування економічно доцільним у сферах сейсмології, електромагнетизму, молекулярної динаміки, фінансової математики, медичних дослідженнях тощо.

1. Я не хочу переписувати свій код на новій мові

Так, це правда, вам доведеться переписати ваш код, щоб використовувати прискорювач. Однак, якщо ви розробляєте паралельну програму на CPU з майже послідовного коду, переписування все одно не уникнути. Єдине питання – яка ваша цільова платформа.

Орієнтуючись на багатоядерні процесори, необхідно будувати тришарову модель з паралелізмом на рівнях процесів, потоків та регістрів, де задіються MPI, OpenMP та SSE/AVX розширення. Програмування на GPU з використанням CUDA вже не є таким складним, а переваги можуть бути значними.

Якщо у вас вже є паралельний код, які переваги ви отримаєте від переходу на GPU? Грубою оцінкою буде прискорення від 5 до 40 разів. Такі цифри вважаються загальноприйнятими, їх можна побачити у багатьох статтях про обчислення на GPU. Рівень прискорення залишається приблизно сталим протягом останніх кількох років, не зважаючи на зміни двох поколінь продукції Intel та NVidia.

CUDA є розширенням мови C, досвідчені програмісти з легкістю її засвоюють. Модель паралельного програмування екзафлопсних масштабів ще остаточно не зафіксовано. Однак, можна сподіватись, що вона швидше за все виглядатиме як паралельна обробка даних на CUDA, а не як паралельна обробка на CPU.

У статтях на HPCwire висловлювались переконання, що CUDA, змушуючи розробників розглядати найменший рівень паралелізму в своїх задачах та передавати їх до потоків, є кращою моделлю програмування масштабованого паралелізму, та природніше розширюється на кілька GPU в одному чи кількох вузлах.

Певні кроки у цьому напрямку вже зроблено в рамках академічних проектів на кшталт Global Memory for Accelerators (GMAC), який розробляється Політехнічним університетом Каталонії спільно з дослідницькою групою IMPACT з Університету Іллінойсу, та комерційних, зокрема інтерфейс HUESPACE, запропонований компанією з Осло HUE та її партнером Headwave, яка спеціалізується на дослідженнях у сфері нафти та газу.

2. Я не знаю, якого типу продуктивність я отримаю

У сфері HPC загальна продуктивність коду залежить від швидкості обчислень та швидкістю роботи з пам’яттю. Для частин коду з інтенсивними обчисленнями порівняємо прискорювачі NVidia Fermi M2090 та процесор Intel Westmere.

Fermi має 512 ядер з частотою 1,3 ГГц, а Westmere має лише 6 ядер з частотою 3,4 ГГц. Арифметичне відношення відповідних добутків ядер на герци дає 32. Якщо код для CPU ефективно використовує SSE інструкції, це може пришвидшити його до чотирьох разів, що зменшує перевагу GPU до числа 8 (що є близьким до відношення пікових продуктивностей).

Якщо порівнювати швидкість роботи з пам’яттю, маємо перевагу GPU з пропускною здатністю 177 Гб/с проти 32 Гб/сек у материнської плати, що у 5,5 разів менше. Отже, якщо ваша програма виконує інтенсивні обчислення, ви можете очікувати прискорення від 5 для добре оптимізованого під SSE коду до 20 або навіть більше разів для інших випадків. Якщо ваша програма виконує інтенсивні обміни даних у пам’яті, можна очікувати п’ятикратне збільшення продуктивності.

Дуже зручно мати такий приблизний розрахунок, якщо дивитись на проблему переходу на GPU з точки зору питомої вартості ресурсів. Якщо ваш код працює з пам’яттю, необхідно вибрати найдешевший спосіб збільшення її пропускної здатності. Можна придбати ще один GPU прискорювач, що дасть  приріст пропускної здатності приблизно за 15 дол. за 1 Гб/с. Або можна придбати ще один вузол при номінальній вартості приблизно за 80 дол. за 1 Гб/с. В другому випадку також збільшується споживання енергії.

Для інтенсивних обчислень можна провести аналогічні розрахунки відносно питомої вартості гігафлопса. Для змішаних типів програм, які, насправді, є більшістю, GPU краще впорається з затримками при роботі з пам’яттю, завдяки чому покращаться частини програми, які виконують інтенсивні обчислення.

3. Пропускна здатність шини PCIe зведе нанівець переваги GPU

Аргументація проти обчислень на GPU через шину PCIe полягає у інтенсивності обчислень. Інтенсивність обчислень визначається різними способами, але для нашої мети покладемо її рівною кількості арифметичних операцій, які виконуються над кожною часткою даних, які передаються. Існує деякий поріг кількості та тривалості операцій, які має виконувати прискорювач над кожним байтом даних, щоб існував смисл передавати їх прискорювачу.

Пояснимо на прикладі. Пропускна здатність шини PCIe v2.0 x16 на практиці дорівнює 6 ГБ/с. Теоретично можна заповнити всі 6 ГБ пам’яті прискорювача M2090 приблизно за секунду. При піковій продуктивності у 665 ГФлопс на операціях з подвійною точністю цей обчислювальний монстр дійсно може провести велику кількість обчислень за ту секунду, поки відбувається заповнення пам’яті.

Якщо ви вимагаєте, щоб час передачі даних шиною складав не більше 10% часу обчислень, плата M2090 повинна виконувати тисячі операцій над тими даними, які зберігаються в її пам’яті. Алгоритми GPU повинні намагатись зберігати дані якомога довше.

На додачу CUDA дозволяє одночасну асинхронну передачу даних шиною та їх обробку. Розумне використання цієї властивості дозволяє розробникам нівелювати вплив часу передачі за допомогою порядку обчислень. Алгоритми, які добре працюють, включають різницеві схеми, такі як FDTD, або класичні алгоритми молекулярної динаміки, з великим відсотком повторного використання даних та результатів обчислень та високою обчислювальною інтенсивністю.

Алгоритмами, які мають слабку ефективність на GPU, є, наприклад, просте множення векторів. Якщо задача обчислюється на багатьох прискорювачах, доцільніше мінімізувати передачі даних, наприклад, надсилати тільки крайові умови задач замість повної передачі внутрішніх значень.

4. А як же закон Амдала?

Закон Амдала чисельно виражає факт того, що у випадку прискорення великого послідовного коду будь-якими методами, чи то паралелізацією, чи то чорною магією, вам необхідно прискорювати значну частину коду, інакше ви не помітите різниці. Закон Амдала часто виставляють наперед, як талісман проти будь-якого припущення, що код можна поліпшити за допомогою розпаралелювання.

Уявіть, наприклад, що ви змогли зменшити час роботи частини вашого послідовного коду до нуля. Якщо ця частина коду виконувалась 50% загального часу, тоді ваше загальне прискорення складе 2 рази; якщо ця частина виконувалась 90% часу – тоді є десятикратне прискорення. Для практичних даних прискорення, звісно, буде меншим.

Найкращим контраргументом проти закону Амдала для GPU обчислень є зауваження, що продуктивність на сучасних архітектурах вимагає, щоб усі програми були написані для масового паралелізму, а послідовні частини були зменшені до мінімуму. Іншого виходу просто немає. Це однаково справедливо для CPU та GPU платформ.

Усі існуючі високопродуктивні обчислювальні платформи намагаються стати масивно паралельними, закон Амдала виконується досить добре для реалізацій на CPU. Єдиним можливим питанням є – де ви збираєтесь виконувати паралельну частину коду: на CPU чи на GPU?

5. Що буде, якщо NVidia піде з ринку?

Історія HPC усіяна трупами багатьох суперкомп’ютерних компаній, які намагались зробити величезний крок до паралельних обчислень. Згадаємо лише Thinking Machines, Maspar, KSR, Mitrion тощо. Треба віддати належне цим, часто героїчним, зусиллям та людям, які їх робили, за їх бачення та роль, яку вони зіграли у творчому протистоянні, що зрештою призвело до великого колективного розуміння паралельних технологій. Ми завдячуємо їм.

З іншого боку, NVidia – не суперкомп’ютерна компанія. Це корпорація вартістю 5 млрд. дол., яка отримує більшість прибутків від відеокарт та вбудованих процесорів, які вона продає величезному жадібному ринку комп’ютерних ігор.

Ця відносна незалежність від HPC є перевагою компанії, і, якщо раптом використання GPU у сфері HPC припиниться, NVidia й далі матиме прибутковий бізнес. Поки на світі існують підлітки-ігромани, які жадають грати у віртуальні війни, NVidia буде на плаву. Позиція на ринку та безхмарне майбутнє компанії NVidia є беззаперечним фактом, якщо її порівнювати, наприклад, з символом високопродуктивних обчислень компанією Cray.

Крім того, NVidia опублікувала власне бачення та дорожню карту розвитку технологій приблизно на 6 років наперед. Якщо уважно читати між рядків, можна помітити агресивні амбіції компанії з перетворювання GPU прискорювачів з допоміжного пристрою, який зараз існує на окремій платі, на центральний об’єкт комп’ютерної інфраструктури. А ще вони планують нові потужні обчислювачі.

6. На GPU карті недостатньо пам’яті для моєї задачі

Зараз на GPU прискорювачах є максимум 6 ГБ пам’яті (M2070 та M2090). Це дійсно може стати проблемою для алгоритмів, які вимагають наявності у пам’яті великих шматків даних. Цю проблему можна частково розв’язати шляхом розподілу даних між кількома GPU всередині одного вузла.

Dell C410x

Наприклад, у корпус Dell C410x поміщається до 16 карт NVidia, що разом дає 96 ГБ пам’яті. Розбиття області обчислень на частини дозволяє ефективно використати всі 16 обчислювачів та обійти обмеження обсягів пам’яті. Для задач локальної фізики обчислюються об’ємні дані, а передаються дані на поверхнях.

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

7. Я чекаю на CPU з більшою кількістю ядер (Knights Corner)

Більше ядер – більша швидкість інтенсивних обчислень, однак не слід забувати, що те саме справедливо для GPU. Порівнюючи дорожні карти за останні два покоління технологій, бачимо постійний розрив у продуктивності та пропускній здатності CPU та GPU, який час від часу збільшується чи зменшується, але завжди більший за нуль.

Очікується, що ситуація буде незмінною і у майбутньому. Для задач, де пропускна здатність важливіша, ситуація дещо гірша, оскільки збільшити кількість ядер простіше, аніж збільшити пропускну здатність.

Intel Knights Corner

Плани Intel відносно Knights Corner, опубліковані як раз рік тому, віддають належне необхідності створення для GPU суперника для паралельної обробки даних на технологіях x86.

Всі подробиці про Knights Corner досі невідомі, однак, беручи за основу специфікації його прототипу Knights Ferry, ми можемо очікувати 50 або більше ядер з частотою 1,2 ГГц, кожне з яких здатне обчислювати вектори довжиною 512 біт у чотири потоки, що робить його грізним конкурентом у сфері HPC. Однак плани Intel відносно розробки, цін, дати виходу та інша важлива інформація, як мінімум, не до кінця зрозуміла та відома на даний момент.

Щоб технологія Knights Corner стала успішною, їй необхідно відповідати вимогам роздрібного ринку, завдяки якому архітектура x86 домінує в HPC. Intel повинна знайти великий ринок поза межами закритого світу комп’ютерних вчених. Комп’ютерна графіка є одним з прийнятних варіантів цього ширшого ринку, але він вже добре захоплений компаніями NVidia та AMD.

8. Я не люблю патентованих мов програмування

Тут мається на увазі, що патентовані мови – це мови, які розробляються однією компанією, яка може направити розробку в невідомий або небажаний бік або зовсім припинити її. CUDA потрапляє у цю категорію мов. Переваги використання CUDA досить очевидні: вона підтримує апаратні оптимізації NVidia, жодних комісій з розробки майбутніх планів, швидка підтримка нових особливостей плат NVidia.

А якщо патентовані мови категорично вам не підходять, можна обрати мову OpenCL у якості непоганої заміни. OpenCL підтримується компаніями Apple, NVidia, AMD, Intel тощо. Вона забезпечує можливість переходу на різні апаратні засоби. Серед недоліків є певне відставання продуктивності. Ядро OpenCL схоже на ядро CUDA, з деякими відмінностями у способі завантаження та запуску коду.

9. Я чекаю на магічний конвертер коду з CPU на GPU

У мене для вас і погані, і хороші новини. Хороша новина – такі конвертери вже існують. Погана – малоймовірно, що результат конвертації буде настільки ефективною програмою як та, яку переписав досвідчений програміст. Я не маю досвіду конвертації та зв’язків з компаніями, які виконують значні обсяги подібної роботи, тому мої дані можуть бути не настільки надійними.

10. У мене N кодів і один бюджет на розробку

Простіше сказати, це дилема: або докласти максимуму зусиль, або зовсім не займатись. Для більшості організацій з фіксованим бюджетом на IT постає проблема: придбати кілька потужних вузлів з GPU або багато звичайних на CPU.

Є випадки, коли має сенс використовувати всі GPU або всі CPU вузли. Це особливо вірно для фірм, які працюють на конкурентному ринку обчислень, використовуючи свої обчислювальні потужності 24 години на добу. Розділення ІТ інфраструктури ускладнює планування задач і, в найгіршому випадку, вимагає подвоєння всього: скриптів керування кластером, планувальника, компіляторів, тестування та перевірки, програмних кодів тощо.

Адаптація технологій у великих комерційних організаціях повинна проводитись з пильною увагою до відносної вигоди. Принцип «або максимум, або не берись» виражає увагу, яку розумні, виважені організації приділяють цій складній проблемі, намагаючись визначити відомі витрати та спрогнозувати невідомі при зміні технології. Останній пункт, як і попередні дев’ять, певним чином стосується інвестицій (розробка коду, навчання персоналу, нові апаратні засоби) або прибутку (продуктивність, масштабованість, потужність).

Кожна компанія має вивести своє рівняння прибуток-інвестиції з острахом та тремтінням, здоровою повагою до труднощів, з якими доведеться стикнутись. Згідно традиційного фінансового аналізу, вкладення капіталу повинно приносити прибуток акціонерам, сумірний зі зваженою вартістю компанії, та має бути зрівнянним з іншими інвестиційними можливостями, якими володіє підприємство в своїй області знань.

У підсумку, за останні чотири роки обчислення на GPU наполегливо поширюються у сфері HPC, помітно адаптуючись до її потреб.

Десять перешкод, перерахованих вище, найбільш часто висловлюються окремими спеціалістами та компаніями. Ми намагались знайти аргументи на кожну з них. Як зазначалось на початку, технології GPGPU не є розв’язками всіх задач у HPC, але організації, з різних помилкових причин ігноруючи ці технології, можуть недотримувати значне прискорення продуктивності та упускати економічну вигоду.

Насамкінець, компанії не повинні робити крок до обчислення на GPU лише тому, що такі технології модні або популярні цього року. Навпаки, це має бути розсудлива стратегія, яка дає економічний ефект, та є найкращим рішенням з огляду на майбутній розвиток архітектури, програмної моделі та потужностей, які ведуть нас до екзафлопсних обчислень.

Доктор Вінсент Натолі, Stone Ridge Technology

Теги: CPU, CUDA, GPU, HPC, Intel, NVidia, високопродуктивні обчислення, графічні прискорювачі, екзафлопс, паралельні обчислення

Матеріали за темою:

Коментарі

Коментарі до "Топ 10 причин проти обчислень на GPU":

Дякую за корисну аналітику і цікаво, що цього року "заспіває" Intel на HPC DAY-2012

Іван17.09.2012

До перешкод можна ще додати, що технологія ця відносно нова. Як наслідок швидкого розвитку: прискорювачі трьох- чотирьох-річної давнини вже нікому не цікаві. Центральні процесори, звичайно, теж з кожним поколінням змінюються, але не так швидко. Коли у науковця чи інженера один-два прискорювача у робочій станції, це не проблема їх модернізувати. Але коли будується великий кластер, то змінювати його кожні три роки - це досить дорого. На противагу, старі кластери на основі центральних процесорів можуть успішно працювати набагато довше, практично до фізичного зношення вузлів.