延迟调用MATLAB函数
Delay on call to MATLAB function
我从我的c++代码调用MATLAB函数(dll)。这个函数获取一个数组作为参数。函数对数组的每个成员做一些计算。我做了两个测试我第一次用一个有24个元素的数组来调用这个函数。第二次,我用8个元素调用了这个函数3次。第二次测试花了两倍多的时间。为什么?进入和退出MATLAB函数是否需要很多时间?
您已经注意到调用一个MEX函数需要花费相当多的时间。考虑Matlab必须做的最小值:
- 扫描Matlab路径以确保函数映射到MEX文件(并且MEX文件没有更改)
- 从其DLL或共享库加载MEX函数,然后解析其
mexFunction
符号。 - 分配输入输出参数数组,并初始化
- 调用函数
- 查找并释放您的MEX函数加载的任何临时变量
- 释放输入和输出参数数组
理论上,Matlab可以使用缓存来避免前两个步骤。但我不确定是否有。后续步骤都不能跳过,甚至Matlab解释器(或其JIT编译器)也不能真正优化。基本上,如果您的计算速度很快,那么您将花费更多的时间调用MEX函数,而不是实际运行它。
您已经找到了最大化MEX性能的方法,即让MEX函数在每次调用中尽可能多地执行操作。
除了让它在每次调用中处理尽可能多的数据之外,还应该将任何简单的外部循环推入MEX函数。简单的循环很容易在MEX函数中实现。它们也比Matlab中的循环(甚至是jit编译的Matlab)更快,并且避免了重复调用MEX函数的成本。
您还可以看到明智地使用mexLock
函数是否会有所帮助。您应该提供一些方法来解锁具有mexUnlock
的MEX函数,否则您可能会开始泄漏内存,并且每次更改MEX函数时也必须重新启动Matlab会话。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- 如何在C++中编写 MATLAB fix(X) 函数?
- 将C++中的多个参数传递给MatLab共享库函数
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 从 Matlab Coder 初始化主函数
- 使用 Boost 的 UDP 通信(用于 MATLAB s 函数)
- 将MATLAB炒作函数转换为C
- 创建 Matlab MEX 函数时,我是否将 mexFunction 放在 c++ 头文件或源文件中
- 从MEX函数中清除MATLAB命令窗口
- 使用 MATLAB 语法的 c++ 函数参数?
- 如何使用 Matlab 函数 ordfilt2 与 OpenCV C++
- 如何使用C 代码调用MATLAB自定义函数
- 如何从C++调用 matlab 成员函数
- MATLAB函数手柄和C 功能指针
- MATLAB S函数构建器如何将编译器更改为G
- 传递用于在 C++ 中调用 MATLAB 函数的参数
- 在 matlab 中编写一个非常基本的 mex 函数
- 从项目中调用 MATLAB 或 Scilab 函数C++
- 导入函数 Matlab 编码器和C++可执行文件