Skip to content

test for different solvers: suitesparse-chol mkl-pardiso eigen-ldlt suitesparse-umf gpu-cublas eigen-cg.

Notifications You must be signed in to change notification settings

BeanLiu1994/solver_speed_test

Repository files navigation

SpeedTest

测试目标

求解 Ax = b 的耗时。

需要的第三方库

  • Suitesparse
  • Intel MKL
  • Eigen3
  • CUDA

测试数据

A 为对称的稀疏矩阵, b为列向量。 通过截取A、b的左上部分得到不同规模的问题。

问题中的A为一个Laplacian矩阵,大小 93864 x 93864 含有2133774个非零元素。 仅有0.02%的元素为非零的。

A中元素分布: spy_img

这里只提供了一份数据。如果换用不同的Ab矩阵,结果可能会有较大变化。

测试方法

方法 介绍
PardisoLDLT Eigen到intel mkl的一个PARDISO library 接口
SimplicialLDLT Eigen自己实现的一个LDLT分解
UmfPackLU Eigen到UmfPack的LU分解接口
CholmodSupernodalLLT Eigen到SuiteSparse中cholmod的接口
ConjugateGradient Eigen自带的共轭梯度迭代方法
cusolverSpDcsrlsvchol cusolver中的接口, 用法详见cuda提供的samples

注意事项: 我可能不太清楚这些方法主要针对的是什么问题,所以依旧有可能在使用方法上还未达到最优的结果,但基本上文档提到的使用方法我都遵守了。

测试效果

总体来说,CholmodSupernodalLLT最快。

size CholmodSupernodalLLT PardisoLDLT SimplicialLDLT UmfPackLU cusolverSpDcsrlsvchol ConjugateGradient
10 3.60E-05 1.90E-04 1.00E-05 4.40E-05 1.93E-03 3.00E-06
100 1.00E-04 1.61E-04 3.00E-05 8.50E-05 2.57E-03 4.00E-05
300 1.39E-04 2.96E-04 5.90E-05 1.93E-04 3.06E-03 1.09E-04
500 2.24E-04 5.13E-04 1.06E-04 3.87E-04 3.98E-03 3.29E-04
700 2.96E-04 6.86E-04 1.59E-04 6.39E-04 4.34E-03 5.50E-04
1000 4.99E-04 1.27E-03 3.08E-04 1.06E-03 5.33E-03 1.47E-03
2600 2.45E-03 5.79E-03 1.66E-03 4.86E-03 1.13E-02 1.49E-02
5000 5.76E-03 1.26E-02 4.85E-03 1.32E-02 2.51E-02 7.60E-02
7400 1.02E-02 2.05E-02 1.14E-02 2.43E-02 5.23E-02 2.09E-01
10000 1.55E-02 2.73E-02 2.27E-02 3.81E-02 1.20E-01 4.91E-01
15000 2.52E-02 4.46E-02 5.37E-02 6.57E-02 2.15E-01 1.30E+00
20000 3.71E-02 6.53E-02 1.00E-01 9.29E-02 5.97E-01 2.35E+00
25000 4.91E-02 8.47E-02 1.36E-01 1.21E-01 9.47E-01 4.09E+00
30000 6.10E-02 1.09E-01 1.92E-01 1.53E-01 1.40E+00 5.64E+00
40000 8.38E-02 1.51E-01 3.73E-01 2.23E-01 3.89E+00 1.06E+01
50000 1.08E-01 1.85E-01 5.27E-01 3.06E-01 4.56E+00 1.67E+01
60000 1.27E-01 2.27E-01 5.57E-01 3.49E-01 4.79E+00 2.31E+01
70000 1.58E-01 2.80E-01 8.71E-01 4.32E-01 6.89E+00 3.85E+01
80000 1.85E-01 3.34E-01 1.03E+00 4.97E-01 7.99E+00 5.88E+01

单位:秒

要注意的是结果可能与稀疏程度情况有关,这个测试结果不能代表所有情况,如果需要对新的问题进行测试,可以替换文件spA和b为对应的矩阵内容。

cholmod与eigen的关系 eigen使用了cholmod的分解,但当时eigen使用的是cpu版本。而印象中eigen并没有提供cholmod的gpu版接口,不知道gpu版本会使效果如何变化。有兴趣后续可以尝试一下。

矩阵数据格式

spA: 对称稀疏方阵

rows cols
r0 c0 v0
r1 c1 v1
...
rn cn vn

b: 列向量

v1
v2
...
vn

About

test for different solvers: suitesparse-chol mkl-pardiso eigen-ldlt suitesparse-umf gpu-cublas eigen-cg.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published