2012-03-29 5 views
4

Wenn wir gute Geschwindigkeit mit OpenGL bekommen können, da es Texturspeicher und viele integrierte Grafikfunktionen (Blending, Mip Map usw.) verwendet.Vorteil der OpenCL-Interoperabilität mit OpenGL

Warum brauchen wir OpenCL (langsam wegen OpenCL-Puffer) Interoperabilität mit OpenGL, nur weil wir Rendering mit Berechnung kombinieren können oder gibt es irgendwelche guten Vorteile wie Leistung.

Ich wollte nur den Hauptvorteil von diesem wissen und gibt es veröffentlichte Arbeiten, die zeigen, dass sie Leistung durch die Verwendung von OpenGL-Interoperabilität mit OpenCL oder alle Beweise, die erhöhte Leistung in Bezug auf Geschwindigkeit und Qualität zeigten.

+0

möglich duplicate von [OpenCL langsamer als OpenGL] (http://stackoverflow.com/questions/9867821/opencl-slower-than-opengl) – talonmies

+0

Ich bin kein Experte auf diesem Gebiet, aber ich bezweifle, dass einige Leistung mit OGL + OCL. Wenn man OCL verwenden möchte, muss der Kontext gewechselt werden, was die Leistung beeinträchtigen kann. Auf der anderen Seite sind einige Algorithmen einfacher zu schreiben, indem 'Shader' wie in OpenCL verwendet werden. – fen

+0

@talonmies Ich sehering für einen Beweis dafür, warum khronos diese Interoperabilität hinzugefügt hat vorherige Frage ich war nicht zufrieden, ich will nur, dass jemand mir sagen kann, wo sie etwas Papier veröffentlicht haben, wo sie Qualität oder Geschwindigkeit bekommen – Megharaj

Antwort

11

OpenGL ist nur über Echtzeit gerasterte Grafiken. Da es in seinem Umfang begrenzt ist, kann es für diese Aufgabe besser optimiert werden und der Großteil der Hardware ist auch dafür ausgelegt.

OpenCL ist über allgemeine Computing. Faltende Proteine. Wettervorhersage. Hochfrequenzhandel. Simulating neurons. Machine Learning, SETI, Signalverarbeitung, BitCoin Mining und so weiter.

Aber dazwischen gibt es viele Übergangsbereiche.

Erstens haben viele dieser Sachen visuelle Komponenten. Wissenschaftler möchten vielleicht zum Beispiel das gefaltete Protein sehen/mit ihm interagieren können, ohne all diese Daten von dem GPU-RAM auf den Speicher der CPU kopieren zu müssen, es in einem visuellen Format zu verarbeiten und es dann an die GPU zurückzusenden.

Auch Spiele können OpenCL verwenden. Nimm etwas wie Minecraft. Wenn du Minecraft mit modernem OpenGL erstellst (anstatt OpenGL 1.3, was Minecraft tatsächlich benutzt), würdest du einfach die rohen Kartendaten auf die GPU hochladen wollen. Verwenden Sie einen einzelnen Durchlauf mit einem Geometrie-/Tessellations-Shader, um diese Daten in Würfel und andere Formen zu verwandeln, und verwenden Sie dann das Transformationsfeedback, um das Ergebnis zu erfassen (Sie müssen es nur einmal ausführen).

Aber Minecraft hat auch alle Arten von Regeln darüber, wie man die Karte aktualisiert. Berechnen Sie die Beleuchtung. Bäume pflanzen. Wasser fließen lassen. Explode TNT und so weiter. Das ist etwas, was du mit Shadern nicht wirklich machen könntest (oder vielleicht nicht mit einem einzigen Durchlauf). Sie können es auf der CPU tun (was Minecraft tut), aber wenn Sie diese Videos von Leuten gesehen haben, die 1000 von TNTs sofort einstellen, sehen Sie diesen Rückstand massiv. Und Wasser fließt kann für jeden auf einem großen Server Verzögerung verursachen. Sie können es mit OpenCL tun, als es an OpenGL zu senden, aber wenn sie miteinander verknüpfen, ist es effizienter.

Sie könnten OpenCL verwenden, um neue OpenGL-Techniken zu fälschen. Wenn Sie zum Beispiel OpenCL, aber keine Geometry/Tessellation Shader hätten, könnten Sie das in OpenCL machen (natürlich ist das in der Realität nicht so nützlich, da die meisten Systeme mit veralteten OpenGL-Implementierungen auch keine OpenCL-Unterstützung haben werden). Gibt es Dinge wie Tessellations-Shader, die nützlich wären, aber einfach nicht existieren?

Es gibt viele visuelle Effekte, die Sie innerhalb der OpenGL-Pipeline nicht erreichen können (zumindest nicht effizient). Ein Beispiel ist real-time ray-tracing. Ein anderer ist particle simulations. Procedural/fractal terrain generation.

Es gibt auch andere Dinge, die nützlich sind, um mit Spielen/Echtzeitgrafiken zu helfen. Zum Beispiel Physics simulations kann von der CPU verschoben werden. Auch wäre es toll, wenn die Rendering-Pipeline/Scenegraph selbst could be moved to the GPU. Dies würde die Anzahl von Anrufen zwischen der CPU und der GPU erheblich reduzieren und sie viel paralleler machen. Es gibt viel mehr Dinge wie Raycasting, AI, Pfadfindung und so weiter. Grundsätzlich alles, was Sie berechnen, nur um visuell gesehen zu werden.

Endlich bin ich mir sicher, dass es noch viele andere Dinge gibt, die noch keiner hat, aber jetzt ist es möglich. Wir drängen zunehmend auf parallele Algorithmen, da die Hardware in diese Richtung geht.

+0

Vielen Dank für Ihre Antwort Ich war auf der Suche nach dieser Art von Antwort. Gibt es Veröffentlichungen oder Artikel, bei denen sie in irgendeiner Anwendung einen Vorteil daraus gezogen haben? Nochmals vielen Dank für Ihre Antwort – Megharaj

+0

@Megharaj Ich kenne keine Papiere, die die Vorteile der direkten Integration von OpenCL-> OpenGL vs OpenCL-> CPU-> OpenGL zeigen (ich bin sicher, es gibt viele auf OpenCL + OpenGL ohne integrationsspezifisch zu sein). Es wird nur ein Leistungsschub sein. Es sollte möglich sein, alles ohne die direkte Integration, die Sie damit machen können, zu erreichen, abgesehen von unnötiger Arbeit auf der CPU-Seite mit einigen möglichen Ausnahmen, bei denen der Overhead zu hoch sein könnte (zum Beispiel alle Szenenaufrufe von der GPU zu übergeben) -> CPU-> GPU ist möglicherweise langsamer als nur auf der CPU.). –