有没有办法 boost 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
为什么这里会有这么大的性能损失?
矩阵只是真正的 double 。 但我还需要正定、对称、矩形积。
编辑: 代码很简单
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 次尝试的平均值。 stddev 小于 0.005
我希望可能有 2-3 个因子,但不是 50 (!)
编辑 3: 一切都在发布 (NDEBUG/MOVE_SEMANTICS/..) 模式下进行。
编辑 4: 产品结果的预分配矩阵不影响运行时间。
最佳答案
发布您的 C+ 代码以获得任何可能的优化建议。
但是您应该知道,Matlab 对其设计的任务高度特化,您不太可能使用 Boost 来匹配它。另一方面 - Boost 是免费的,而 Matlab 显然不是。
我相信通过将 uBlas 代码绑定(bind)到底层的 LAPACK 实现,可以获得最佳的 Boost 性能。
关于c++ - BOOST uBLAS 矩阵乘积极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798285/