Dan*_*iel 6 c++ cuda gpgpu matrix
我希望工作大约4000个固定大小(3x3,4x4)矩阵,做矩阵求逆和特征分解等事情.
在我看来,并行化这种方法的最佳方法是让许多GPU线程中的每一个都在单个问题实例上工作.
有合理的方法吗?我已经阅读:http://www.culatools.com/blog/2011/12/09/batched-operations/但据我所知,它始终是"正在处理"的东西,没有解决方案.三年后,我希望有一个很好的解决方案.
到目前为止,我看过:
Eigen::MatrixXf并不能用nvcc V7.0.27Eigen 3.2.90(mercurial)编译.在这一点上,我很想放弃在GPU上做这件事.遗憾的是,因为我希望算法的实时性能要求每0.1秒反转4000个3x3矩阵大约100次.
cublas 函数getrfBatched和 getriBatched 专为小矩阵的批量求逆而设计。这应该比动态并行或流(您的第二种和第三种方法)更快。此外,批处理求解器以源代码形式提供 ,可以进行矩阵求逆。您需要以注册开发人员身份登录developer.nvidia.com 才能访问此链接。
另外,我不确定是否有类似 cuBLAS 的东西也可以进行特征分解或 SVD。(据我所知,CULA 不支持从内核内部调用其例程)。
Cusolver 提供了一些特征求解器函数。然而,它们不是批处理的,也不能从设备代码中调用,因此您面临着流作为除此之外的唯一选择。