我个人喜欢高级编程语言。对于概念验证的东西,MATLAB很棒。另外,您可以使用MATLAB轻松可视化几乎所有内容。

但是,为了提高速度,我经常需要编写C或C++代码。虽然C / C++的可视化令人不安。在理想的世界中,我希望以C / C++的速度运行MATLAB可视化工具。对我而言,这意味着我应该MEX必要的C / C++函数,并使用MATLAB的工具执行可视化,仅从MATLAB脚本调用它们。理想情况下,这使我两全其美。但是,我不想由于通过MEX文件调用函数而导致C / C++运行时间缓慢。

当调用C / C++函数作为已编译的MEX函数时,是否牺牲了10x-100x speed gains of C++?也就是说,从MATLAB脚本调用的mexFunction(param1, param2)是否一定比运行已编译的二进制文件慢?

最佳答案

我认为要回答这个问题,您必须考虑真正造成开销的原因。每个对mex的函数调用本身都会导致开销,并且进一步将数据传递给mex(根据我的经验,仅该方向,而不是传回结果)也会导致一些开销。我认为主要原因是M代码经过写时复制优化,这意味着我的代码从未复制输入数据,但是mex实现确实收到了复制。
举一个mex表现为“不好”的例子,我想我们都同意C++的迭代速度更快,并且mathworks可能拥有合格的程序员,所以why was I able to beat the performance implementing binary search in MATLAB?。在这种情况下,将数据传递给mex函数只会使其变慢。传递了许多数据,您必须为此付出开销,最后几乎没有触及这些数据(二进制搜索)。

最后,实际开销有多少?
对于nop call, it is only 0.00001s,(无输入,无输出,无计算)。
对于传递数据,我没有任何详细的基准测试,但是从上面链接的二进制搜索示例中,它必须低于0.5s / GB。

现在针对您的情况进行数学运算,并确定是否值得切换到c++。

关于c++ - 调用C/C++代码作为MEX文件与纯C/C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35022010/

10-10 21:15
查看更多