Was ist der Unterschied zwischen Pufferobjekt und Bildpufferobjekt in opencl? Es ist offensichtlich, dass der Bildpuffer schneller ist, aber in welchem Umfang? Wo müssen sie verwendet werden?Pufferobjekt und Bildpufferobjekt in OpenCL
Antwort
Ein OpenCL-Puffer ist ein 1D-, 2D- oder 3D-Array im globalen Speicher. Es ist ein abstraktes Objekt , das durch einen Zeiger adressiert werden kann. Puffer sind schreibgeschützt oder Write_only oder Read-Write. Ein Bildpuffer repräsentiert den GPU-Texturspeicher. Es stellt eine Anordnung von Pixeln dar, auf die über Funktionen zugreifen kann, die Pixel x, y, z-Koordinaten angeben. Es gibt keinen Zeigerzugriff auf Bildpixel auf der GPU.
Die Hardware behandelt diese beiden Arten von Puffern unterschiedlich. Ein OpenCL-Puffer befindet sich entweder in Host-RAM oder GPU-RAM und wird zwischen beiden übertragen. Ein OpenCL-Bildpuffer hat analoge Eigenschaften eines OpenCL-Puffers. Aber die Unterschiede sind Image Buffer sind entweder schreibgeschützt oder schreibgeschützt. Bei schreibgeschützten Bildpuffern kann die GPU Kopien der Bildpixel in jeder Recheneinheit zwischenspeichern (= 32 oder 64 ALU). Typisch ist die Cache-Größe 8K (Bytes oder Pixel?). Auch, da Bildpixel nicht über einen Zeiger auf der GPU zugegriffen werden können. Ihre Zuordnung von x, y, z-Koordinaten zur physikalischen Adresse kann auf verschiedene Arten abgebildet werden. Ein Weg ist eine Z-Bestellung. Dadurch werden Pixel in zwei Dimensionen geclustert, so dass benachbarte Pixel in x, y Richtungen linear gespeichert werden. Dies beschleunigt den Zugriff auf benachbarte Pixel in Bildfilter.
OpenCL-Puffer werden für allgemeine Arrays und insbesondere für Arrays mit Lese-/Schreibzugriff, oder doppelte Genauigkeit verwendet. OpenCL-Bildpuffer werden für die Bildverarbeitung oder andere Signalverarbeitungsalgorithmen verwendet, wobei das Eingangsbild/Signal als schreibgeschützt behandelt werden kann.
FYI, ab OpenCL 2.x, Bild-Objekt kann gelesen werden-schreiben.
- 1. Django admin TypError: Pufferobjekt erwartet
- 2. OpenCL-Ereignisse und Befehlswarteschlangen
- 3. Tesla K80 und OpenCL
- 4. OpenCL und GPU Programmierung Roadmap
- 5. Opencl Workitems und Streaming-Prozessoren
- 6. Speicherverwaltung in OpenCL
- 7. mit clEnqueueNativeKernel in OpenCL
- 8. Workitems, Workgroups und Command Queues Organisation und Speicherlimit in OpenCL
- 9. OpenCL - For Loops und Beziehung mit GlobalWorkSize
- 10. Bildberechnungs OpenCL und dann Bildschirm Rendering
- 11. OpenCL Konstruktor Syntax und Aktualisieren Variable
- 12. OpenCL: sincos vs native_cos und native_sin
- 13. Embed V8 in OpenCL-Anwendung?
- 14. OpenCL/OpenGL und OSX stürzt ab
- 15. Brechen und Fortfahren im OpenCL-Kernel
- 16. Deaktivieren OpenCL in OpenCV komplett
- 17. Verwirrung über CUDA/openCL und C++ AMP
- 18. Unbekannter Fehler in OpenCL-Programm
- 19. OpenCL: Typkonvertierungs-Overhead
- 20. OpenCL/AMD: Tief
- 21. Debugger für OpenCL
- 22. OpenCL Kompilieren unter Linux
- 23. OpenCL-Puffer ist leer
- 24. OpenCL: Arbeitsgruppe Konzept
- 25. OpenCL fake bitfield
- 26. OpenCL global memory holt
- 27. OpenCL-Kernel Arbeitsgruppegröße Einschränkung
- 28. OpenCL Kernel Error -11
- 29. OpenCL Performance Optimization
- 30. Unterscheidung zwischen positiv und negativ unendlich in opencl
vielen Dank für Ihre Wiederholung. Viel gelernt, wollte aber auch wissen, welcher schneller ist und um wie viel Prozent – Megharaj
Es gibt keine generische Antwort auf die was schneller ist und um wieviel%. Es hängt davon ab, wie Ihr Code auf Speicher zugreift und auf welchem Gerät Sie laufen. –