改写cuda案例cuSolverRf ,使用"cusolverSp_LOWLEVEL_PREVIEW.h"中声明的函数。利用mexfucntion 调用cuda函数,得到CuMatlab_LU.mexw64 。函数支持double和complex数据类型以及dense和sparse输入。
使用方法[rl,vl,vl,ru,cu,vu,P,Q] = CuMatlab_LU(Data);
rl,vl,vl分别为int32,int32,double类型列向量(下三角矩阵L的csr描述,cuda为了稀疏性L对角线数据为0,在matlab计算时候需要补充),ru,cu,vu分别为int32,double类型列向量(上三角矩阵U的csr描述),rl、cl、ru、cu的角标为0。P,Q分别为行和列置换向量(角标为0). 注意:

1、matlab bucky数据。

cuda LU分解如下:

maltab lu分解(使用置换向量形式)

可见matlab LU分解非零向量较少。
2、对于带状稀疏矩阵。
数据A为cuda官方案例提供数据(取1000行,1000列),分解如下:

cuda LU分解:

matlab LU分解:

可以看出cuda LU分解数据更集中于对角线附近,而matlab分解更偏向于非零数据减少更具有稀疏性。
补充:对于小量数据cuda和maltab分解差别不大。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删