有没有办法提高boost ublas的乘积性能?
我有两个矩阵A,B,我想要进行乘法/加法/减法等运算...
在2000x2000的矩阵操作中,MATLAB和C ++的运行时间如下[s]
OPERATION | MATLAB | C++ (MSVC10)
A + B | 0.04 | 0.04
A - B | 0.04 | 0.04
AB | 1.0 | 62.66
A'B' | 1.0 | 54.35
为什么会有如此巨大的性能损失?
这些矩阵只是实数双精度。 但我还需要正定、对称和矩形乘积。
编辑: 代码很简单。
matrix<double> A( 2000 , 2000 );
// Fill Matrix A
matrix<double> B = A;
C = A + B;
D = A - B;
E = prod(A,B);
F = prod(trans(A),trans(B));
编辑2: 这些结果是10次尝试的平均值。标准偏差小于0.005。
我期望可能会有2-3倍的因素,但不是50倍!
编辑3: 所有测试都是在Release(NDEBUG / MOVE_SEMANTICS / ..)模式下进行的。
编辑4: 为产品结果预分配矩阵并没有影响运行时间。