Grafikkarte für allgemeine Berechnungen nutzen
-
Hey
Für einen Software Renderer bräuchte ich zusätzliche Kapazitäten um hohe Frameraten zu erreichen. Ich hab da von GPGPU gehört, was soviel bedeutet dass es Möglichkeiten gibt der Grafikkarte allgemeine Berechnungen zu übergeben (für Trigonometrie, Arrayoperationen, etc) die vor allem bei floating point sehr schnell durchgeführt werden können. Nach ausgiebiger Suche bin ich dann auf diverse Sprachen wie brook oder cuda gestoßen, in denen man Code schreibt der extra kompiliert und dann eingebunden wird. Der Aufwand scheint mir aber ziemlich hoch.
Dann fand ich ACML für GPUs (von AMD), welche leider 64bit bibliotheken verwendet welche ich in VC++08 nicht einbinden kann, da nur 32 Bit verfügbar ist.Frage ist, kennt jemand eine andere Mathe-lib die Berechnungen zur Grafikkarte schickt und sich um alle Details selbst kümmert?
Falls nicht, kennt jemand allgemein einen guten Einstieg in GPGPU-Themen? Tutorials, Ressourcen, APIs...
-
http://en.wikipedia.org/wiki/GPGPU bietet vielleicht einige Einstiegspunkte.
-
Ja, aber nichts konkretes, weil die Informationen sehr allgemein gehalten sind. Einige APIs die die Seite erwähnt, wie ATI Stream, sind spärlich dokumentiert und gehen zudem weit über meine Zwecke. Oder ich stell mich vielleicht an :-?
Jedenfalls würde ich den Overhead für die Einbindung von GPU-bezogenen Funktionen gerne gering halten, statt zur Runtime zu kompilieren, contexts, devices, queues, threads und Ähnliches zu erzeugen.
Einen geradlinigen Weg, auf die GPU zuzugreifen, würde ich bevorzugen, deswegen die Frage nach APIs und Libs falls vorhanden.
-
Wie wäre es mit CUDA?
Ganz banal könnte man sich gewisse Berechnungen auch über einen Shader und Texturen berechnen lassen. (Wobei ich nicht weiss, ob sich das überhaupt lohnt).
-
Kontrasubjekt schrieb:
Hey
Für einen Software Renderer...
Dann ist es aber kein Software Renderer mehr
-
this->that schrieb:
Dann ist es aber kein Software Renderer mehr
Streng genommen nein.
Aber wenn ich die GPU nur wie ne zweite CPU behandle, könnte man es schon sagen. Die Algorithmen sind ja alle Software.
Wie wäre es mit CUDA?
Ich hab eine ATI im Rechner. CUDA ist nur für Nvidia.
Ganz banal könnte man sich gewisse Berechnungen auch über einen Shader und Texturen berechnen lassen. (Wobei ich nicht weiss, ob sich das überhaupt lohnt).
Hast recht. Danke für den Hinweis. Hab dieses Tutorial dazu gefunden:
http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.html
Was schonmal ein guter Anfang ist. Mal gucken ob das in der Praxis taugt.
-
Naja ganz einfacher Einstieg wäre :
Du nutzt OpenGL, ohne ein(sichtbares) Render-Device aufzumachen.
Damit kannst du alles mögliche machen.
-
Servus,
OpenCL erlaubt dir die Leistung der GraKa zu nutzen. Seit Dezember ist die 1.0er Spezifikation verabschiedet worden und die meisten GPU's unterstützen diese auch. Sofern neuster Treiber
CUDA sollte vermieden werden, da dies eine plattformspezf. Sprache ist. Was machst du mit einer ATI-Karte, Maxon, ...? Nvidia unterstützt OpenCL mit CUDA und wirkt am Standard mit.
-
Kontrasubjekt schrieb:
Für einen Software Renderer bräuchte ich zusätzliche Kapazitäten um hohe Frameraten zu erreichen. Ich hab da von GPGPU gehört, was soviel bedeutet dass es Möglichkeiten gibt der Grafikkarte allgemeine Berechnungen zu übergeben
Ein GPU-beschleunigter Software-Renderer? Was es nicht alles gibt.
-
Kontrasubjekt schrieb:
Ganz banal könnte man sich gewisse Berechnungen auch über einen Shader und Texturen berechnen lassen. (Wobei ich nicht weiss, ob sich das überhaupt lohnt).
Hast recht. Danke für den Hinweis. Hab dieses Tutorial dazu gefunden:
http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.html
Was schonmal ein guter Anfang ist. Mal gucken ob das in der Praxis taugt.Hmm. Hätte jetzt nicht gedacht, dass es das so wirklich eingestzt wird. (Halt wegen den Alternativen, die man "natürlicher" benutzen kann). Aber melde dich, wenn du mal ein paar Vergleichszahlen hast.
-
Siassei schrieb:
Servus,
OpenCL erlaubt dir die Leistung der GraKa zu nutzen. Seit Dezember ist die 1.0er Spezifikation verabschiedet worden und die meisten GPU's unterstützen diese auch. Sofern neuster Treiber
Für OpenCL hab ich auf der Khronos website nur includes gefunden. Ich vermute es sollte auch eine lib geben, aber diesbezüglich hab ich keine infos gefunden. Ich krieg nur linker errors.
-
vielleicht brockgpu, ich glaube brockgpu+ is teil des streamSDK, es ist quasi ein c++ compiler der teile vom c++ code dann auf vielen threads auf der gpu ausfuehrt.
in etwa wie openMP fuer gpu.
-
Naja, das funktioniert alles nicht anständig.
BrookGPU 0.5 kompiliert nicht.
Brook+ SDK 1.4 kompiliert, führt aber die Kernelfunktion nicht aus. Außerdem ATI spezifisch.
StreamSDK hat theorethisch GPU support, diesen hat AMD aber rausgenommen und fügt ihn irgendwann wieder hinzu.
Ziemlich uncool.
Der Code aus dem Tutorial ist der einzige der macht was er verspricht, nur bin ich mir nicht sicher wie ich das kopieren zwischen RAM/GPU handhaben soll. Eventuell benutz ich den und wrappe alles irgendwann in eine Klasse.