我的问题:我有5对角单精度矩阵,尺寸大约为5000x5000(因此那里有大约25000个非零元素)并且必须求解线性方程组。使用“\”运算符时,MATLAB使其持续约1 ms。我尝试用CUDA实现它并遇到以下问题。
首先,CUBLAS无法求解非三角形线性方程,也没有任何分解函数( getrfBatched()除外,它受32x32维度的限制)。好的,我使用了免费版的CULA库并且计算时间太慢,因为这个版本没有带状解算器。
第二,我尝试使用CUSPARSE库。我试过检查共轭梯度法。但事实证明它也很慢,因为它有太多(数百)次迭代(但每个人都非常快,不到1毫秒)。
第三,因为CUSPARSE库有不完整的Cholesky和LU分解函数,我尝试检查预条件共轭梯度法。但它也太慢了,因为* cusparseScsrsv_analysis()* / * cusparseScsrsv_solve()*函数分别需要25和8毫秒。
现在我不知道该怎么办。看来我需要快速带状矩阵求解实现,但我找不到相应的库。可能我没有使用GPU来解决这个问题,而且我的问题有一些CPU优化的库?
答案 0 :(得分:2)
如果您的时间安排包括数据传输时间,那么GPU计算可能会慢一些。
您可以尝试更多的GPU库。
对于CPU lib,我相信这个可能在它提供的所有例程中具有最高性能。事实上,MATLAB将其用作线性代数计算的后端。
答案 1 :(得分:1)