News AMDs FirePro S9150 mit 5 TFLOPS und höchster Effizienz

Weis denn jemand was nu besser ist CUDA oder OpenCL? Kann sein das das mir schon mal jemand beantwortet hat, ist aber schon ein bisschen her^^
Nützt ja nichts wenn OpenCL an sich zwar schneller ist aber nur mit Hals- und Beinbruch programmiert werden kann. Ich weis von einem Chemiker der mit CUDA arbeitet und eine Titan zum rechnen hat. Er meint das CUDA sich gut und flüssig schreiben lässt.
Auch die Blenderentwickler setzen auf CUDA für ihren ray traycer da das Core builden vor dem eigentlichen rendern mit OpenCL ewig dauert und niemand lust hat das Jahrelang zu debuggen.
 
beides hat seine vor und Nachteile.

Da CUDA von NV gepusht wird und älter ist bekommst du da mehr Unterstützung. OpenCL ist aber im kommen, ein offener Standard und benötigt keine "Überteuerte" NV Hardware
 
Hi,

"besser" ist schwierig, OpenCL hat aber einige Vorteile in meinen Augen (z.B. nicht von nVidia abhängig zu sein). "CUDA" selbst lässt sich weder gut noch schlecht und schon gar nicht flüssig schreiben, da "CUDA" keine Sprache ist.

CUDA (früher auch Compute Unified Device Architecture genannt) ist eine von Nvidia entwickelte Programmier-Technik, mit der Programmteile durch den Grafikprozessor (GPU) abgearbeitet werden können.

Technik != Sprache

Programmierer verwenden zurzeit C for CUDA (C mit Nvidia-Erweiterungen). Es existieren auch Wrapper für die Programmiersprachen Perl, Python, Ruby, Java, Fortran und .NET bzw. Anbindungen an MATLAB und Mathematica. Nvidia erstellte CUDA mit dem optimierenden C-Compiler Open64.[1] Seit der Fermi-Architektur kann auch C++ verwendet werden.

VG,
Mad
 
Cuda ist meines Erachtens klar besser - vor allem von der Programmierbarkeit- sofern man auf die Offenheit verzichten kann.

Denn OpenCL trennt den GPU-Code und den Host(CPU)-Code logisch stark von einander, wodurch sich die Kommunikation und die Verschachtelung zwischen komplexeren GPU-Programmen und Host-Programmen äußerst schwierig gestaltet. Bei CUDA sind, sofern man C bzw das CPP-Interface bzw. die Runtime-API verwendet, beide Programme logisch gesehen relativ stark verschmolzen. So kann man in CUDA meist problemlos die selben Datenstrukturen und Funktionen sowohl auf der GPU als auch auf der CPU verwenden, was einem die Arbeit oft stark vereinfacht. All dies ist in OpenCL nicht oder nur extrem umständlich möglich. Erschwerend kommt hinzu, dass CPP gegenüber C diverse Vorteile bietet, wobei ersteres nur von CUDA für GPU-Programme unterstützt wird.

Diverse Goodies die in CUDA noch anfallen sind, dass man bei NVIDA GPUs in CUDA mehr Features als in OpenCL verwenden kann, man Pointer Support in CUDA statts den Buffer Support in OpenCL hat, und dass in CUDA die Hardware besser spezifiziert ist. Letzteres kann man oft für mächtige Optimierungen nutzen. Teilweise kann man die Hardwareeigenschaften zwar auch in OpenCL abfragen, aber wichtige Eigenschaften sind eben nicht abfragbar, wodurch man solche Optimierungen auch nur schlecht allgemein durchführen kann.

Deshalb würde ich insgesamt für NVIDIA GPUs immer CUDA verwenden und mich sogar sofern möglich bewusst auf NVIDIA GPUs einschränken. So hätte ich Teile meiner Masterarbeit die ich gerade mit CUDA schreibe in OpenCL nicht so gut hinbekommen. Meines Erachtens nach ist das insgesamt auch der Grund weshalb AMD auf dem GPGPU-Sektor nur schlecht Fuss fassen kann. Man schaue sich nur größere GPGPU-Projekte oder wissenschaftliche Paper an: Die allermeisten solcher Arbeiten, vor allem diejenigen die über "ich schreibe eben einen parallelen Algorithmus in OpenCL und lasse ihn auf ner GPU laufen" hinausgehen und sich explizit damit beschäftigen "ich habe einen parallelen Algorithmus und will ihn so modifizieren, dass er möglichst gut auf einer GPU läuft" sind fast immer in CUDA geschrieben. So habe ich in meiner Literaturrecherche für meine Masterarbeit auch relativ viele CUDA-Paper zu meinem Thema gefunden, aber kein einziges OpenCL Paper.
 
Zuletzt bearbeitet:
ich_nicht

Wenn Du Nvidia Karten programmierst, dann nimm die Nvidia Spracherweiterung für CUDA (=im Wesentlichen C++, mit einigen Einschränkungen). Es sei denn Du brauchst unbedingt OpenCL, also einen offenen Standard.
 
Knuddelbearli schrieb:
1000 von denen statt von Nv sparen dann mal eben ~200kWh ( knapp 1k€ pro Tag ) + Anschaffungskosten für stärkere Klimaanlage usw

5 € für eine kWh? Wow.

MfG
 
Nai schrieb:
Deshalb würde ich insgesamt für NVIDIA GPUs immer CUDA verwenden und mich sogar sofern möglich bewusst auf NVIDIA GPUs einschränken. So hätte ich Teile meiner Masterarbeit die ich gerade mit CUDA schreibe in OpenCL nicht so gut hinbekommen. Meines Erachtens nach ist das insgesamt auch der Grund weshalb AMD auf dem GPGPU-Sektor nur schlecht Fuss fassen kann. Man schaue sich nur größere GPGPU-Projekte oder wissenschaftliche Paper an: Die allermeisten solcher Arbeiten, vor allem diejenigen die über "ich schreibe eben einen parallelen Algorithmus in OpenCL und lasse ihn auf ner GPU laufen" hinausgehen und sich explizit damit beschäftigen "ich habe einen parallelen Algorithmus und will ihn so modifizieren, dass er möglichst gut auf einer GPU läuft" sind fast immer in CUDA geschrieben. So habe ich in meiner Literaturrecherche für meine Masterarbeit auch relativ viele CUDA-Paper zu meinem Thema gefunden, aber kein einziges OpenCL Paper.

Das liegt aber primär eben genau daran, das CUDA viel früher verfügbar war, und man sehr früh die abstrakten Programmiersprachen unterstützte. Da hapert es ja bei OpenCL noch.
Und die Wissenschaft brauchte ja diese Tools... Also nimmt man was da ist...

Aber es fängt an:
http://developer.amd.com/community/application-showcase/scientific/
Aber ist natürlich noch nichts im Vergleich was mit CUDA schon umgesetzt wurde...
 
Zuletzt bearbeitet:
Zurück
Oben