由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Computation版 - 如何用CUDA同时计算几百个实对称矩阵的eigenvalues/eigenvecot
相关主题
关于超大型矩阵的算法CUDA
[求教]请各位推荐解大型矩阵的子程序 (转载)求一个特殊矩阵的特征值
求助: 3*3 matrix eigenvalue problem请问C里面有没有现成的matrix computation as matlab
Matlab计算精度请教怎么估计一个矩阵对角化需要的时间?
问个matlab的eigs的问题GPU for scientific computing
我也有一个对角化的问题谁有“GPU高性能运算之CUDA”这本书?
高维 PCA请问玩cuda的童鞋大家都用什么GPU啊
线性代数一问关于CUDA
相关话题的讨论汇总
话题: 矩阵话题: gpu话题: cpu话题: cuda话题: jacobi
进入Computation版参与讨论
1 (共1页)
g**********t
发帖数: 475
1
我有一个程序要反复计算几百个(约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可以参考的?先谢谢了。
s*****e
发帖数: 10
2
你的matrix太小了。小矩阵得计算,CPU上可以很好得cache,SIMD也能优化上,所以
GPU没有优势。
GPU计算得优势主要优势在于computation and memory access balance。或者说memory
access hidden. 如果同样得code CPU能很好得cach得话,GPU就没有比较大得优势了。
你这个计算,我觉得应该是3倍左右的提升,不知道为什么你才1倍。再优化试试。

32
CPU

【在 g**********t 的大作中提到】
: 我有一个程序要反复计算几百个(约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可以参考的?先谢谢了。

I******c
发帖数: 163
3
我觉得也可以把矩阵放到shared memory里去啊。
I******c
发帖数: 163
4
如果一个数需要8byte去存贮的话,64*64的矩阵需要32kb的shared memory。现在的gpu
都有48kb/sm的shared memory了。
g**********t
发帖数: 475
5
我觉得主要是Jacobi method的效率太差了,虽然很容易并行,但是对于我这种大小的
矩阵,其他的算法,比如QR algorithm可能更合适。就拿计算单个64 x 64的矩阵来说
,GPU上我的程序(Jacobi method)实际比CPU(用GSL,貌似是QR decomposition类的算
法)慢6、7倍,只有在计算很多的矩阵时GPU才能快一倍(2x提升)。我觉得主要是Jacobi
method不大适合我的矩阵大小。不知道QR decomposition类的算法能不能在GPU上高效
实现?

memory
了。

【在 s*****e 的大作中提到】
: 你的matrix太小了。小矩阵得计算,CPU上可以很好得cache,SIMD也能优化上,所以
: GPU没有优势。
: GPU计算得优势主要优势在于computation and memory access balance。或者说memory
: access hidden. 如果同样得code CPU能很好得cach得话,GPU就没有比较大得优势了。
: 你这个计算,我觉得应该是3倍左右的提升,不知道为什么你才1倍。再优化试试。
:
: 32
: CPU

g**********t
发帖数: 475
6
矩阵是cache在shared memory里的,已经考虑了bank conflict。用的是单精度浮点,
cache了两个矩阵(一个放原始矩阵,一个放eigenvectors),大概用了32k的shared
memory。可能这也是个影响效率的原因,因为shared memory用的太多了,每个SM只能
launch一个block。

【在 I******c 的大作中提到】
: 我觉得也可以把矩阵放到shared memory里去啊。
s*****e
发帖数: 10
7
如果单个计算GPU是CPU的1/6, 那么throughput就大概是
GPU SM # / CPU core # * ratio * 8 =
16 /4 * 1/6 * 8 ~= 5。 所以如果你把memory access hide 好的话,应该是4
到5倍。我做过这个类似的计算,实际就是大概3到4倍。你的程序还需要好好优化。特
别是这个8 blocks per sm.
从你下面的回帖,可以看出你对occupation没有很好的优化。
如果你是用CUDA 4.0的话,compiler帮你做了一些优化,所以你的效率大概是
5/8 * 2 ~= 2 倍。make sense to your observation。 :-)
Good luck

Jacobi

【在 g**********t 的大作中提到】
: 我觉得主要是Jacobi method的效率太差了,虽然很容易并行,但是对于我这种大小的
: 矩阵,其他的算法,比如QR algorithm可能更合适。就拿计算单个64 x 64的矩阵来说
: ,GPU上我的程序(Jacobi method)实际比CPU(用GSL,貌似是QR decomposition类的算
: 法)慢6、7倍,只有在计算很多的矩阵时GPU才能快一倍(2x提升)。我觉得主要是Jacobi
: method不大适合我的矩阵大小。不知道QR decomposition类的算法能不能在GPU上高效
: 实现?
:
: memory
: 了。

1 (共1页)
进入Computation版参与讨论
相关主题
关于CUDA问个matlab的eigs的问题
MPI数据传输速度是多少啊?GPU呢?我也有一个对角化的问题
NVIDIA HPC position in Beijing高维 PCA
请教一个关于大概估计GPU加速效果的问题线性代数一问
关于超大型矩阵的算法CUDA
[求教]请各位推荐解大型矩阵的子程序 (转载)求一个特殊矩阵的特征值
求助: 3*3 matrix eigenvalue problem请问C里面有没有现成的matrix computation as matlab
Matlab计算精度请教怎么估计一个矩阵对角化需要的时间?
相关话题的讨论汇总
话题: 矩阵话题: gpu话题: cpu话题: cuda话题: jacobi