我有一個需要在CPU上通過矩陣進行轉換的向量列表。我將它們存儲爲一個動態分配的數組(Eigen :: Vector4f *)。一旦它們被轉換,我需要在向量上運行OpenCL內核。我想知道什麼最好的方法是將這些數據傳遞到OpenCL,而不必從Eigen :: Vector - > float數組複製數據,因爲這樣做會相當昂貴。我的理解是,Eigen將矢量值存儲在某種可以訪問的緩衝區中?Eigen庫:將Vector4f的數組傳遞給OpenCL內核作爲浮點數
0
A
回答
0
的方法有很多,
1 - 最好的可能是使用一個Matrix4Xf
,因爲它允許對整個組向量馬上開始工作:
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 - 使用std::vector<Vector4f>
(與Vector4f *相同但沒有內存管理問題):
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
好的 - 做了更多的研究。的解決方案是使用由本徵::地圖類別所提供的原料緩衝器: https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
我可以創建浮標原始緩衝區然後創建包裹浮緩衝器到載體中的本徵::地圖對象。
相關問題
- 1. 如何將數組傳遞給OpenCL內核?
- 2. Java OpenCL:將標量參數傳遞給JOCL中的內核
- 3. 傳遞給OpenCL內核時image2d_t損壞
- 4. 使用extern傳遞給內核的opencl參數
- 5. 將數組傳遞給OpenCL中的函數參數
- 6. 將參數傳遞給內核模塊
- 7. 將浮點數組賦給libmfcc庫
- 8. 將Mat傳遞給OpenCL內核導致分割錯誤
- 9. 如何在OpenGL ES 2.0中將浮點數組傳遞給Shader?
- 10. OpenCL:使用struct作爲內核參數
- 11. OpenCL:爲什麼指向指針的指針不能作爲參數傳遞給內核函數?
- 12. C#/ OpenCL - 二維數組作爲內核參數
- 13. OpenCL,多工作組/內核?
- 14. 如何將浮點數作爲模板參數傳遞?
- 15. 傳遞結構的OpenCL內核
- 16. 將修改過的數組作爲參數傳遞給函數
- 17. 將數組傳遞給mixin(內聯)
- 18. OpenCL內核參數
- 19. OpenCL內核參數
- 20. 將函數數組作爲參數傳遞給函數
- 21. 如何浮動數組傳遞給glVertexAttribPointer
- 22. OpenCL傳遞矩陣作爲參數
- 23. 將數組作爲URL參數傳遞給組合
- 24. 以傳遞值的概念調用opencl內核的函數
- 25. opencl遍歷內核中的數組
- 26. iOS將輸出浮點參數傳遞給函數
- 27. 將C#3D數組作爲一維字節數組傳遞給C++庫
- 28. 將對象內的對象作爲參數傳遞給函數
- 29. 將數組作爲參數傳遞給函數
- 30. 將數組作爲參數傳遞給函數C