2010-07-03 3 views
16

Ich suche nach Vergleichen zwischen OpenCL und DirectCompute, aber ich habe nichts gefunden. Die Vorteile von OpenCL, plattformübergreifend zu sein und eine größere Auswahl an unterstützten Grafikprozessoren zu haben, sind für mich nicht von Bedeutung. Mir geht es gut mit der Codierung auf Windows nur gegen DX11 GPUs. Angenommen, was sind die Vor- und Nachteile jeder API?OpenCL gegen DirectCompute?

Ich weiß this question was raised before, aber ich bin auf der Suche nach weiteren Details.

Ich bin nicht an CUDA interessiert, da ich mich nicht nur auf Nvidia-Hardware beschränken möchte.

+0

Sie sollten Ihre Haltung auf CUDA, es ist ziemlich kickass, wie nvidia Hardware zu überdenken. – Benson

+6

@Benson Angenommen, dass alle Ihre Benutzer Nvidia-Hardware haben, scheint das ein ziemlich großer Fehler zu sein. Am besten halten Sie sich an eine standardisierte API wie OpenCL oder DirectCompute. Beide bieten die gleichen Vorteile von CUDA ohne den Nachteil, nur auf Nvidia-Hardware zu arbeiten. Tatsächlich muss heutzutage die Entscheidung, CUDA zu verwenden, in Frage gestellt werden, wenn es andere APIs gibt, die genau dasselbe auf einer Anzahl von verschiedenen Hardwaresystemen tun. – Cromulent

+0

@Simon Sind das wirklich? Ich gebe zu, dass es ein paar Monate her ist, seit ich Vergleiche angestellt habe, aber zuletzt habe ich überprüft, dass CUDA eine Größenordnung umfassender und funktionsreicher ist. Sie machen andere Annahmen, wenn Sie DirectCompute verwenden. Inzwischen hat nicht jeder generische "Benutzer". Viele wissenschaftliche Computing-Projekte kaufen Hardware und bauen die Software darauf auf. Da wir von Bob keine Details erhalten haben, kann man nicht auf die eine oder andere Weise davon ausgehen. – Benson

Antwort

11

Wahrscheinlich der größte Unterschied für einen Coder ist, dass DirectCompute von einer Sprache programmiert wird, die HLSL ähnlich ist, und OpenCL wird über eine C-ähnliche Sprache programmiert.

Ein weiterer zu berücksichtigender Unterschied ist, dass die DirectX-Unterstützung im Allgemeinen für GPUs auf Commodity-Ebene besser (schneller und weniger fehleranfällig) ist als die OpenGL-Unterstützung unter Windows. Dies könnte zu einer stabileren Unterstützung von DirectCompute führen, aber das ist nur eine Spekulation.

+0

Was hat OpenGL-Unterstützung für Windows mit OpenCL zu tun ...? Die wichtige Sache ist der Unterschied in der Unterstützung zwischen den Verkäufern; AMD unterstützt OpenCL sehr gut und unterstützt neuere Versionen, NVIDIA (welches das konkurrierende CUDA-Produkt hat) unterstützt nur CL 1.1 (mit Image-Erweiterungen etc.) Auch OpenCL garantiert gewisse Dinge, die DirectCompute (und Compute Shaders von OpenGL) nicht bieten , wie IEEE Fließkomma-Konformität. – Amadiro

+0

Als ich dies schrieb, und ich denke, dass es immer noch so ist, sind die Low-Level-Grafikkartentreiber für jede Technologie gleich. Bitte lesen Sie aufmerksam, was ich sage: "Dies kann zu stabilerer Unterstützung führen ..." Dies ist Spekulation, aber nicht grundlos, da das Protokoll zum Verschieben von Speicher und Funktionen von und zur Videokarte für jeden Stapel und für dasselbe gleich ist DirectCompute teilt die gleiche Menge von Tests und Robustheit, die das besser unterstützte DirectX genossen hat. Nochmal, als ich das schrieb. – codekaizen

11

Der Hauptvorteil von OpenCL besteht darin, dass es nicht nur auf Grafikkarten beschränkt ist. Sie können Ihre Multicore-CPU, Grafikkarte und möglicherweise eine beliebige Anzahl anderer Hardwarebeschleunigungsgeräte (DSPs usw.) aus demselben Programm nutzen.

Ich bin mir nicht sicher, ob DirectCompute diese Freiheit erlaubt.

+1

DirectCompute läuft nicht auf CPU-Ressourcen, jedoch läuft der Accelerator v2 von MSR auf der CPU und abstrahiert eher die Verwendung von Computational Ressourcen. http://research.microsoft.com/en-us/projects/accelerator/ – codekaizen

1

Ich benutze OpenCL, weil ich meine App problemlos nach Linux portieren kann, aber mit DirectCompute ist das nicht möglich. Ich denke auch, dass die Performance der OpenCL-Implementierung mit der Zeit zunehmen wird (dass es auf der gleichen Ebene wie CUDA für NVidia Cards kommt) und dass die (Treiber-) Bugs (hoffentlich;)) mit der Zeit beseitigt werden.

4

Die OpenCL-plattformübergreifende Funktionalität ist nicht nur ein Detail, da der Host-Code (derjenige, der die OpenCL API aufruft und Kernel sendet) selbst plattformübergreifend sein kann (siehe link text, link text ...).

Einmal schreiben, auf jedem GPGPU laufen, überall.

Ansonsten ist das OpenCL Werkzeug ist wirklich immer besser, mit einer ATI Stream-Plugin für Visual Studio, der NVidia & ATI SDKs, die Tonnen von Proben enthält, etc ...

3

Eine weitere Option jetzt C++ AMP ist, die Sie gibt moderne C++ - Syntax, ohne dass ein separater Compiler benötigt wird, während die Hardware-Portabilität erhalten bleibt. Bitte folgen Sie den Links von hier für weitere Informationen und zögern Sie nicht, Fragen zu stellen, wie Sie sie haben: http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/13/c-amp-in-a-nutshell.aspx

+1

Ich hatte den Eindruck, dass nur Visual Studio 2012 C++ - AMP-Code kompilieren kann - zählt das nicht als "Notwendigkeit für einen separaten Compiler"? – JBentley