g**********t 发帖数: 475 | 1 【 以下文字转载自 Computation 讨论区 】
发信人: geneticdrift (不懂微积分), 信区: Computation
标 题: 如何用CUDA同时计算几百个实对称矩阵的eigenvalues/eigenvecot
发信站: BBS 未名空间站 (Mon Jul 2 02:38:51 2012, 美东)
我有一个程序要反复计算几百个(约500个)64 x 64的实对称矩阵的所有的
eigenvalues/eigenvectors。自己用CUDA实现了一个Jacobi algorithm with chess
tournament ordering。具体来说,每个block(含有32个threads)处理一个矩阵,这32
个threads并行消去一个矩阵中的32个off-diagonal elements,直到算法收敛。结果无
误,计算单个矩阵所花的时间也和最近的一篇paper里的数据接近。但是这个算法和CPU
上的library比没有太大的优势。在同时处理这500个矩阵的情况下,和GSL里面高度优
化的函数比较(用单CPU),用GPU仅仅快了一倍。我觉得主要是Jacobi algorithm对于这
个大小的矩阵效率太差,而GSL里面的函数用的好像是QR decomposition,虽然只有一
个thread但是效率很高。有没有比较适合我的问题的能在GPU上高效执行的算法?有没
有什么paper/code可以参考的?先谢谢了。 |
c****p 发帖数: 6474 | 2 因为里面的控制流太多了吧。
32
CPU
【在 g**********t 的大作中提到】 : 【 以下文字转载自 Computation 讨论区 】 : 发信人: geneticdrift (不懂微积分), 信区: Computation : 标 题: 如何用CUDA同时计算几百个实对称矩阵的eigenvalues/eigenvecot : 发信站: BBS 未名空间站 (Mon Jul 2 02:38:51 2012, 美东) : 我有一个程序要反复计算几百个(约500个)64 x 64的实对称矩阵的所有的 : eigenvalues/eigenvectors。自己用CUDA实现了一个Jacobi algorithm with chess : tournament ordering。具体来说,每个block(含有32个threads)处理一个矩阵,这32 : 个threads并行消去一个矩阵中的32个off-diagonal elements,直到算法收敛。结果无 : 误,计算单个矩阵所花的时间也和最近的一篇paper里的数据接近。但是这个算法和CPU : 上的library比没有太大的优势。在同时处理这500个矩阵的情况下,和GSL里面高度优
|
s***0 发帖数: 117 | 3 What's the model of the GPU?
And, did you try using the NVIDIA SDK eigenvalue code? |
g**********t 发帖数: 475 | 4 显卡用的是tesla M2070 (Fermi generation)。已经看过了cuda SDK里面的例子,但是
那个是bisection algorithm,貌似这个算法只能算eigenvalues,不能算eigenvectors?
【在 s***0 的大作中提到】 : What's the model of the GPU? : And, did you try using the NVIDIA SDK eigenvalue code?
|