我使用Matlab中的Matlab
将我的deploytool
程序转换为基于控制台的应用程序。 Matlab .m
文件需要大约2秒才能执行,但在我将其转换为可执行文件并调用.exe
之后,执行时间过长需要45秒。
我想将Matlab程序与PHP集成。有没有其他有效和快速的方法来做到这一点?在我的项目中,时间确实是一个重要因素(不是开发时间,而是应用程序的执行时间)。那么有什么方法可以花更少的时间吗?
我在互联网上看到,我们可以编写PHP扩展来调用Matlab。此方法是否与调用.exe
文件快速或相同? Matlab编码器是否对此过程有任何帮助?如果有其他选择,请提及。
答案 0 :(得分:16)
MATLAB编译的.exe会在你第一次运行它时遭受开销,因为它正在启动MCR:Why does my application compiled with the MATLAB Compiler 4.1 take a long time to start up?
除非您注销或重新启动操作系统,否则MCR将保持预先加载状态。另一个有用的读物:Speeding up compiled apps startup。
“Why does my stand-alone created using the MATLAB Compiler take longer to start the first time?”还报告连续运行应该更快,但如果稍后重新运行,则必须在内存中重新加载该进程。
您可以将代码包含在tic toc
中,部署它并检查执行所花费的时间,以及启动开销。
加速.exe
的另一种方法是用PHP调用MATLAB。如果你打开MATLAB会话就会遇到一次开销。您可以在启动时启动MATLAB,从而避免在使用PHP调用期间特别受到开销的影响。
有关详细信息,请阅读Calling MATLAB from PHP,并请注意,除非特别需要,否则您不想使用exit
。
答案 1 :(得分:7)
调用使用MATLAB Compiler创建的可执行文件相对于在实时MATLAB中调用程序会产生开销,因为它需要启动MCR。这将在您第一次启动时更长,但即使在第一次之后仍会有开销。
如果您不仅可以访问MATLAB编译器,而且可以访问其中一个Builder产品(Builder for .NET或 - 可能更好,因为您使用的是PHP - Builder for Java),有一种方法可以解决这个问题。
使用Builder产品,您可以创建独立组件(.NET程序集或Java .jar)。然后,您可以创建一个.NET或Java应用程序来运行,实例化您的MATLAB构建组件 - 启动MCR - 然后坐在那里等待来自PHP的调用。然后,每次调用都不会受到MCR启动开销的影响,并且从PHP到.NET / Java的调用只需要更小的开销。
答案 2 :(得分:1)
正如其他人所说,当你调用可执行文件时,加载可执行文件时会有一个(对于matlab来说很大)开销。解决方案?只加载一次。怎么做?它很复杂,依赖于平台。
我认为最便携的方法就是在matlab中创建一个服务器(我知道这是可能的,但我从未尝试过)。所以当你需要使用它时,你只需连接它并发送参数。
请看一下:HTTP server in matlab和此:http://blogs.mathworks.com/loren/2011/05/27/transferring-data-between-two-computers-using-matlab/
答案 3 :(得分:1)
除了上面提到的所有内容外,我是否建议设置RAM驱动器,并将MCR_CACHE_ROOT
系统变量设置为RAM驱动器上的目录。
这将大大缩短启动时间。
如果有人在台式机上使用此方案,请确保RAM驱动器在重新引导期间是持久的。