Zweiteilige Frage:OpenGL-OpenCL Interop Umsteigezeiten + Texturierung von Bitmap
ich an einem Schulprojekt gerade arbeitete das Spiel des Lebens als ein Fahrzeug mit GPGPU zu experimentieren mit. Ich benutze OpenCL und OpenGL für Echtzeit-Visualisierungen und das Ziel ist, dieses Ding so groß und schnell wie möglich zu bekommen. Nach dem Profiling finde ich heraus, dass die Frame-Zeit von CL Acquiring und Releasing der GL-Puffer dominiert wird, und dass die Zeitkosten direkt proportional zur tatsächlichen Größe des Puffers sind.
1) Ist das normal? Warum sollte das sein? Soweit ich weiß, verlässt der Puffer niemals den Gerätespeicher und das CL Acquire/Release verhält sich wie ein Mutex. Sperrt/entsperrt OpenCL jedes Byte einzeln oder so?
Um dies zu umgehen bin ich vom 24-Bit-RGBA-Farbmodus (OpenGLs bevorzugter Farbmodus, wie ich es verstehe?) Auf 8-Bit-RGB-Farbe geschrumpft. Dies hat zu einer erheblichen Beschleunigung geführt, aber nachdem ich meinen Kernel abgestimmt habe, dominieren die Übertragungszeiten wieder.
In Ermangelung von Ideen, wie die Übertragungszeiten vollständig zu eliminieren (kurz von Portierung meines Kerns von OpenCL zu GLSL, die den ursprünglichen Umfang des Projekts überschreiten würde), denke ich jetzt, dass meine beste Wette zu schreiben ist zu einer Bitmap (im Gegensatz zu der 8-Bit-Pixmap, die ich gerade verwende) und dann diese Bitmap mit einem Farbindex verwenden, um ein Quad zu texturieren.
2) Kann ich einen Quad direkt mit einer Bitmap texturieren? Ich habe erwogen, glBitmap zu verwenden, um in einen Hilfspuffer zu zeichnen, und diesen Puffer dann zu verwenden, um mein Quad zu strukturieren, aber ich würde es vorziehen, eine direktere Route zu verwenden, wenn eine verfügbar ist.
Ausgezeichnet. Ich benutze 1.0 (Hardware-Einschränkungen) und bin froh zu wissen, dass diese Probleme gelöst wurden. Ich denke, was ich wirklich brauche, ist eine neue Grafikkarte. –