s******n 发帖数: 6806 | 1 一直以为matlab计算很慢,所以在学着用GSL,
在求解一个线性系统Ax=b;
A大概是1000x1000的稀疏矩阵。
1.在matlab里面直接用x=A\b; 小于10秒的时间结果就出来了。
2. 但是,同样的数据,一样的规模,我在VC里面用GSL去算,
分别用了 LUsolver, svdSolver,和householder solver,
都非常慢,最快的是LUsolver,用了大概2.5mins。其他两个都大于5分钟,
我就给程序stop了。
这个速度的比较让我很失望,不知道为什么会差这么多,
如果这样那还不如就用matlab算了。
大家用过GSL里这些solver的,觉得速度怎么样呢? |
a**a 发帖数: 416 | 2 速度取决于两个因素: 底层blas库,和稀疏矩阵的节点重排算法。Matlab这两者
几乎都是最好的(intel的MKL和最优的节点重排算法之一)。搞清楚这两个你才
可以超越Matlab. 否则你还是用回Matlab吧。
【在 s******n 的大作中提到】 : 一直以为matlab计算很慢,所以在学着用GSL, : 在求解一个线性系统Ax=b; : A大概是1000x1000的稀疏矩阵。 : 1.在matlab里面直接用x=A\b; 小于10秒的时间结果就出来了。 : 2. 但是,同样的数据,一样的规模,我在VC里面用GSL去算, : 分别用了 LUsolver, svdSolver,和householder solver, : 都非常慢,最快的是LUsolver,用了大概2.5mins。其他两个都大于5分钟, : 我就给程序stop了。 : 这个速度的比较让我很失望,不知道为什么会差这么多, : 如果这样那还不如就用matlab算了。
|
e********k 发帖数: 5 | 3 matlab是已经优化了的,一般的程序很难超越。。。 |
b***e 发帖数: 38 | 4 Even for a 1000 by 1000 dense matrix, it takes a LU solver written in C less
than 5 second on a 2.6 GHz processor. Besides, the LU solver is not
optimized at all. It seems your machine needs to be upgraded. The
performance of sparse LU is problem dependent. It's hard to predict the CPU
time just by the number of unknowns. Again on a 2.6 GHz CPU, you can solve a
matrix with 100,000 unknowns in less than 10 seconds or even 1 second with
a sparse LU solver written in C if the problem is nice.
Ma |
s******n 发帖数: 6806 | 5 我的破电脑不是双核的,是2.3Ghz,
应该不至于慢很多吧。
双核应该没有区别吧。
less
CPU
a
with
and
【在 b***e 的大作中提到】 : Even for a 1000 by 1000 dense matrix, it takes a LU solver written in C less : than 5 second on a 2.6 GHz processor. Besides, the LU solver is not : optimized at all. It seems your machine needs to be upgraded. The : performance of sparse LU is problem dependent. It's hard to predict the CPU : time just by the number of unknowns. Again on a 2.6 GHz CPU, you can solve a : matrix with 100,000 unknowns in less than 10 seconds or even 1 second with : a sparse LU solver written in C if the problem is nice. : Ma
|
s******n 发帖数: 6806 | 6 thanks,
看来我还是得用matlab
【在 a**a 的大作中提到】 : 速度取决于两个因素: 底层blas库,和稀疏矩阵的节点重排算法。Matlab这两者 : 几乎都是最好的(intel的MKL和最优的节点重排算法之一)。搞清楚这两个你才 : 可以超越Matlab. 否则你还是用回Matlab吧。
|
k******n 发帖数: 35 | 7 gsl用的是dense algorithms。在matlab里,如果你的矩阵是稀疏的,matlab会调用
umfpack来求解。即使对稠密矩阵,gsl也有可能比matlab慢,因为matlab用intel的
LAPACK。由于技术的原因,gsl还没有办法把LAPACK封装在其中,接口是主要的问题。
对于单纯的矩阵计算,超越matlab的效率是很难的。Actually, you are competing
with Intel's MKL and Tim Davis' UMFPACK. |
a**a 发帖数: 416 | 8 不错.即使是稀疏矩阵计算, 里面使用的实际上是分块稀疏矩阵算法, 每一小块
又使用稠密的矩阵算法, 调用的是底层blas库, matlab的情况就是MKL. 所以
底层的blas库对于稀疏矩阵计算的效率也是至关重要的。
【在 k******n 的大作中提到】 : gsl用的是dense algorithms。在matlab里,如果你的矩阵是稀疏的,matlab会调用 : umfpack来求解。即使对稠密矩阵,gsl也有可能比matlab慢,因为matlab用intel的 : LAPACK。由于技术的原因,gsl还没有办法把LAPACK封装在其中,接口是主要的问题。 : 对于单纯的矩阵计算,超越matlab的效率是很难的。Actually, you are competing : with Intel's MKL and Tim Davis' UMFPACK.
|