c++ - 在 C++ 中使用 'eigen' 库可以在大矩阵操作中击败 matlab 吗?

标签 c++ matlab gcc eigen

我制作了一个简单的矩阵乘法程序,有两个矩阵 50000x50000 并将它们相乘。我使用库 eigen 和 matlab 在 C++ 中完成了此操作。然而,matlab 中的执行时间比使用 eigen 低。在使用 eigen 时,我将所有编译(可能还有运行)选项保留为默认值。

我知道 matlab 是作为矢量化程序构建的,它可以借助多处理器和并行化。但是,如果我想开发具有大型矩阵和线性代数的程序,是否有可能使用 eigen 库击败 matlab 的性能?或者必须使用专有的英特尔(或其他)库?有什么意见我们可以如何做到这一点吗?

最佳答案

即使打开所有优化,也很难击败 MATLAB。要充分利用 Eigen,您需要使用并行支持进行编译(gcc 中的 -fopenmp),并打开优化 ( -O3)。即使在这种情况下,MATLAB 也会稍微快一些,主要是因为它使用 Intel MKL 专有库来充分利用 Intel 芯片,所以除非你购买它,否则我认为你不会能够击败它。我目前正在一个项目中使用 Eigen,但无法击败 MATLAB(至少对于密集矩阵乘法而言)。

例如,对于 A*B,其中 AB1000 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/

相关文章:

c++ - CFileDialog (MFC) 异常

c++ - 远程主机不编译,但它应该

c - 如何防止引用的包含搜索当前源文件的目录?

c - 在 c 库中查找重复声明的函数(单个文件)

c++ - 编译错误 - 没有匹配的函数可调用 'Exception::Exception(Exception)'

C++ 错误 : class template has already been defined

matlab - 如何向向量中插入元素?

java - 从 Java 调用 matlab 回调/函数句柄

c++ - 如何记录从源顶点到目的顶点的所有最短路径

python - 将 Matlab 矩阵串联转换为 Python