同化系统中要大量使用矩阵类,现在使用的是之前有我们自己发展的纯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::MatrixA(size,size);
for(int i=0;iB(size,size);
for(int i=0;iC(size,size);
for(int i=0;iZ(size,size);
arma::wall_clock timer; timer.tic();
for(int i=0; iit++ vs armadillo
发表回复