NVIDIA vs AMD: GPGPU-Leistung


105

Ich würde gerne von Leuten hören, die Erfahrung im Codieren für beide haben. Ich selbst habe nur Erfahrung mit NVIDIA.

NVIDIA CUDA scheint viel beliebter zu sein als die Konkurrenz. (Wenn man nur die Frage-Tags in diesem Forum zählt, übertrifft 'cuda' 'opencl' 3: 1 und 'nvidia' 'ati' 15: 1, und es gibt überhaupt kein Tag für 'ati-stream').

Auf der anderen Seite sollten ATI / AMD-Karten laut Wikipedia ein viel größeres Potenzial haben, insbesondere pro Dollar. Die GeForce 580 (500 US-Dollar), die derzeit schnellste NVIDIA-Karte auf dem Markt, ist mit 1,6 TFlops mit einfacher Genauigkeit bewertet. AMD Radeon 6970 ist für 370 US-Dollar erhältlich und mit 2,7 TFlops bewertet. Der 580 verfügt über 512 Ausführungseinheiten bei 772 MHz. Der 6970 verfügt über 1536 Ausführungseinheiten bei 880 MHz.

Wie realistisch ist dieser Papiervorteil von AMD gegenüber NVIDIA und wird er wahrscheinlich bei den meisten GPGPU-Aufgaben realisiert? Was passiert mit ganzzahligen Aufgaben?


1
Interessante Frage, aber ich bin mir nicht sicher, ob sie wirklich mit der Programmierung zusammenhängt ?
Paul R

25
Es handelt sich im Wesentlichen um zwei Programmiersprachen und praktische Aspekte ihrer Implementierung. Also würde ich ja sagen.
Eugene Smith

2
Ich frage mich, wie relevant die Antworten auf diese Frage angesichts von C ++ AMP geworden sind.
Dmitri Nesteruk

2
Einmal habe ich untersucht, warum Bitcoin-Mining auf NVIDIA-Hardware im Vergleich zu AMD so langsam ist. Der resultierende Thread "AMD Radeon 3x schneller beim Bitcoin-Mining (SHA-256-Hashing-Leistung)" enthält Informationen, die Sie möglicherweise interessant finden. Ihre Frage. forums.nvidia.com/…
Roger Dahl

1
Es scheint mir, dass diese Frage entweder zu einer Sammlung von Meinungsbeiträgen führen wird, je nachdem, mit welchen Anwendungsbereichen die Befragten vertraut sind, welche Hardware und Software sie verwenden usw.; oder eine umfassende Antwort ist viel zu weit gefasst, um in das SO-Format zu passen. Abstimmung zum Schließen.
Njuffa

Antworten:


79

Metaphorisch gesehen hat ati im Vergleich zu nvidia einen guten Motor. Aber nvidia hat ein besseres Auto: D.

Dies liegt hauptsächlich daran, dass nvidia einen großen Teil seiner Ressourcen (in Geld und Menschen) investiert hat, um wichtige Bibliotheken zu entwickeln, die für das wissenschaftliche Rechnen erforderlich sind (BLAS, FFT), und dann wieder gute Arbeit geleistet hat, um es zu fördern. Dies kann der Grund sein, warum CUDA die Tags hier im Vergleich zu ati (oder OpenCL) dominiert.

Der Vorteil, der bei GPGPU-Aufgaben im Allgemeinen erzielt wird, hängt von anderen Problemen (je nach Anwendung) ab, z. B. der Speicherübertragungsbandbreite, einem guten Compiler und wahrscheinlich sogar vom Treiber. nvidia mit einem ausgereifteren Compiler, einem stabileren Treiber unter Linux (Linux, da seine Verwendung im wissenschaftlichen Rechnen weit verbreitet ist), kippt das Gleichgewicht (zumindest für den Moment) zugunsten von CUDA.


BEARBEITEN 12. Januar 2013

Es ist zwei Jahre her, seit ich diesen Beitrag verfasst habe und er scheint manchmal immer noch Ansichten zu erregen. Deshalb habe ich beschlossen, einige Dinge zu klären

  • AMD hat ihr Spiel verstärkt. Sie haben jetzt sowohl BLAS- als auch FFT-Bibliotheken. Zahlreiche Bibliotheken von Drittanbietern tauchen ebenfalls rund um OpenCL auf.
  • Intel hat Xeon Phi in die Wildnis eingeführt und unterstützt sowohl OpenMP als auch OpenCL. Es kann auch vorhandenen x86-Code verwenden. Wie in den Kommentaren erwähnt, ist x86 vorerst ohne SSE eingeschränkt
  • NVIDIA und CUDA haben immer noch die Nase vorn im Bereich der verfügbaren Bibliotheken. Möglicherweise konzentrieren sie sich jedoch nicht mehr so ​​sehr auf OpenCL wie zuvor.

Kurz gesagt, OpenCL hat die Lücke in den letzten zwei Jahren geschlossen. Es gibt neue Spieler auf dem Feld. Aber CUDA ist immer noch ein bisschen voraus.


4
Xeon Phi hat nur begrenzte Fähigkeit von x86 - Code - Ausführung. Kein MMX / SSE / SSE *.
Osgx

@osgx Danke. Ich hätte das erwähnen sollen.
Pavan Yalamanchili

1
@osgx Aber es funktioniert gut in DP FP
Csaba Toth

4
Xeon Phi verfügt über 512 Bit breite Register und Anweisungen, was 4x der von SSE unterstützten Unterstützung entspricht.
zr.

59

Ich habe keine starken Gefühle gegenüber CUDA vs. OpenCL; vermutlich ist OpenCL die langfristige Zukunft, nur weil es ein offener Standard ist.

Aber aktuelle NVIDIA vs ATI-Karten für GPGPU (nicht Grafikleistung, sondern GPGPU), über die ich eine starke Meinung habe. Um darauf hinzuweisen , möchte ich darauf hinweisen, dass NVIDIA in der aktuellen Top 500-Liste der großen Cluster AMD 4-Systeme auf 1 und auf gpgpu.org Suchergebnisse (Dokumente, Links zu Online-Ressourcen usw.) für NVIDIA führt Überzahl der Ergebnisse für AMD 6: 1.

Ein großer Teil dieses Unterschieds ist die Menge der verfügbaren Online-Informationen. Schauen Sie sich die NVIDIA CUDA Zone im Vergleich zu AMDs GPGPU Developer Central an . Die Menge an Dingen, die Entwickler dort starten, kommt dem Vergleich nicht einmal nahe. Auf der NVIDIA-Website finden Sie Tonnen von Papieren - und Code - von Leuten, die wahrscheinlich an Problemen wie Ihrem arbeiten. Sie finden unzählige Online-Kurse von NVIDIA und anderen Anbietern sowie sehr nützliche Dokumente wie den Best-Practice-Leitfaden der Entwickler usw. Die Verfügbarkeit kostenloser Entwicklungstools - der Profiler, die cuda-gdb usw. - ist für NVIDIAs überwältigend.

(Editor: Die Informationen in diesem Absatz sind nicht mehr korrekt.) Ein Teil des Unterschieds liegt auch in der Hardware. AMDs-Karten haben bessere Spezifikationen in Bezug auf Peak-Flops, aber um einen signifikanten Bruchteil davon zu erhalten, müssen Sie Ihr Problem nicht nur auf viele völlig unabhängige Stream-Prozessoren aufteilen, sondern jedes Arbeitselement muss auch vektorisiert werden. Angesichts der Tatsache, dass der GPGPU-Code schwierig genug ist, reicht diese zusätzliche Komplexität der Architektur aus, um einige Projekte zu erstellen oder zu unterbrechen.

Das Ergebnis all dessen ist, dass die NVIDIA-Benutzergemeinschaft weiter wächst. Von den drei oder vier Gruppen, von denen ich weiß, dass sie GPU-Cluster aufbauen möchten, erwägt keine ernsthaft AMD-Karten. Und das bedeutet, dass noch mehr Gruppen auf der NVIDIA-Seite Papiere schreiben, Code beitragen usw.

Ich bin kein NVIDIA-Shill. Ich wünschte, es wäre nicht so und es gäbe zwei (oder mehr!) Gleich überzeugende GPGPU-Plattformen. Der Wettbewerb ist gut. Vielleicht wird AMD sein Spiel sehr bald verbessern - und die kommenden Fusion-Produkte sehen sehr überzeugend aus. Aber wenn ich jemandem Ratschläge gebe, welche Karten er heute kaufen soll und wo er seine Zeit damit verbringen soll, sich jetzt anzustrengen, kann ich nicht guten Gewissens sagen, dass beide Entwicklungsumgebungen gleich gut sind.

Bearbeitet, um hinzuzufügen : Ich denke, das Obige ist ein wenig elliptisch in Bezug auf die Beantwortung der ursprünglichen Frage, also lassen Sie mich es etwas expliziter machen. Die Leistung, die Sie mit einer Hardware erzielen können, hängt in einer idealen Welt mit unendlich viel verfügbarer Zeit nur von der zugrunde liegenden Hardware und den Fähigkeiten der Programmiersprache ab. In Wirklichkeit hängt die Leistung, die Sie in einem festgelegten Zeitaufwand erzielen können, auch stark von den Entwicklungstools, den vorhandenen Community-Codebasen (z. B. öffentlich verfügbaren Bibliotheken usw.) ab. Diese Überlegungen weisen alle stark auf NVIDIA hin.

(Editor: Die Informationen in diesem Absatz sind nicht mehr korrekt.) In Bezug auf die Hardware macht das Erfordernis der Vektorisierung innerhalb der SIMD-Einheiten in den AMD-Karten das Erreichen der Papierleistung noch schwieriger als bei NVIDIA-Hardware.


2
Ich lerne OpenCL mit ATI Stream, schätze den Hinweis zum Vektorisieren :) Obwohl mir klar ist, dass die NVIDIA-Vorteile ziemlich groß sind, unterstütze ich einfach AMD / ATI und das Unternehmen selbst und habe Zeit, um Bibliotheken zu erstellen: DI denke, OpenCL-Leistung wird in den kommenden Jahren definitiv zunehmen und ich möchte, dass mein Code auch dafür bereit ist.
Garet Claborn

Es wäre interessant zu sehen, was Sie von AMDs GCN und OpenCL 1.2 halten, jetzt (2013), dass Simds der Vergangenheit angehören. Irgendein Nettodifferenz?
Danno

3
@ Jonathan ist es nun 3 Jahre her, dass du diesen großartigen Beitrag geschrieben hast. Ich habe mich gefragt, ob aus Ihrer Sicht die AMD-Plattform, die Community und das Ökosystem die Lücke geschlossen haben.
Basilikode

Nicht so sehr für Video- oder GPGPU-Karten, sondern für Prozessoren selbst. Ich war jedoch schon immer ein Fan von Intel über AMD. Vor kurzem hat AMD den neuen ZEN-Prozessor veröffentlicht, bei dem die Burn-Mark-Tests dies bei den Standardeinstellungen zeigen Es ist vergleichbar mit Intels Top-i7-Prozessoren. Ihre neue Technologie soll sich verbessern, je mehr sie funktioniert, da sie Anweisungsmuster erkennt. Ich denke, der größte Teil ihrer Zeit und Mühe wurde für diesen neuen Prozessor aufgewendet, im Gegensatz zu ihrer GPU-Technologie. Ich bin mir jedoch sicher, dass Intel nach der Veröffentlichung der Zen-Prozessoren etwas Besseres haben wird.
Francis Cugler

17

Der Hauptunterschied zwischen den Architekturen von AMD und NVIDIA besteht darin, dass AMD für Probleme optimiert ist, bei denen das Verhalten des Algorithmus zur Kompilierungszeit bestimmt werden kann, während NVIDIA für Probleme optimiert ist, bei denen das Verhalten des Algorithmus nur zur Laufzeit bestimmt werden kann.

AMD hat eine relativ einfache Architektur, die es ihnen ermöglicht, mehr Transistoren für ALUs auszugeben. Solange das Problem zur Kompilierungszeit vollständig definiert und auf etwas statische oder lineare Weise erfolgreich auf die Architektur abgebildet werden kann, besteht eine gute Chance, dass AMD den Algorithmus schneller als NVIDIA ausführen kann.

Andererseits führt der NVIDIA-Compiler zur Kompilierungszeit weniger Analysen durch. Stattdessen verfügt NVIDIA über eine fortschrittlichere Architektur, bei der mehr Transistoren für Logik ausgegeben wurden, die das dynamische Verhalten des Algorithmus verarbeiten kann, das nur zur Laufzeit auftritt.

Ich glaube, die Tatsache, dass die meisten Supercomputer, die GPUs verwenden, mit NVIDIA arbeiten, ist, dass die Art von Problem, an dem Wissenschaftler interessiert sind, Berechnungen durchzuführen, im Allgemeinen besser auf die Architektur von NVIDIA als auf die von AMD abgestimmt ist.


2
Mit GCN (Graphics Core Next) hat AMD von SIMD und VLIW zu einer Architektur übergegangen, die der von NVIDIA ähnlicher ist (SIMT und flexiblere Befehlsplanung).
Aleksandr Dubinsky

1
@AleksandrDubinsky: Mit der Hardware von Compute Capability 3.0 ist NVIDIA AMD näher gekommen, indem die dynamische Zeitplanung entfernt wurde. Ich denke, ihre Architekturen werden irgendwo in der Mitte zusammenlaufen.
Roger Dahl

1
Ich habe das in der Vergangenheit gehört, konnte aber keine konkreten Informationen finden. Wo finde ich mehr Details dazu?
Yakov Galka

7

Ich habe einige iterative Codierungen in OpenCL durchgeführt. Die Ergebnisse der Ausführung in NVIDIA und ATI sind nahezu gleich. Nahezu die gleiche Geschwindigkeit bei Karten mit demselben Wert ($).

In beiden Fällen betrug die Geschwindigkeit im Vergleich zu einer CPU ~ 10x-30x.

Ich habe CUDA nicht getestet, aber ich bezweifle, dass es meine Probleme mit dem zufälligen Speicherabruf auf magische Weise lösen kann. Heutzutage sind CUDA und OpenCL mehr oder weniger gleich, und ich sehe bei OpenCL mehr Zukunft als bei CUDA. Der Hauptgrund ist, dass Intel Treiber mit OpenCL für ihre Prozessoren startet. Dies wird in Zukunft ein großer Fortschritt sein (das Ausführen von 16, 32 oder 64 OpenCL-Threads in der CPU ist WIRKLICH schnell und sehr einfach auf die GPU zu portieren).


7

Nachdem ich nach einigen Jahren CUDA für Fermi und Kepler einige Zeit mit OpenCL für GCN-Karten verbracht habe, bevorzuge ich immer noch CUDA als Programmiersprache und würde AMD-Hardware mit CUDA wählen, wenn ich eine Option hätte.

Hauptunterschiede von NVIDIA und AMD (OpenCL):

Für AMD:

  • Selbst mit Maxwell hat NVidia immer noch längere Befehlslatenzen und komplexe Algorithmen sind bei AMD (unter der Annahme derselben theoretischen Tflops) nach einfachen Optimierungen für beide wahrscheinlich 10-mal schneller. Die Lücke betrug für Kepler VS GCN bis zu 60%. In diesem Sinne ist es schwieriger, komplexe Kernel für NVidia zu optimieren.

  • Günstige Karten.

  • OpenCL ist ein offener Standard mit anderen verfügbaren Anbietern.

Für Nvidia:

  • Verfügt über die Tesla-Hardwarelinie, die für zuverlässige hohe Serverlasten geeignet ist.

  • New Maxwell ist viel energieeffizienter.

  • Compiler und Tools sind viel weiter fortgeschritten. AMD kann immer noch keine maxregcoutParameter implementieren , sodass Sie die Belegung auf verschiedenen Hardwarekomponenten leicht steuern können. Der Compiler hat viele zufällige Vorstellungen davon, was ein optimaler Code ist, der sich mit jeder Version ändert. Daher müssen Sie möglicherweise den alten Code jede Hälfte erneut aufrufen ein Jahr, weil es plötzlich 40% langsamer wurde.

Wenn GPGPU Ihr Ziel ist, ist CUDA die einzige Wahl, da opencL mit AMD nicht für die Serverfarm bereit ist und es erheblich schwieriger ist, effizienten Code für AMD zu schreiben, da der Compiler immer "in der Beta" zu sein scheint. .


Vielen Dank für die neue Antwort. Können Sie klären, in welchen Einheiten sich "wahrscheinlich 10 schneller" befinden? Prozent?
Aleksandr Dubinsky

Persönliche Meinung: Früher waren ATI-Karten in gewisser Weise besser als Nvidia, es fehlte jedoch an Unterstützung für Treiberupdates, und im Laufe der Zeit kaufte AMD ATI vollständig auf, wo Nvidia immer noch dasselbe Unternehmen ist. Außerdem bietet Nvidia immer noch eine bessere Unterstützung für Update-Treiber. Dies liegt mehr im Benutzerende der Karten für die Leistung mit Anwendungen. Versteh mich nicht falsch, beide Technologien sind auf ihre Weise großartig und beide haben billige Low-End-Karten sowie teurere High-End-Karten. Im Laufe der Zeit wechselte ich von ATI zu Nvidia. In Bezug auf die Entwicklung verfügt Nvidia über einen viel besseren Funktionsumfang und eine programmierbare API oder Bibliothek.
Francis Cugler

6

Ich bin neu bei GPGPU, habe aber einige Erfahrungen im Bereich wissenschaftliches Rechnen (PhD in Physik). Ich stelle ein Forschungsteam zusammen und möchte GPGPU für meine Berechnungen verwenden. Ich musste zwischen den verfügbaren Plattformen wählen. Ich habe mich aus mehreren Gründen für Nvidia entschieden: Während ATI auf dem Papier möglicherweise schneller ist, verfügt Nvidia über eine ausgereiftere Plattform und mehr Dokumentation, sodass es möglich ist, der Spitzenleistung auf dieser Plattform näher zu kommen.

Nvidia hat auch ein akademisches Forschungsunterstützungsprogramm, man kann Unterstützung beantragen, ich habe gerade eine TESLA 2075-Karte erhalten, über die ich mich sehr freue. Ich weiß nicht, ob ATI oder Intel die Forschung auf diese Weise unterstützen.

Was ich über OpenCL gehört habe, ist, dass es versucht, alles auf einmal zu sein. Es ist wahr, dass Ihr OpenCL-Code portabler ist, aber es wird wahrscheinlich auch nicht die vollen Funktionen beider Plattformen ausnutzen. Ich möchte lieber ein bisschen mehr lernen und Programme schreiben, die die Ressourcen besser nutzen. Mit dem TESLA K10, der gerade in diesem Jahr auf den Markt kam, liegt Nvidia im Bereich von 4,5 TeraFlops, sodass nicht klar ist, dass Nvidia im Rückstand ist. Intel MICs könnten sich jedoch als echter Konkurrent erweisen, insbesondere wenn es ihnen gelingt, die GPGPU-Einheit auf zu stellen das Motherboard. Aber jetzt habe ich mich für Nvidia entschieden.


Werfen Sie einen Blick auf die Antwort von @ AndrewCooke, um eine Meinung zur (fehlenden) Unterstützung von NVidia zu erhalten.
Aleksandr Dubinsky

5

Meine Erfahrung bei der Bewertung der OpenCL-Gleitkomma-Leistung begünstigt tendenziell NVIDIA-Karten. Ich habe mit einigen Gleitkomma-Benchmarks für NVIDIA-Karten gearbeitet, die vom 8600M GT bis zur GTX 460 reichen. NVIDIA-Karten erreichen bei diesen Benchmarks durchweg etwa die Hälfte des theoretischen Single-Precisino-Peaks.
Die ATI-Karten, mit denen ich gearbeitet habe, erreichen selten besser als ein Drittel der Spitzenwerte mit einfacher Genauigkeit. Beachten Sie, dass meine Erfahrungen mit ATI verzerrt sind. Ich konnte nur mit einer Karte der 5000er-Serie arbeiten. Meine Erfahrung ist hauptsächlich mit Karten der HD 4000-Serie, die nie gut unterstützt wurden. Die Unterstützung für Karten der HD 5000-Serie ist viel besser.


1

Ich möchte der Debatte hinzufügen. Für uns im Softwaregeschäft können wir die rohe Leistung mit einfacher Genauigkeit in Bezug auf die Produktivität beeinträchtigen, aber auch das muss ich nicht beeinträchtigen, da Sie, wie bereits erwähnt, mit OpenCL auf der ATI-Hardware nicht so viel Leistung erzielen können, wie Sie erreichen können Wenn Sie in CUDA auf der NVIDIA-Hardware schreiben.

Und ja, mit der Ankündigung des x86-Compilers für CUDA durch PGI gibt es keinen guten Grund, mehr Zeit und Ressourcen für das Schreiben in OpenCL aufzuwenden :)

PS: Mein Argument könnte voreingenommen sein, da wir fast alle unsere GPGPU-Arbeiten an CUDA durchführen. Wir haben eine Bildverarbeitungs- / Computer Vision-Bibliothek CUVI (CUDA für Vision und Imaging), die einige IP / CV-Kernfunktionen von CUDA beschleunigt.


0

Cuda ist heute sicherlich beliebter als OpenCL, da es 3 oder 4 Jahre vor OpenCL veröffentlicht wurde. Seit der Veröffentlichung von OpenCL hat Nvidia nicht viel zur Sprache beigetragen, da sie sich stark auf CUDA konzentrieren. Sie haben noch nicht einmal die openCL 1.2-Version für einen Treiber veröffentlicht.

In Bezug auf heterogenes Computing sowie Handheld-Geräte wird OpenCl in naher Zukunft sicherlich an Popularität gewinnen. Ab sofort ist AMD der größte Beitrag zu OpenCL. Es ist auf ihrer Website sichtbar.


-2

durch meine Erfahrung:

  • Wenn Sie die beste absolute Leistung erzielen möchten, müssen Sie sehen, wer sich auf der neuesten Hardware-Iteration befindet, und deren Stack verwenden (einschließlich der neuesten / Beta-Versionen).

  • Wenn Sie die beste Leistung für das Geld erzielen möchten, streben Sie eher Spielerkarten als "professionelle" Karten an, und die Flexibilität, verschiedene Plattformen anzusprechen, begünstigt opencl.

  • Insbesondere wenn Sie gerade erst anfangen, ist cuda in der Regel ausgefeilter und verfügt über mehr Tools und Bibliotheken.

Schließlich meine persönliche Meinung nach entsetzlicher "Unterstützung" von nvidia (wir haben einen toten Tesla bekommen und er wurde monatelang nicht geändert, während ein Kunde wartete): Die Flexibilität, mit opencl Schiff zu springen, ist das Risiko einer etwas geringeren Leistung wert wenn nvidia im Release-Zyklus voraus sind.


Ähnliche Erfahrungen mit "Support" von nvidia: Absturz libcuda.so(nur mit OpenCL, CUDA funktioniert) und keinerlei Antwort von ihnen.
Eudoxos

1
Bei unserem Händler haben wir kein Problem damit, toten Tesla zu ersetzen. Normalerweise erhalten wir die neue Hardware vorher, um die fehlerhafte zu senden. Ich denke, es handelt sich nicht um ein NVidia-Problem, sondern um ein Problem Ihres Händlers.
Gaetano Mendola

Ich fand Tesla super-super zuverlässig. Was für ein Marketing-Fud.
Aleksandr Dubinsky

OpenCL ist nicht leistungsportabel, daher ist es nicht möglich, jedes Mal zu versenden, wenn ein Unternehmen ein neues Flaggschiff veröffentlicht (ohne zwei optimierte Code-Zweige zu verwalten). Außerdem ist die OpenCL-Unterstützung von NVIDIA mehrere Versionen hinterher und, wie ich vermute, schlecht gewartet.
Aleksandr Dubinsky
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.