0
我試圖使用犰狳庫來求解稀疏線性系統。使用LAPACK和SuperLU的犰狳線性稀疏系統求解器
#include <iostream>
#include<armadillo>
using namespace std;
using namespace arma;
int main(int argc, char** argv) {
int no_examples = 5000;
sp_mat A = sprandu<sp_mat>(no_examples,no_examples,0.7);
vec b = randu<vec>(no_examples);
wall_clock timer;
double t;
timer.tic();
vec x1 = spsolve(A, b,"superlu");
t= timer.toc();
cout<<"Elapsed time is:"<<t<<endl;
}
我使用g++ demo.cpp -O3 -I/usr/include/armadillo_bits -DARMA_DONT_USE_WRAPPER -lsuperlu -lopenblas -llapack
編譯程序。使用superlu
選件獲得的運行時間約爲8.5 seconds
。當在spsolve
see here中用LAPACK
選項解決系統系統時,運行時間爲4.01 seconds
。有人可以解釋爲什麼:
- 解決方案相同的系統需要比LAPACK更長的SuperLu? 我的直覺是他們可能會使用不同的算法來解決稀疏線性系統。歡迎任何其他想法!
編輯︰我運行在Ubuntu 14.04 export OPENBLAS_NUM_THREADS=4
。
我在[0,.7]中改變了密度,但結果是一樣的。 SuperLU需要比LAPACK的密集LU分解更長的時間。 – chandresh
@chandresh這很奇怪。 SuperLU時間不會改變?嘗試使用矩陣大小10,000。 – ztik
與上面相同的結論。 – chandresh