延迟调用MATLAB函数

时间:2013-03-19 17:24:00

标签: c++ matlab

我从我的C ++代码中调用MATLAB函数(dll)。此函数将数组作为参数。 函数对数组的每个成员进行一些计算。 我做了两次测试。 我第一次使用包含24个元素的数组调用此函数。 我第二次用8个元素调用了这个函数三次。 第二次测试花费了两倍的时间。 为什么? 进入MATLAB函数并退出它需要花费很多时间吗? 如果是,为什么?

1 个答案:

答案 0 :(得分:2)

您注意到,调用MEX功能需要花费相当多的时间。考虑Matlab必须做的最小值:

  1. 扫描Matlab路径以确保该函数映射到MEX文件(并且MEX文件未更改)
  2. 从其DLL或共享库中加载MEX函数,然后解析其mexFunction符号。
  3. 分配输入和输出参数的数组,并初始化它们
  4. 致电您的职能
  5. 查找并释放您的MEX功能加载的任何临时变量
  6. 释放输入和输出参数数组
  7. 理论上,Matlab可以使用缓存来避免前两个步骤。不过,我不确定它是否确实如此。随后的步骤都不能被Matlab解释器(或其JIT编译器)跳过,甚至不能真正优化。基本上,如果您的计算速度很快,那么您将花费更多时间来调用MEX函数而不是实际运行它。

    您已经开始实现最大化MEX性能的方法,即每次调用都要尽可能多地使用MEX功能。

    除了在每次调用中使用尽可能多的数据之外,还应该将任何简单的外部循环推送到MEX函数中。简单的循环很容易在MEX函数中实现。它们也比Matlab中的循环更快(甚至是JIT编译的Matlab),并且避免了重复调用MEX函数的成本。

    您还可以看到明智地使用mexLock功能是否有帮助。您应该使用mexUnlock提供一些解锁MEX功能的方法,否则您可能会开始泄漏内存,并且每次更改MEX功能时都必须重新启动Matlab会话。