C++矩阵库比较

同化系统中要大量使用矩阵类,现在使用的是之前有我们自己发展的纯C++的一个矩阵类,而后又引入了IT++类的支持,现在回头来看,又有很多新的C++矩阵类库发展出来,并且有很好的特性。今天就用了几个测试代码在我的DELL T7400工作站进行了测试,主要比较的是我们自己的矩阵类、armadillo、IT++(参考文献中还有和其他矩阵类的比较)。

1. 实际测试平台
UBUNTU 11.04,DELL T7400 INTEL XEON X5450@3.0GHz(双CPU,各四核,测试时只用1核)。
g++ 4.5.2
it++ 4.0.7 (系统自带)
armadillo 1.2.0 (手工安装)
2. 编译方法
armadillo采用的是如下编译方法:

g++ -o test -larmadillo -O2 -fwhole-program xxx.cpp

IT++采用的是如下编译方法:

g++ -o test -litpp -O2 -fwhole-program xxx.cpp

我们的矩阵类用的是如下的编译方法:

g++ -o test -larmadillo -O2 -fwhole-program -ldas/include/ ldas/src/util/exception.cpp cas1.cpp

3. 测试方法及代码
主要测试矩阵的加法运算和乘法运算,构建了ABZ三个1000*1000矩阵,分别测试了Z=A+B、Z=A*B以及Z=A+B+C、Z=A*B*C各100次,比较其计算时间。
armadillo代码:

#include
#include
int main() {
int size = 1000; int N = 100;
//Armadillo
// size and N are specified by the user on the command line
arma::mat A = arma::randu(size,size);
arma::mat B = arma::randu(size,size);
arma::mat C = arma::randu(size,size);
arma::mat Z = arma::zeros(size,size); int i;
arma::wall_clock timer; timer.tic();
for(i=0; i #include "exception.h"
int main() {
int size = 1000; int N = 100;
//Armadillo
// size and N are specified by the user on the command line
ldas::Matrix A(size,size);
for(int i=0;i B(size,size);
for(int i=0;i C(size,size);
for(int i=0;i Z(size,size);
arma::wall_clock timer; timer.tic();
for(int i=0; iit++ vs armadillo


已发布

分类

来自

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注