NVIDIA vs AMD: wydajność GPGPU

105

Chciałbym usłyszeć od ludzi z doświadczeniem w kodowaniu dla obu. Ja mam doświadczenie tylko z NVIDIA.

NVIDIA CUDA wydaje się być dużo bardziej popularna niż konkurencja. (Licząc tylko tagi pytań na tym forum, „cuda” przewyższa „opencl” 3: 1, a „nvidia” przewyższa „ati” 15: 1 i nie ma żadnego tagu dla „ati-stream”).

Z drugiej strony, według Wikipedii, karty ATI / AMD powinny mieć dużo większy potencjał, zwłaszcza w przeliczeniu na dolara. Najszybsza obecnie karta NVIDIA na rynku, GeForce 580 (500 USD), ma wycenę na 1,6 jednoprecyzyjnego TFlopsa. AMD Radeon 6970 można kupić za 370 USD i wycenić na 2,7 TFlops. 580 ma 512 jednostek wykonawczych przy 772 MHz. 6970 ma 1536 jednostek wykonawczych przy 880 MHz.

Jak realistyczna jest ta papierowa przewaga AMD nad NVIDIA i czy jest prawdopodobne, że będzie ona realizowana w większości zadań GPGPU? Co dzieje się z zadaniami na liczbach całkowitych?

Eugene Smith
źródło
1
Ciekawe pytanie, ale nie jestem pewien, czy jest to naprawdę związane z programowaniem ?
Paul R,
25
W istocie chodzi o dwa języki programowania i praktyczne aspekty ich implementacji. Więc powiedziałbym tak.
Eugene Smith,
2
Zastanawiam się, jak trafne stały się odpowiedzi na to pytanie w świetle C ++ AMP.
Dmitri Nesteruk
2
W pewnym momencie zastanawiałem się, dlaczego wydobywanie bitcoinów jest tak powolne na sprzęcie NVIDIA w porównaniu z AMD. Wynikowy wątek, „AMD Radeon 3x szybszy w wydobywaniu bitcoinów (wydajność mieszania SHA-256)”, zawiera informacje, które mogą Cię zainteresować. Twoje pytanie. forums.nvidia.com/…
Roger Dahl
1
Wydaje mi się, że to pytanie zaowocuje zebraniem opinii, w zależności od obszarów zastosowań, które respondenci znają, jakiego sprzętu i oprogramowania używają itp. lub wyczerpująca odpowiedź będzie zbyt szeroka, aby pasowała do formatu SO. Głosowanie za zamknięciem.
njuffa

Odpowiedzi:

79

Mówiąc metaforycznie, ati ma dobry silnik w porównaniu do nvidii. Ale nvidia ma lepszy samochód: D

Dzieje się tak głównie dlatego, że nvidia zainwestowała sporą ilość swoich zasobów (w pieniądze i ludzi) w rozwój ważnych bibliotek wymaganych do obliczeń naukowych (BLAS, FFT), a następnie ponownie wykonała dobrą robotę w jej promowaniu. To może być powód, dla którego CUDA dominuje w tagach w porównaniu z ati (lub OpenCL)

Jeśli chodzi o korzyści realizowane w zadaniach GPGPU w ogóle, to ostatecznie zależałoby to od innych problemów (w zależności od aplikacji), takich jak przepustowość transferu pamięci, dobry kompilator i prawdopodobnie nawet sterownik. nvidia mając bardziej dojrzały kompilator, bardziej stabilny sterownik na Linuksie (linux, ponieważ jego użycie jest szeroko rozpowszechnione w obliczeniach naukowych), przechyla równowagę na korzyść CUDA (przynajmniej na razie).


EDYCJA 12 stycznia 2013 r

Minęły dwa lata, odkąd stworzyłem ten post, a czasami wciąż wydaje się przyciągać opinie. Postanowiłem więc wyjaśnić kilka rzeczy

  • AMD zintensyfikowało swoją grę. Mają teraz biblioteki BLAS i FFT. Wokół OpenCL pojawiają się również liczne biblioteki innych firm.
  • Firma Intel wprowadziła na rynek Xeon Phi, obsługując zarówno OpenMP, jak i OpenCL. Ma również możliwość korzystania z istniejącego kodu x86. jak zauważono w komentarzach, na razie ograniczona x86 bez SSE
  • NVIDIA i CUDA nadal mają przewagę w zakresie dostępnych bibliotek. Jednak mogą nie skupiać się na OpenCL tak bardzo, jak wcześniej.

Krótko mówiąc, OpenCL wypełnił lukę w ciągu ostatnich dwóch lat. Na polu pojawiają się nowi gracze. Ale CUDA wciąż nieco wyprzedza konkurencję.

Pavan Yalamanchili
źródło
4
Xeon Phi ma ograniczone możliwości wykonywania kodu x86. Brak MMX / SSE / SSE *.
osgx
@osgx Thanks. Powinienem był o tym wspomnieć.
Pavan Yalamanchili
1
@osgx Ale radzi sobie dobrze w DP FP
Csaba Toth
4
Xeon Phi ma 512-bitowe rejestry i instrukcje, czyli 4x więcej niż obsługuje SSE.
zr.
59

Nie mam żadnych silnych uczuć co do CUDA kontra OpenCL; przypuszczalnie OpenCL to długoterminowa przyszłość, tylko dlatego, że jest otwartym standardem.

Ale dzisiejsze karty NVIDIA vs ATI dla GPGPU (nie wydajność grafiki, ale GPGPU), o których mam mocną opinię. Aby do tego doprowadzić, wskażę , że na aktualnej liście Top 500 dużych klastrów , NVIDIA prowadzi systemy AMD 4 do 1, a na gpgpu.org wyniki wyszukiwania (artykuły, linki do zasobów internetowych itp.) Dla NVIDIA wyniki liczebne dla AMD 6: 1.

Ogromną częścią tej różnicy jest ilość dostępnych informacji online. Sprawdź NVIDIA CUDA Zone i AMD GPGPU Developer Central . Ilość rzeczy dla początkujących programistów nie jest nawet bliska porównania. Na stronie NVIDIA znajdziesz tony dokumentów - i dodany kod - od osób prawdopodobnie pracujących nad problemami takimi jak Twój. Znajdziesz mnóstwo zajęć online, pochodzących od firmy NVIDIA i nie tylko, oraz bardzo przydatnych dokumentów, takich jak przewodnik po najlepszych praktykach dla programistów, itp. Dostępność bezpłatnych narzędzi programistycznych - profiler, cuda-gdb, itp. - w przeważającej mierze zmienia sposób NVIDIA.

(Redaktor: informacje w tym akapicie nie są już dokładne). Część różnicy dotyczy również sprzętu. Karty AMD mają lepsze specyfikacje pod względem szczytowych flopów, ale aby móc uzyskać znaczną ich część, musisz nie tylko rozbić swój problem na wiele całkowicie niezależnych procesorów strumieniowych, ale także każdy element pracy musi zostać wektoryzowany. Biorąc pod uwagę, że kod GPGPU jest wystarczająco trudny, ta dodatkowa złożoność architektoniczna wystarczy, aby wykonać lub zepsuć niektóre projekty.

Rezultatem tego wszystkiego jest ciągły wzrost społeczności użytkowników NVIDIA. Z trzech lub czterech grup, które znam, myślących o budowaniu klastrów GPU, żadna z nich nie rozważa poważnie kart AMD. A to będzie oznaczać jeszcze więcej grup piszących artykuły, wnoszących kod itp. Po stronie NVIDII.

Nie jestem sztyletem firmy NVIDIA; Chciałbym, żeby tak nie było i żeby istniały dwie (lub więcej!) Równie atrakcyjne platformy GPGPU. Konkurencja jest dobra. Być może AMD wkrótce przyspieszy swoją grę - a nadchodzące produkty fusion wyglądają bardzo atrakcyjnie. Ale dając komuś radę, które karty kupić dzisiaj i gdzie spędzić czas, wkładając teraz wysiłek, nie mogę z czystym sumieniem powiedzieć, że oba środowiska programistyczne są równie dobre.

Zredagowano, by dodać : Wydaje mi się, że powyższe jest trochę eliptyczne, jeśli chodzi o odpowiedź na pierwotne pytanie, więc pozwólcie, że wyjaśnię to nieco. Wydajność, jaką można uzyskać z części sprzętu, w idealnym świecie z dostępnym nieskończonym czasem zależy tylko od sprzętu bazowego i możliwości języka programowania; ale w rzeczywistości ilość wydajności, jaką można uzyskać w określonej ilości zainwestowanego czasu, jest również silnie uzależniona od narzędzi programistycznych, istniejących baz kodu społeczności (np. publicznie dostępnych bibliotek itp.). Wszystkie te rozważania silnie wskazują na firmę NVIDIA.

(Redaktor: informacje w tym akapicie nie są już dokładne). Jeśli chodzi o sprzęt, wymóg wektoryzacji w jednostkach SIMD w kartach AMD również sprawia, że ​​osiągnięcie wydajności papieru jest jeszcze trudniejsze niż w przypadku sprzętu NVIDIA.

Jonathan Dursi
źródło
2
Uczę się OpenCL używając ATI Stream, doceniam uwagę na temat wektoryzacji :) Chociaż zdaję sobie sprawę, że korzyści NVIDIA są ... całkiem duże, po prostu obsługuję AMD / ATI i samą firmę i mam czas na tworzenie bibliotek: D Myślę, że wydajność OpenCL będzie zdecydowanie wzrośnie w nadchodzących latach i chciałbym, aby mój kod również był na to gotowy.
Garet Claborn
Byłoby interesujące zobaczyć, co myślisz o GCN AMD i OpenCL 1.2, teraz (2013), kiedy simds to już przeszłość. Jakaś różnica netto?
Danno
3
@Jonathan, minęły już 3 lata, odkąd napisałeś ten wspaniały post. Zastanawiałem się, czy Twoim zdaniem platforma, społeczność i ekosystem AMD wypełniły tę lukę.
basilikode
Nie tyle jeśli chodzi o karty wideo czy GPGPU, ile o same procesory, zawsze byłem fanem Intela zamiast AMD, jednak ostatnio AMD ma zamiar wypuścić nowy procesor ZEN, w którym testy wypalenia pokazują, że przy ustawieniach domyślnych jest porównywalny z topowymi procesorami Intela i7. Ich nowa technologia ma się poprawiać, im bardziej działa, ponieważ rozpoznaje wzorce instrukcji. Myślę więc, że większość czasu i wysiłku poświęcili na ten nowy procesor, w przeciwieństwie do technologii GPU. Jednak kiedy pojawią się ich procesory Zen, jestem pewien, że Intel będzie miał coś lepszego.
Francis Cugler,
17

Główna różnica między architekturami AMD i NVIDIA polega na tym, że AMD jest zoptymalizowane pod kątem problemów, w których zachowanie algorytmu można określić w czasie kompilacji, podczas gdy NVIDIA jest zoptymalizowana pod kątem problemów, w których zachowanie algorytmu można określić tylko w czasie wykonywania.

AMD ma stosunkowo prostą architekturę, która pozwala im spędzać więcej tranzystorów na jednostkach ALU. Tak długo, jak problem można w pełni zdefiniować w czasie kompilacji i pomyślnie odwzorować na architekturę w nieco statyczny lub liniowy sposób, istnieje duża szansa, że ​​AMD będzie w stanie uruchomić algorytm szybciej niż NVIDIA.

Z drugiej strony kompilator firmy NVIDIA wykonuje mniej analiz w czasie kompilacji. Zamiast tego NVIDIA ma bardziej zaawansowaną architekturę, w której spędzili więcej tranzystorów na logice, która jest w stanie obsłużyć dynamiczne zachowanie algorytmu, które pojawia się tylko w czasie wykonywania.

Uważam, że faktem, że większość superkomputerów korzystających z procesorów graficznych współpracuje z NVIDIA jest ten rodzaj problemu, na którym naukowcy są zainteresowani przeprowadzaniem obliczeń, generalnie lepiej odwzorowując architekturę NVIDII niż AMD.

Roger Dahl
źródło
2
Dzięki GCN (Graphics Core Next) AMD odeszło od SIMD i VLIW na rzecz architektury bardziej podobnej do NVIDIA (SIMT i bardziej elastyczne planowanie instrukcji).
Aleksandr Dubinsky
1
@AleksandrDubinsky: A dzięki sprzętowi Compute Capability 3.0, NVIDIA zbliżyła się do AMD, usuwając dynamiczne planowanie. Myślę, że ich architektury zbiegną się gdzieś pośrodku.
Roger Dahl
1
Słyszałem to w przeszłości, ale nie mogłem znaleźć żadnych konkretnych informacji. Gdzie mogę znaleźć więcej szczegółów na ten temat?
Yakov Galka
7

Zrobiłem kilka iteracyjnych kodowań w OpenCL. A wyniki uruchomienia go w NVIDIA i ATI są prawie takie same. Blisko tej samej prędkości w kartach o tej samej wartości ($).

W obu przypadkach prędkości były ~ 10x-30x w porównaniu z CPU.

Nie testowałem CUDA, ale wątpię, by w magiczny sposób rozwiązał problemy z pobieraniem pamięci losowej. Obecnie CUDA i OpenCL są mniej więcej takie same i widzę więcej przyszłości na OpenCL niż na CUDA. Głównym powodem jest to, że Intel wprowadza sterowniki z OpenCL dla swoich procesorów. Będzie to ogromny postęp w przyszłości (uruchomienie 16, 32 lub 64 wątków OpenCL w CPU jest NAPRAWDĘ szybkie i naprawdę łatwe do przeniesienia do GPU).

DarkZeros
źródło
7

Spędziwszy trochę czasu z OpenCL dla kart GCN po kilku latach CUDA dla Fermi i Kepler, nadal wolę CUDA jako język programowania i wybrałbym sprzęt AMD z CUDA, gdybym miał opcję.

Główne różnice między NVIDIA i AMD (OpenCL):

Dla AMD:

  • Nawet z Maxwellem, NVidia nadal ma dłuższe opóźnienia poleceń, a złożone algorytmy prawdopodobnie będą o 10 szybsze na AMD (zakładając te same teoretyczne Tflops) po łatwej optymalizacji dla obu. Luka wynosiła do 60% w przypadku Kepler VS GCN. W tym sensie trudniej jest zoptymalizować złożone jądra dla NVidii.

  • Tanie karty.

  • OpenCL jest otwartym standardem z innymi dostępnymi dostawcami.

Nvidia:

  • Ma linię sprzętu Tesla, która jest odpowiednia do niezawodnego wysokiego obciążenia serwera.

  • Nowy Maxwell jest o wiele bardziej energooszczędny.

  • Kompilator i narzędzia są znacznie bardziej zaawansowane. AMD nadal nie może zaimplementować maxregcoutparametru, więc możesz łatwo kontrolować zajętość na różnych urządzeniach, a ich kompilator ma wiele przypadkowych pomysłów na to, jaki jest optymalny kod, który zmienia się z każdą wersją, więc może być konieczne ponowne odwiedzanie starego kodu co pół rok, ponieważ nagle zwolnił o 40%.

W tym momencie, jeśli Twoim celem jest GPGPU, CUDA jest jedynym wyborem, ponieważ opencL z AMD nie jest gotowy na farmę serwerów i znacznie trudniej jest napisać wydajny kod dla AMD ze względu na fakt, że kompilator zawsze wydaje się być „w wersji beta” .

Vladimir Tankovich
źródło
Dziękuję za świeżą odpowiedź. Czy możesz wyjaśnić, jakie jednostki „prawdopodobnie będą o 10 szybsze” są dostępne? Procent?
Aleksandr Dubinsky
Osobista opinia: Kiedyś karty ATI były w pewnym sensie lepsze niż Nvidia, ale brakowało im obsługi aktualizacji sterowników iz czasem AMD całkowicie wykupiło ATI, gdzie Nvidia jest nadal tą samą firmą. Ponadto Nvidia nadal ma lepszą obsługę sterowników aktualizacji. To zależy bardziej od użytkownika karty, jeśli chodzi o wydajność z aplikacjami. Nie zrozumcie mnie źle obie technologie są świetne na swój sposób i obie mają tanie karty z niższej półki, a także droższe karty z wyższej półki. Z czasem przeszedłem z ATI na Nvidię. Jeśli chodzi o programowanie, Nvidia ma znacznie lepszy zestaw funkcji i programowalne API lub bibliotekę.
Francis Cugler,
6

Jestem nowy w GPGPU, ale mam pewne doświadczenie w obliczeniach naukowych (doktorat z fizyki). Tworzę zespół badawczy i chcę przejść do korzystania z GPGPU do moich obliczeń. Musiałem wybierać między dostępnymi platformami. Zdecydowałem się na Nvidię z kilku powodów: podczas gdy ATI może być szybsze na papierze, Nvidia ma bardziej dojrzałą platformę i więcej dokumentacji, dzięki czemu będzie można zbliżyć się do szczytowej wydajności na tej platformie.

Nvidia ma również program wspierania badań naukowych, o wsparcie można się ubiegać, właśnie otrzymałem kartę TESLA 2075, z której bardzo się cieszę. Nie wiem, czy ATI czy Intel obsługują badania w ten sposób.

To, co słyszałem o OpenCL, to to, że stara się być wszystkim na raz, prawdą jest, że twój kod OpenCL będzie bardziej przenośny, ale prawdopodobnie nie wykorzysta pełnych możliwości obu platform. Wolałbym się nauczyć więcej i pisać programy, które lepiej wykorzystują zasoby. Dzięki TESLA K10, który właśnie pojawił się w tym roku, Nvidia jest w zakresie 4,5 TeraFlops, więc nie jest jasne, czy Nvidia jest w tyle ... jednak Intel MIC może okazać się prawdziwym konkurentem, zwłaszcza jeśli uda im się przenieść jednostkę GPGPU do płyta główna. Ale na razie wybrałem Nvidię.

Andras
źródło
Spójrz na odpowiedź @ AndrewCooke, aby uzyskać opinię na temat (braku) wsparcia NVidii.
Aleksandr Dubinsky
5

Moje doświadczenie w ocenie wydajności zmiennoprzecinkowej OpenCL zwykle faworyzuje karty NVIDIA. Pracowałem z kilkoma zmiennoprzecinkowymi testami porównawczymi na kartach NVIDIA, od 8600M GT do GTX 460. Karty NVIDIA konsekwentnie osiągają około połowy teoretycznego szczytu pojedynczego precisino w tych testach.
Karty ATI, z którymi pracowałem, rzadko osiągają lepsze niż jedna trzecia wartości szczytowej pojedynczej precyzji. Zwróć uwagę, że moje doświadczenia z ATI są wypaczone; Mogłem pracować tylko z jedną kartą z serii 5000. Moje doświadczenie dotyczy głównie kart z serii HD 4000, które nigdy nie były dobrze obsługiwane. Obsługa kart z serii HD 5000 jest znacznie lepsza.

virtuallinux
źródło
1

Chciałbym dodać do debaty. Dla nas w branży oprogramowania możemy narażać wydajność pojedynczej precyzji na produktywność, ale nawet to nie muszę iść na kompromis, ponieważ, jak już wspomniano, nie można osiągnąć tak dużej wydajności na sprzęcie ATI przy użyciu OpenCL, ile można osiągnąć jeśli piszesz w CUDA na sprzęcie NVIDIA.

I tak, po ogłoszeniu przez PGI kompilatora x86 dla CUDA, nie będzie żadnego powodu, aby poświęcać więcej czasu i zasobów na pisanie w OpenCL :)

PS: Mój argument może być stronniczy, ponieważ prawie całą naszą pracę GPGPU wykonujemy na CUDA. Mamy bibliotekę CUVI do przetwarzania obrazów / wizji komputerowej (CUDA for Vision and Imaging), która przyspiesza niektóre podstawowe funkcje IP / CV w CUDA.

Salman Ul Haq
źródło
0

Cuda jest z pewnością popularna niż OpenCL na dzień dzisiejszy, ponieważ została wydana 3 lub 4 lata przed OpenCL. Od czasu wydania OpenCL, Nvidia nie wniosła zbyt wiele do języka, ponieważ koncentruje się dużo na CUDA. Nie wydali nawet wersji openCL 1.2 dla żadnego sterownika.

Jeśli chodzi o przetwarzanie heterogeniczne, a także urządzenia przenośne, OpenCl z pewnością zyska w najbliższej przyszłości większą popularność. Obecnie największym współtwórcą OpenCL jest AMD, jest to widoczne na ich stronie.

shunya
źródło
-2

z mojego doświadczenia:

  • jeśli chcesz uzyskać najlepszą absolutną wydajność, musisz zobaczyć, kto korzysta z najnowszej iteracji sprzętu i użyć ich stosu (w tym najnowszych / beta).

  • jeśli chcesz uzyskać najlepszą wydajność za pieniądze, będziesz celować w karty dla graczy, a nie karty „profesjonalne”, a elastyczność kierowania reklam na różne platformy sprzyja opencl.

  • Szczególnie jeśli zaczynasz, Cuda jest bardziej dopracowana i ma więcej narzędzi i bibliotek.

na koniec moje osobiste zdanie, po przerażającym "wsparciu" ze strony nvidii (dostaliśmy martwą teslę i nie zmieniano jej od miesięcy, gdy klient czekał): elastyczność przeskoczenia statku z opencl jest warta ryzyka nieco niższej wydajności kiedy nvidia wyprzedza cykl wydawniczy.

Andrew Cooke
źródło
Podobne doświadczenie z "wsparciem" od nvidii: crash in libcuda.so(tylko z OpenCL, działa CUDA) i brak jakiejkolwiek odpowiedzi od nich.
eudoxos
1
Z naszym dealerem nie mamy problemu z wymianą martwej tesli, zwykle otrzymujemy nowy sprzęt przed wysłaniem wadliwego, więc myślę, że to nie jest problem NVidii, ale problem twojego sprzedawcy.
Gaetano Mendola
Myślałem, że Tesla są super niezawodne. Jakie bzdury marketingowe.
Aleksandr Dubinsky
OpenCL nie jest przenośny pod względem wydajności, więc nie jest możliwe przeskakiwanie do wysyłki za każdym razem, gdy jedna firma wypuści nowy flagowy produkt (bez utrzymywania dwóch zoptymalizowanych gałęzi kodu). Ponadto obsługa OpenCL firmy NVIDIA jest opóźniona o kilka wersji i, jak podejrzewam, słabo utrzymywana.
Aleksandr Dubinsky