Ich habe eine Liste von Vektoren, die ich durch Matrizen auf der CPU transformieren muss. Ich speichere diese als dynamisch zugewiesenes Array (Eigen :: Vector4f *). Sobald sie transformiert wurden, muss ich einen OpenCL-Kernel auf den Vektoren ausführen. Ich frage mich, was der beste Weg ist, diese Daten in OpenCL zu übergeben, ohne die Daten aus Eigen :: Vector -> float array kopieren zu müssen, da dies ziemlich teuer ist. Meines Wissens nach speichert Eigen die Vektorenwerte intern in einer Art Puffer, auf den ich zugreifen kann.Eigen-Bibliothek: übergeben Array von Vector4f zu OpenCL Kernel als Schwimmer
0
A
Antwort
0
Es gibt viele Möglichkeiten,
1 - Die besten wahrscheinlich ein Matrix4Xf
verwenden, weil es auf dem ganzen Satz von Vektoren auf einmal arbeiten kann:
Matrix4Xf vecs(4,n);
Matrix4f transform;
vecs = transform * vecs;
vecs.row(1) // read-write access to all y components
vecs.col(i) // read-write access to i-th vector
float* raw_ptr = vecs.data();
2 - verwendet ein std::vector<Vector4f>
(wie Vector4f *, aber keine Speicherverwaltungsprobleme):
std::vector<Vector4f> vecs(n);
for(auto& v:vecs) v = transform * v;
float* raw_ptr = vecs[0].data(); // assuming vecs is not empty
// you can still see it as Matrix4Xf:
Map<Matrix4Xf> vecs_as_mat(raw_ptr,4,n);
0
Okay - hat ein bisschen mehr Forschung. Die Lösung ist den rohen Puffer durch die Eigen :: Map-Klasse ausgesetzt verwenden: https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
ich ein rohes Puffer von Schwimmern erstellen kann dann Eigen :: Map-Objekte erstellen, die den Schwimmer Puffer in Vektoren wickeln.
Verwandte Themen
- 1. Wie übergeben Sie private Array als Argumente an OpenCL-Kernel?
- 2. Übergeben Array zu Funktionsparameter in OpenCL
- 3. OpenCl Kernel Code
- 4. OpenCL Kernel Error -11
- 5. OpenCL kernel building error
- 6. OpenCL Kernel für Canny
- 7. OpenCL-Kernel Arbeitsgruppegröße Einschränkung
- 8. Debug OpenCL Kernel
- 9. Passing Mat zu OpenCL Kernel verursacht Segmentierungsfehler
- 10. OpenCL Kernel Parameter
- 11. Übergeben von Zeichen-Array als Parameter (C-Kernel-Code)
- 12. C#/OpenCL - 2D Array als Kernarument
- 13. Get OpenCL Kernel-Argument Informationen
- 14. Hinzufügen Mutex auf OpenCL Kernel
- 15. OpenCL: Welche Art von Speicher zu verwenden?
- 16. Eine Möglichkeit, Indizes im OpenCl-Kernel zu versetzen?
- 17. Lesen erzeugte Bild von OpenCL Kernel
- 18. Nesting Kernel-Funktionen für opencl
- 19. Was ist Opencl Kernel Compiler?
- 20. Array im OpenCL-Kernel deklarieren funktioniert nicht. (clBuildProgram (-11))
- 21. So erreichen Sie opencl Kernel-Pipeline
- 22. Wie übergebe ich ein Array an einen OpenCL-Kernel?
- 23. OpenCL - Hinzufügen von `float4` zu` float4` Array tut nichts
- 24. Korrekte Art, OpenCL-Kernel vieler Speicherobjekte zu informieren?
- 25. OpenCL-Pass-Matrix als Argument
- 26. OpenCL: Wie die Kette richtig Kernel
- 27. OpenCL Kernel Float Division gibt unterschiedliche Ergebnisse
- 28. OpenCL Kernel Zugriff auf CL_MEM_READ_WRITE, Puffer
- 29. Brechen und Fortfahren im OpenCL-Kernel
- 30. Fehler in OpenCL Kernel-Code zur Laufzeit