有没有办法提高boost ublas产品的性能?
我有两个矩阵 A,B 我想乘/添加/子/...
在 MATLAB 与 C++ 中,对于 2000x2000 矩阵运算,我得到以下时间 [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:一切都在发布( NDEBUG/MOVE_SEMANTICS/.. )模式下进行。
编辑 4:产品结果的预分配矩阵不影响运行时间。