NVIDIA vs AMD: продуктивність GPGPU


105

Мені хотілося б почути від людей із досвідом кодування для обох. Я сам маю досвід роботи з NVIDIA.

NVIDIA CUDA здається набагато популярнішим, ніж конкуренція. (Просто підраховуючи теги запитань на цьому форумі, "cuda" перевершує "opencl" 3: 1, а "nvidia" перевершує "ati" 15: 1, а тег для "ati-stream" взагалі немає).

З іншого боку, згідно з Вікіпедією, картки ATI / AMD повинні мати набагато більший потенціал, особливо за долар. Найшвидша карта NVIDIA на сьогоднішній день, GeForce 580 (500 доларів), оцінюється в 1,6 одноточних TFlops. AMD Radeon 6970 можна придбати за 370 доларів, і він оцінюється в 2,7 TFlops. 580 має 512 одиниці виконання на частоті 772 МГц. У 6970 є 1536 одиниць виконання на частоті 880 МГц.

Наскільки реальною є перевага AMD на паперовому рівні перед NVIDIA, і чи можливо вона буде реалізована в більшості завдань GPGPU? Що відбувається з цілими завданнями?


1
Цікаве запитання, але я не впевнений, що це насправді пов’язано з програмуванням ?
Пол Р

25
Це по суті питання про дві мови програмування та практичні аспекти їх реалізації. Тож я б сказав так.
Євген Сміт

2
Цікаво, наскільки відповідні відповіді на це питання стали у світлі C ++ AMP.
Дмитро Нестерук

2
Одного разу я розглядав, чому видобуток біткойна настільки повільний на апаратному забезпеченні NVIDIA порівняно з AMD. Отриманий потік, "AMD Radeon 3x швидше при видобутку біткойна (SHA-256 хешування продуктивності)", містить інформацію, яка може вам виявитись цікавою. твоє запитання. forums.nvidia.com/…
Роджер Даль

1
Мені здається, це питання або призведе до збору оглядових даних, залежно від того, з якими областями програми знайомі респонденти, яким апаратним та програмним забезпеченням вони користуються тощо; або вичерпна відповідь буде занадто широкою, щоб відповідати формату SO. Голосування про закриття.
njuffa

Відповіді:


79

Метафорично кажучи, ati має хороший двигун порівняно з nvidia. Але nvidia має кращу машину: D

Це здебільшого тому, що nvidia вклала значну кількість своїх ресурсів (у грошах і людях) для розвитку важливих бібліотек, необхідних для наукових обчислень (BLAS, FFT), а потім знову добре просунула її просування. Це може бути причиною того, що CUDA переважає над тегами тут порівняно з ati (або OpenCL)

Що стосується переваги, реалізованої в завданнях GPGPU в цілому, це закінчиться залежно від інших питань (залежно від програми), таких як пропускна здатність передачі пам'яті, хороший компілятор і, мабуть, навіть драйвер. nvidia, що має більш зрілий компілятор, стабільніший драйвер для Linux (тому що Linux використовується широко в наукових обчисленнях), нахиляє баланс на користь CUDA (принаймні поки що).


EDIT 12 січня 2013 року

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

  • AMD активізував їх гру. Зараз у них є бібліотеки BLAS та FFT. Численні сторонні бібліотеки також збираються навколо OpenCL.
  • Intel представила Xeon Phi в дикій природі, підтримуючи і OpenMP, і OpenCL. Він також має можливість використовувати існуючий код x86. як зазначається в коментарях, наразі обмежено x86 без SSE
  • NVIDIA та CUDA все ще мають перевагу в діапазоні наявних бібліотек. Однак вони можуть не зосереджуватися на OpenCL так багато, як раніше.

Коротше кажучи, OpenCL усунула розрив за останні два роки. На полі з’являються нові гравці. Але CUDA все-таки трохи випередила пакет.


4
Xeon Phi має лише обмежені можливості виконання коду x86. Немає MMX / SSE / SSE *.
osgx

@osgx Дякую Я мав це сказати.
Pavan Yalamanchili

1
@osgx Але це добре в DP FP
Csaba Toth

4
Xeon Phi має 512-бітні регістри та інструкції, що в 4 рази більше, ніж підтримує SSE.
зр.

59

Я не маю жодних сильних почуттів щодо CUDA проти OpenCL; імовірно, OpenCL - це довгострокове майбутнє, лише відтінок того, що він є відкритим стандартом.

Але нинішні NVIDIA vs ATI карти для GPGPU (не графічна продуктивність, а GPGPU), про що я маю тверду думку. І для цього я зазначу, що в поточному списку великих 500 кластерів NVIDIA приводить системи AMD 4 до 1, а на gpgpu.org - результати пошуку (документи, посилання на інтернет-ресурси тощо) для NVIDIA перевищує результати для AMD 6: 1.

Величезна частина цієї різниці - кількість доступної інформації в Інтернеті. Ознайомтесь із зоною NVIDIA CUDA порівняно з процесором для розробників GPGPU AMD . Кількість матеріалів для розробників, які починаються, навіть не наближається до порівняння. На сайті NVIDIAs ви знайдете тонни паперів - і внесений код - від людей, які, ймовірно, працюють над такими проблемами, як ваша. Ви знайдете тонни онлайн-класів від NVIDIA та інших країн, а також дуже корисні документи, такі як керівництво з найкращих практик розробників тощо. Наявність безкоштовних інструментів розробки - профайлер, cuda-gdb тощо - надзвичайно нахиляє NVIDIA.

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

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

Я не шил NVIDIA; Я хотів би, щоб це не було так, і щоб було дві (або більше!) Однаково переконливих платформ GPGPU. Конкуренція хороша. Можливо, AMD активізує свою гру дуже скоро - і майбутні продукти злиття виглядають дуже виграшно. Але даючи комусь пораду про те, які картки купити сьогодні, і де витратити свій час, прикладаючи зусилля, зараз я не можу з сумліною сказати, що обидва середовища розвитку однаково хороші.

Відредаговано, щоб додати : Я думаю, що вищезазначене є дещо еліптичним з точки зору відповіді на початкове запитання, тому дозвольте зробити це трохи більш чітким. Продуктивність, яку ви можете отримати від апаратних засобів, в ідеальному світі з нескінченним доступним часом залежить лише від базового обладнання та можливостей мови програмування; але насправді кількість продуктивності, яку ви можете отримати за фіксовану кількість часу, також сильно залежить від інструментів розробки, існуючих баз кодів спільноти (наприклад, загальнодоступних бібліотек тощо). Усі ці міркування всіляко вказують на NVIDIA.

(Редактор: інформація в цьому пункті вже не є точною.) Що стосується обладнання, вимога до векторизації в SIMD-одиницях на картках AMD також робить досягнення продуктивності паперу ще складніше, ніж з обладнанням NVIDIA.


2
Я навчаюсь OpenCL за допомогою ATI Stream, вдячний на замітку про векторизацію :) Хоча я усвідомлюю, що переваги NVIDIA є досить-таки великими, я просто підтримую AMD / ATI та саму компанію і встигаю витратити на створення бібліотек: DI думаю, що продуктивність OpenCL буде безумовно, збільшиться в найближчі роки, і я хотів би, щоб мій код був готовий і до цього.
Гарет Клаборн

Було б цікаво побачити, що ви думаєте про AMD`s GCN та OpenCL 1.2, зараз (2013), що симдс - це минуле. Чиста різниця?
данно

3
@Jonathan минуло 3 роки, як ти написав цей чудовий пост. Мені було цікаво, чи на ваш погляд платформа AMD, спільнота та екосистема закрили прогалину.
basilikode

Не стільки для відео, чи карт GPGPU, а як для самих процесорів, я завжди був прихильником Intel над AMD, однак останнім часом AMD збирається випустити новий процесор ZEN, в якому їх тести на опік показують, що за замовчуванням він порівняний з топ-процесорами i7 від Intel. Їх нова технологія повинна вдосконалюватися тим більше, як вона розпізнає зразки інструкцій. Тому я думаю, що більшість свого часу і сил було витрачено на цей новий процесор, на відміну від їх технологій GPU. Однак, коли їх дзен-процесори випускають, я впевнений, що Intel матиме щось краще.
Френсіс Куглер

17

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

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

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

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


2
Завдяки GCN (Graphics Core Next) AMD відійшла від SIMD та VLIW до архітектури, більш подібної до NVIDIA (SIMT та більш гнучкий графік інструкцій).
Олександр Дубінський

1
@AleksandrDubinsky: І з обладнанням Compute Capability 3.0, NVIDIA переїхала ближче до AMD, видаливши динамічне планування. Я думаю, що їх архітектури зійдуться десь посередині.
Роджер Дал

1
Я чув це раніше, але не зміг знайти конкретної інформації. Де я можу знайти більш детальну інформацію про це?
Яків Галка

7

Я зробив кілька ітеративних кодування в OpenCL. І результати його роботи в NVIDIA та ATI майже однакові. Практично однакова швидкість на картках тієї ж вартості ($).

В обох випадках швидкість становила ~ 10x-30x порівняно з процесором.

Я не перевіряв CUDA, але я сумніваюся, що це могло б вирішити мої проблеми із випадковою пам’яттю магічним шляхом. На сьогоднішній день CUDA і OpenCL є більш-менш однаковими, і я бачу більше майбутнього на OpenCL, ніж на CUDA. Основна причина полягає в тому, що Intel запускає драйвери з OpenCL для своїх процесорів. Це буде величезним прогресом у майбутньому (запуску 16, 32 або 64 потоків OpenCL в процесорі дійсно швидко, і це дуже просто для порту на GPU).


7

Провівши деякий час з OpenCL для GCN-карт після декількох років CUDA для Fermi та Kepler, я все-таки віддаю перевагу CUDA як мову програмування і вибрав би апаратне забезпечення AMD з CUDA, якби у мене була можливість.

Основні відмінності NVIDIA та AMD (OpenCL):

Для AMD:

  • Навіть з Maxwell, NVidia все ще має більш тривалі затримки команд, і складні алгоритми, ймовірно, будуть на 10 швидшими на AMD (якщо вважати однакові теоретичні Tflops) після легкої оптимізації для обох. Розрив становив до 60% для Kepler VS GCN. У цьому сенсі складніше оптимізувати складні ядра для NVidia.

  • Дешеві картки.

  • OpenCL - це відкритий стандарт з іншими постачальниками.

Для Nvidia:

  • Має обладнання обладнання Tesla, яке підходить для надійних високих навантажень сервера.

  • Новий Максвелл набагато ефективніший.

  • Компілятор та інструменти значно вдосконаленіші. AMD все ще не може отримати maxregcoutпараметр реалізації , тому ви можете легко контролювати зайнятість різних апаратних засобів, а їх компілятор має безліч випадкових уявлень про те, що є оптимальним кодом, який змінюється в кожній версії, тому вам може знадобитися переглянути старий код кожну половину на рік, тому що він раптом став на 40% повільніше.

На даний момент, якщо ваша мета - GPGPU, єдиним вибором є CUDA, оскільки opencL з AMD не готовий до ферми серверів і набагато складніше написати ефективний код для AMD через те, що компілятор завжди здається "в бета-версії" .


Дякую за свіжу відповідь. Чи можете ви уточнити, в яких одиницях "швидше на 10 швидше"? Відсоток?
Олександр Дубінський

Особиста думка: Свого часу ATI-картки були в певному сенсі кращими за Nvidia, але не вистачало підтримки оновлення драйверів, і з часом AMD повністю викупила ATI, де Nvidia все ще та сама компанія. Також Nvidia все ще має кращу підтримку драйверів для оновлення. Це більше лежить у споживчому кінці карт для роботи з додатками. Не розумійте мене, обидві технології чудові по-своєму, і обидва мають дешеві дешеві карти, а також більш дорогі карти високого класу. З часом я перейшов від ATI до Nvidia. Що стосується розробки, у Nvidia є набагато кращий набір функцій та програмований API або бібліотека.
Френсіс Куглер

6

Я новачок у GPGPU, але маю певний досвід наукових обчислень (доктор фізичних наук). Я збираю дослідницьку команду і хочу рухатися до використання GPGPU для моїх розрахунків. Мені довелося вибирати між доступними платформами. Я зважився на Nvidia з декількох причин: хоча ATI може бути швидшим на папері, Nvidia має більш зрілу платформу та більше документації, тому можна буде наблизитися до пікових показників на цій платформі.

У Nvidia також є програма підтримки академічних досліджень, можна подати заявку на підтримку, я щойно отримав картку TESLA 2075, від якої я дуже радий. Я не знаю, чи ATI чи Intel підтримують дослідження таким чином.

Що я чув про OpenCL, це те, що він намагається бути всім одночасно. Це правда, що ваш код OpenCL буде більш портативним, але також, ймовірно, не використовуватиме всі можливості будь-якої платформи. Я б краще навчитися трохи більше і писати програми, які краще використовують ресурси. З TESLA K10, який щойно з'явився цього року, Nvidia знаходиться в діапазоні 4,5 TeraFlops, тому не зрозуміло, що Nvidia відстає ... проте MIC Intel можуть виявитись справжніми конкурентами, особливо якщо їм вдасться перенести блок GPGPU на материнська плата. Але поки що я вибрав Nvidia.


Подивіться на відповідь @ AndrewCooke для думки про підтримку NVidia (відсутність).
Олександр Дубінський

5

Мій досвід оцінювання продуктивності OpenCL з плаваючою точкою, як правило, надає перевагу NVIDIA-картам. Я працював з декількома орієнтирами з плаваючою точкою на картах NVIDIA, починаючи від 8600M GT до GTX 460. Карти NVIDIA стабільно досягають приблизно половини теоретичного піку з одноточною точністю на цих орієнтирах.
Карти ATI, з якими я працював, рідко досягають кращої третини піку з одноточністю. Зауважте, що мій досвід ATI перекошений; Я працював лише з однією карткою серії 5000. Мій досвід здебільшого з картами серії HD 4000, які ніколи не були добре підтримані. Підтримка карток серії HD 5000 набагато краща.


1

Я хотів би додати до дебатів. Для нас, що займаються програмним забезпеченням, ми можемо поставити під загрозу одноразову одноточну продуктивність для підвищення продуктивності, але навіть мені не доведеться йти на компроміс, оскільки, як уже зазначалося, ви не можете досягти такої максимальної продуктивності на апаратному забезпеченні ATI, використовуючи OpenCL, як ви можете досягти. якщо ви пишете в CUDA на апараті NVIDIA.

І так, при оголошенні PGI компілятора x86 для CUDA не буде жодної вагомої причини витрачати більше часу та ресурсів на написання у OpenCL :)

PS: Мій аргумент може бути необ’єктивним, оскільки ми майже всю нашу GPGPU працюємо над CUDA. У нас є бібліотека обробки зображень / комп'ютерного зору CUVI (CUDA for Vision and Imaging), яка прискорює деякі основні функціональні можливості IP / CV на CUDA.


0

Cuda, безумовно, популярний, ніж OpenCL на сьогодні, оскільки він був випущений за 3 або 4 роки до OpenCL. З моменту виходу OpenCL, Nvidia не зробила великого внеску в мову, оскільки вони зосередилися на CUDA. Вони навіть не випустили версію openCL 1.2 для жодного драйвера.

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


-2

з мого досвіду:

  • якщо ви хочете досягти найкращої продуктивності, вам слід дізнатися, хто знаходиться на останній ітерації обладнання, і використовувати їх стек (включаючи останні / бета-версії).

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

  • якщо ви починаєте, зокрема, cuda прагне бути більш відшліфованим та має більше інструментів та бібліотек.

нарешті, моє особисте враження, після жахливої ​​«підтримки» від nvidia (у нас з'явилася мертва тесла, і вона не змінювалася місяцями, а клієнт чекав): гнучкість стрибати з корабля з opencl вартує ризику дещо нижчої продуктивності коли nvidia випереджають у циклі випуску.


Аналогічний досвід з "підтримкою" від nvidia: збій libcuda.so(лише з OpenCL, CUDA працює) і жодної відповіді від них.
eudoxos

1
З нашим дилером у нас немає проблем із заміною загиблих tesla, зазвичай ми отримуємо нове обладнання перед тим, як надіслати несправне, так що я думаю, це не проблема NVidia, а ваша дилера.
Гаетано Мендола

Я думав, що Tesla є надмірно надійним. Що маркетинговий фуд.
Олександр Дубінський

OpenCL не є портативним для продуктивності, тому неможливо виконувати перехід кожного разу, коли одна компанія випускає новий флагман (без підтримки двох оптимізованих гілок коду). Крім того, підтримка OpenCL NVIDIA має декілька версій, і, підозрюю, погано підтримується.
Олександр Дубінський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.