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?
Antworten:
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
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.
quelle
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.
quelle
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.
quelle
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).
quelle
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
maxregcout
Parameter 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. .
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
libcuda.so
(nur mit OpenCL, CUDA funktioniert) und keinerlei Antwort von ihnen.