将 C/C++ 代码称为 MEX 文件与纯 C/C++
Calling C/C++ Code as MEX File vs. Pure C/C++
我个人喜欢高级编程语言。对于概念验证的东西,MATLAB很棒。此外,您还可以使用 MATLAB 轻松可视化几乎所有内容。
但是,为了速度,我经常需要编写 C 或 C++ 代码。不过,C/C++ 中的可视化是脖子上的痛。在理想情况下,我希望 MATLAB 可视化工具具有 C/C++ 的速度。对我来说,这意味着我应该MEX必要的C/C++函数,并从MATLAB脚本调用它们,使用MATLAB的工具执行可视化。理想情况下,这给了我两全其美的效果。但是,我不想因为通过 MEX 文件调用函数而导致 C/C++ 运行时间变慢。
在将 C/C++ 函数作为编译的 MEX 函数调用时,我是否会牺牲 C++ 10-100 倍的速度增益?也就是说,从 MATLAB 脚本调用的mexFunction(param1, param2)
是否一定比运行编译的二进制文件慢?
要回答这个问题,您必须考虑真正导致开销的原因。对 mex 本身的每个函数调用都会导致开销,并且进一步将数据传递给 mex(根据我的经验,只有那个方向,而不是传回结果)也会导致一些开销。我认为主要原因是 M-Code 是写入时复制优化的,这意味着我的代码从未复制输入数据,但 mex 实现确实会收到副本。举一个 mex 表现"糟糕"的例子,我想我们都同意 C++ 迭代速度更快,并且 mathworks 可能拥有合格的程序员,那么为什么我能够在 MATLAB 中实现二进制搜索的性能更好呢?在这种情况下,将数据传递给 mex 函数只会使其变慢。传递了大量数据,您必须为此支付开销,最后数据几乎没有被触及(二进制搜索)。
最后,开销到底有多大?对于nop调用,它只有0.00001s,(没有输入,没有输出,没有计算)。对于传递数据,我没有任何详细的基准,但从我上面链接的二叉搜索示例中,它必须低于 0.5s/GB。
现在为您的情况进行数学计算,并决定是否值得切换到 c++。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到