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可以参考的?先谢谢了。 |
d********f 发帖数: 43471 | 2 http://saahpc.ncsa.illinois.edu/10/papers/paper_19.pdf
based on this paper the speed-up should be significant
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里面高度优
|
g**********t 发帖数: 475 | 3 谢谢博导。我现在的程序就是基于这篇文章写的。这篇文章里的提升是对单个大矩阵来
说的,而且在这篇CPU端用的是同样的算法(Jacobi method)。其实CPU端可以用更高效
的算法,这样GPU就没有太大优势了。我想问一下有没有适合我的矩阵大小的,可以在
GPU上高效实现的算法?比如QR algorithm?
【在 d********f 的大作中提到】 : http://saahpc.ncsa.illinois.edu/10/papers/paper_19.pdf : based on this paper the speed-up should be significant : : 32 : CPU
|
p*********g 发帖数: 9527 | |
g**********t 发帖数: 475 | 5 这里不是传说中万能的学术版么?不过现在joke的人气不行,听说pie版也比较万能,
一会儿转发过去。
【在 p*********g 的大作中提到】 : 考,我以为走错版了。
|
d********f 发帖数: 43471 | 6 cuda community太小了,老中作这个尤其少,你真想问直接问paper的作者不就好了,
cuda的东西基本靠蒙,从你的参数来看64x64的矩阵说实话基本很难优化,基本不具备
partition的可能。
【在 g**********t 的大作中提到】 : 这里不是传说中万能的学术版么?不过现在joke的人气不行,听说pie版也比较万能, : 一会儿转发过去。
|