2013-04-07 5 views

Antwort

47

Im Gegensatz zu den anderen OpenGL-Shader-Typen sind Compute-Shader nicht direkt mit Computergrafiken verbunden und bieten eine direktere Abstraktion der zugrunde liegenden Hardware, ähnlich wie CUDA und OpenCL. Es bietet anpassbare Arbeitsgruppengröße, gemeinsamen Speicher, Synchronisation innerhalb einer Gruppe und all die Dinge, die von CUDA und OpenCL bekannt und beliebt sind.

Die wichtigsten Unterschiede sind im Wesentlichen:

  • Es GLSL statt OpenCL C verwendet Zwar gibt es nicht so ein großer Unterschied bewteen diesen Programmiersprachen ist, Sie aber nicht GLSL alle Grafiken bezogenen Funktionen verwenden können, verfügbar für OpenCL, wie erweiterte Texturtypen (zB Cube Map Arrays), erweiterte Filterung (zB Mipmapping, gut Ok, müssen Sie wahrscheinlich die Mip-Ebene selbst berechnen), und wenig Komfort Dinge wie 4x4 Matrizen oder geometrische Funktionen.
  • Es ist ein OpenGL-Shader-Programm wie jeder andere GLSL-Shader. Dies bedeutet, dass der Zugriff auf OpenGL-Daten (wie Puffer, Texturen, Bilder) nur trivial ist, während die Verbindung zwischen OpenGL und OpenCL/CUDA mühsam werden kann, mit möglicher manueller Synchronisation von Ihrer Seite aus. Genauso ist die Integration in einen bestehenden OpenGL-Workflow trivial, während OpenCL selbst ein Buch ist, ganz zu schweigen von der Integration in eine bestehende Grafik-Pipeline.

Also, was ankommt, ist, dass die betreffenden Rechen Shadern wirklich für den Einsatz im Rahmen der vorhandenen OpenGL-Anwendungen gedacht, obwohl den üblichen ausstellenden (OpenCL/CUDA-like) rechen Ansatz für GPU-Programmierung, im Gegensatz zu den Grafiken -Angriff auf die anderen Shaderstufen, die nicht die Rechenflexibilität von OpenCL/CUDA hatten (natürlich mit anderen Vorteilen). Computerexperimente sind daher flexibler, direkter und einfacher als sie in andere Shaderstufen zu pressen, die nicht für allgemeine Berechnungen gedacht sind, oder ein zusätzliches Computerframework einzuführen, mit dem man sich synchronisieren muss.

Compute Shader sollten in der Lage sein, mit OpenCL nahezu alles zu erreichen, was mit derselben Flexibilität und Kontrolle über Hardwareressourcen und mit dem gleichen Programmieransatz erreichbar ist. Wenn Sie also einen guten GPU-geeigneten Algorithmus (der mit CUDA oder OpenCL gut funktionieren würde) für die Aufgabe haben, die Sie ausführen möchten, dann können Sie dies auch mit Compute-Shadern tun. Aber es würde nicht viel Sinn machen, OpenGL (das immer noch und wahrscheinlich immer ein Framework für Echtzeit-Computergrafik ist) nur wegen der Compute-Shader zu verwenden. Dazu können Sie einfach OpenCL oder CUDA verwenden. Die wahre Stärke von Compute Shadern kommt beim Mischen von Grafik- und Rechenfunktionen zum Tragen.

+9

Vergessen Sie nicht die Genauigkeitsgarantien, die OpenCL bietet, was GLSL explizit * nicht * tut. –

+0

@ NicolBolas Sie meinen für arithmetische Operationen und Funktionen? –

+1

Ja. Die Fließkomma-Genauigkeit ist sehr unterschiedlich zwischen den beiden. –

2

Look here für eine andere Perspektive. Summieren:

Ja, OpenCL bereits existiert, aber es zielt auf Schwergewichts-Anwendungen (man denke CFD, FEM, etc), und es ist viel universellere als OpenGL (denken Sie über GPUs ... Intels Xeon Phi-Architektur unterstützt> 50 x86 Kerne).

Auch die Freigabe von Puffern zwischen OpenGL/CUDA und OpenCL macht keinen Spaß.

+0

In der Praxis ist eine High-End-GPU >> mehr als 40-mal leistungsfähiger als eine High-End-CPU, um ein parallelisierbares Problem im Matrix-Computing zu lösen, um genauer zu sein. Ich interessiere mich nicht wirklich für die CPU-Fähigkeit für jetzt. Um auf meine Frage zurückzukommen: Können wir Matrix Inversion mit Compute Shadern sagen? Und wie viel Arbeit wird im Vergleich zu OpenCL benötigt? – Maiss

+0

AFAIK, parallele Algorithmen existieren nur zum Invertieren von * spärlichen * Matrizen und diese sind ausreichend komplex, so dass Sie sie wahrscheinlich in C99 (OpenCL's Kernelsprache) schreiben möchten. –

+1

Sie können in OpenGL Compute Shaders viele Arten von Rechen tun, die mit dem großen Unterschied, dass OpenGL verwendet _GLSL_ (Die OpenGL Shading Language) als Kernsprache zu OpenCL, ähnlich sein würden, im Vergleich zu C99 Dialekt des OpenCL. Es gibt keine Begrenzung für die Durchführung von Matrixberechnungen (z. B. nur Arbeiten mit dünn besetzten Matrizen), und in bestimmten Fällen können Sie blockbasierte Matrixalgorithmen verwenden, die einige der nativen Matrixoperationen von GLSL nutzen. – radical7

Verwandte Themen