我制作了一个简单的矩阵乘法程序,有两个矩阵 50000x50000 并将它们相乘。我使用库 eigen 和 matlab 在 C++ 中完成了此操作。然而,matlab 中的执行时间比使用 eigen 低。在使用 eigen 时,我将所有编译(可能还有运行)选项保留为默认值。
我知道 matlab 是作为矢量化程序构建的,它可以借助多处理器和并行化。但是,如果我想开发具有大型矩阵和线性代数的程序,是否有可能使用 eigen 库击败 matlab 的性能?或者必须使用专有的英特尔(或其他)库?有什么意见我们可以如何做到这一点吗?
最佳答案
即使打开所有优化,也很难击败 MATLAB
。要充分利用 Eigen
,您需要使用并行支持进行编译(gcc
中的 -fopenmp
),并打开优化 ( -O3
)。即使在这种情况下,MATLAB
也会稍微快一些,主要是因为它使用 Intel MKL 专有库来充分利用 Intel 芯片,所以除非你购买它,否则我认为你不会能够击败它。我目前正在一个项目中使用 Eigen,但无法击败 MATLAB(至少对于密集矩阵乘法而言)。
例如,对于 A*B
,其中 A
和 B
为 1000 x 1000
最佳平均时间我能得到的是:
MATLAB
:0.32 秒
特征
:0.44秒
对于2000 x 2000
,
MATLAB
:2.80 秒
特征
:3.45秒
系统:MacbookPro 2013,OS X。
PS:我非常怀疑您是否能够对 50000x50000
矩阵进行乘法(至少在普通计算机上),因为您将耗尽 RAM。
关于c++ - 在 C++ 中使用 'eigen' 库可以在大矩阵操作中击败 matlab 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24050403/