我从我的C++代码中调用MATLAB函数(dll)。该函数获取一个数组作为参数。 函数对数组的每个成员进行一些计算。 我做了两个测试。 我第一次用24个元素的数组调用这个函数。 我第二次用8个元素调用这个函数三次。 第二次测试花了两次时间。 为什么? 进入MATLAB函数并退出需要花费很多时间吗? 如果是,为什么?延迟呼叫MATLAB函数
0
A
回答
2
你已经注意到,调用MEX函数需要花费相当长的时间。考虑到Matlab具有做到最低:
- 扫描Matlab的路径,以确保该函数映射到MEX文件(该文件MEX没有改变)
- 装入MEX函数从DLL或共享库,然后解析其符号。
- 分配的输入和输出参数数组,并进行初始化
- 调用函数
- 查找和无任何临时变量,你MEX函数加载
- 免费的输入和输出参数数组
理论上,Matlab可以使用缓存来避免前两个步骤。不过,我不确定它是否会。以后的任何步骤都不能被跳过,甚至可以通过Matlab解释器(或其JIT编译器)进行真正的优化。基本上,如果你的计算速度很快,那么你将花费更多的时间来调用MEX函数,而不是实际运行它。
您已经打出了最大化MEX性能的方法,即让MEX功能在每次调用时都尽可能地做到这一点。
除了可以在每次调用时使用尽可能多的数据之外,还应该将任何简单的外部循环插入MEX函数。简单的循环在MEX功能中很容易实现。它们也比Matlab中的循环更快(甚至是JIT编译的Matlab),并且避免了重复调用MEX函数的代价。
您还可以看看是否明智地使用mexLock
函数将有所帮助。您应该提供一些方法来解锁MEX函数mexUnlock
,否则您可能会开始泄漏内存,并且每次更改MEX函数时也必须重新启动Matlab会话。
相关问题
- 1. Ajax呼叫延迟
- 2. RxJava连锁呼叫延迟
- 3. 呼叫中的额外参数“延迟”
- 4. 如何合并Objective-C中的延迟/延迟呼叫?
- 5. 延迟呼叫+ UI上的更新CountDown
- 6. 广播接收器呼叫延迟
- 7. 阿贾克斯呼叫延迟SetInterval
- 8. 的BizTalk延迟增加1分钟初始呼叫
- 9. 使用延迟创建一个无限呼叫循环
- 10. 延迟加载页面,直到收到AJAX呼叫
- 11. 时间延迟之后的呼叫功能,然后更快
- 12. Android:在延迟后设置呼叫转移
- 13. 启动延迟意图,同时呼叫电话号码
- 14. Android GPRS网络通信延迟接收呼叫时
- 15. 呼叫不同jQuery函数
- 16. ajax函数内呼叫
- 17. jquery延迟超时函数?
- 18. 函数jquery上的延迟
- 19. jquery show()函数延迟
- 20. 延迟函数调用 - Python
- 21. jquery延迟执行函数
- 22. 延迟函数返回
- 23. Jquery:OnChange函数的延迟
- 24. jQuery - 延迟的HTML函数
- 25. Doxygen的呼叫/呼叫者图形引用缺少Fortran函数
- 26. 呼叫数组函数原型
- 27. 函数中的延迟承诺不推迟函数的执行
- 28. 呼叫次数
- 29. 如何将呼叫时延的功能
- 30. 从查看呼叫模型函数
这些结果是否一致?你能重现它们吗? – 2013-03-19 17:45:49