有的时候写出来的程序慢也许并不是算法有问题,而是用的库比较慢;也可能并不是库本身慢,而只是你的写法不够高效。在经历了无数次令人蛋疼的等待后,我决定比较一下这几个所谓的高效的线性代数库(OpenCV虽然目标是计算机视觉,但也提供了比较丰富的代数计算能力),看看它们的性能到底怎么样。
有人已经做过类似的事情了,比如 OpenCV vs. Armadillo vs. Eigen on Linux revisited,这哥们比较了这几个库在各种矩阵运算方面的效率,总结的比较齐全。但是,在计算机视觉领域这些还不够,比如经常使用的相似性度量(Similarity
Measure)的计算。当然后很多种方法,这里就考虑最基本的SAD(Sum of Absolute Difference)方法吧,简单来说就是把两个矩阵(或者向量)相减,求个绝对值,再加起来。这个计算看起来挺简单的,不过比较的结果令我比较意外。
先把代码贴出来吧。
// PerformanceTest.h
#pragma warning(disable:4344)
#define DEIGEN_NO_DEBUG
#define DNDEBUG
#include
#include
#include
#include
#include
#include
#include "Timer.h"
using namespace std;
// PerformanceTest.cpp
#include "PerformanceTest.h"
int main(void)