【发布时间】:2013-12-29 01:37:50
【问题描述】:
我知道 C/C++ 是一种低级语言,与任何其他高级语言相比,它会生成相对优化的机器代码。但我想还有很多,这从实践中也可以看出。
当我进行简单的计算(例如对高斯样本集合进行蒙特卡罗平均)时,我发现 C++ 实现或 MATLAB 实现之间没有太大区别,有时实际上 MATLAB 在时间上表现得更好。
当我继续使用数千行代码进行更大规模的模拟时,真实的画面会慢慢出现。 C++ 仿真显示出卓越的性能,例如在时间复杂度上比等效的 MATLAB 实现好 100 倍。
大多数时候,C++ 中的代码几乎是串行的,没有明确地进行高保真优化。然而,据我所知,MATLAB 本质上做了很多优化。例如,当我尝试生成大量随机样本时就会出现这种情况,而使用 IT++/GSL/Boost 等库的 C++ 中的等价物执行相对较慢(使用的算法相同,即 mt19937)。
我的问题只是想知道 MATLAB/C++ 在性能上是否存在更简单的权衡。是不是就像人们说的,“只要有可能,C/C++ 就更好”(经常遇到的)?换个角度来看,“MATLAB 除了舒适还有什么用处?”
顺便说一句,我认为编码效率参数在这里并不重要,因为在这两种情况下都是同一个程序员。而且,我认为像 python,R 这样的其他替代品在这里不相关。但是对我们使用的特定库的依赖应该很有趣。
[我是通信系统编码理论的博士生。我一直使用 matlab/C++ 进行模拟,并且在这两种情况下都有编写几万行代码的合理经验]
【问题讨论】:
-
嗯,从性能的角度来看,matlab 更好,当你知道如何编码时,不知道如何编码 c++,其余时间 c++ 更好。
-
我已经完成了 matlab 到 C++ 的翻译。对“普通”matlab 代码的典型期望是 C++ 的速度要快 20 倍。
-
@Richard 是的,我忽略了这方面只是为了避免太多问题。我相信这个翻译提供了一个很好的见解。但我主要尝试关注 Matlab 与 C++ 的“原因和时间”。
-
我要提一下 MATLAB 的优点在于它的所有库都使用了相当强大的实现,因此您不必担心数值稳定性和选择哪种算法。另一方面,C++ 库可以提供所有相同的奢侈品……
-
MATLAB 中的许多关键部分都使用某种本机库(内部开发或使用 3rd 方库),并以编译语言(C/C++、Fortran)实现。例如,简单的 backslash operator
x = A\b实际上是十几种可能的底层实现的前端。对于在纯 MATLAB 中实现的其他部分,JIT 编译器有助于降低解释语言的成本。 MATLAB 也经常鼓励编写向量化代码(想想 SIMD 指令)。最后,GUI 的东西大部分是用 Java 实现的。
标签: c++ c performance matlab