c++ - BOOST uBLAS 矩阵乘积极慢

标签 c++ performance boost ublas boost-ublas

有没有办法 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/

相关文章:

Java 9 : AES-GCM performance

c++ - boost::interprocess 线程安全吗?

c++ - boost::accumulators::statistics 的中值输出令人困惑

C++ - 重新解释此数据的最快方法

c++ - 初始化并插入优先级队列 (C++)

python - 找出一个集合与集合集合中的所有其他集合的相似程度

c++ - 在 C++ 中使用 Boost 生成 UUID 的示例

c++ - 透明地抽象一个 iostream 接口(interface)

c++ - 算术运算符返回类型

Python Numpy 数据类型性能