2 Stimmen

Effiziente Bildpyramide in CUDA?

Was ist der effizienteste Weg, um Bildpyramiden in CUDA zu erstellen? Ich habe meine eigenen Kernel dafür geschrieben, aber ich denke, wir können es besser machen.

Die Bindung an eine OpenGL-Textur unter Verwendung von OpenGL-Interop und die Verwendung der Hardware-Mipmapping würde wahrscheinlich viel schneller sein. Irgendwelche Hinweise darauf, wie dies zu tun oder andere

1voto

axon Punkte 1192

MipMaps werden beim Zugriff/Initialisierung in OpenGL/DirectX eingerichtet. Ein CUDA-Kernel kann dasselbe tun, wenn Sie eine Textur zuweisen, die 50% breiter (oder höher) als die ursprüngliche Textur ist, und den Kernel verwenden, um die Textur herunterzurechnen und das Ergebnis neben die ursprüngliche Textur zu schreiben. Der Kernel wird wahrscheinlich am besten funktionieren, wenn jeder Thread ein Pixel im nächsten downgesampelten Bild auswertet. Es liegt an Ihnen, das Sampling-Schema zu bestimmen und geeignete Gewichte für die Kombination der Pixel zu wählen. Versuchen Sie es zunächst mit bilinear, und sobald es funktioniert, können Sie trilinear (kubisch) oder andere Sampling-Schemata wie anisotrop usw. einrichten. Einfaches Sampling (linear und kubisch) ist wahrscheinlich effizienter, da der Speicherzugriff zusammengelegt wird (siehe CUDA SDK Programmierhandbuch). Wahrscheinlich müssen Sie die Kernel-Ausführung kacheln, da die Anzahl der Threads für den parallelen Aufruf begrenzt ist (zu viele Pixel, zu wenige Threads = Verwendung von Kacheln, um die parallele Ausführung aufzuteilen).Sie könnten Mesa3D als Referenz nützlich finden (es ist eine Open-Source-Implementierung von OpenGL).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X