改善matlab可执行文件的启动时间

时间:2012-10-19 11:15:29

标签: matlab executable

我编写了一个matlab独立的exe文件,我可以在任何安装了MATLAB Compiler Runtime的计算机上运行。

然而,启动exe需要20-30秒!

如何准确地测量时间和最重要的时间 - 如何将其减少到1-2秒。

2 个答案:

答案 0 :(得分:5)

这取自Yair Altman's blog

启动包装器应用程序可以缓解部署(编译)的Matlab应用程序缓慢启动的痛苦。 A Splash window solution can be found here。虽然这样的初始包装确实很有用,但也可以使用MCR_CACHE_ROOT环境变量实现已编译应用程序启动的实际加速。

通常,MCR和独立可执行文件在用户临时目录中的每次启动时都会解压缩,并在用户注销时删除。显然,当设置MCR_CACHE_ROOT环境变量时,这些文件仅被解压缩一次并保留以供以后重用。如果此报告确实如此,则可以显着加快后续调用中已编译应用程序的启动时间。

在Linux上:

export MCR_CACHE_ROOT=/tmp/mcr_cache_root_$USER   # local to host
mkdir -p @MCR_CACHE_ROOT
./myExecutable

在Windows上:

REM set MCR_CACHE_ROOT=%TEMP%
set MCR_CACHE_ROOT="C:\Documents and Settings\Yair\Matlab Cache\"
myExecutable.exe

如果需要,还有一些方法可以在Windows上永久设置此env变量...

从网络(NFS)位置运行可执行文件时,设置MCR_CACHE_ROOT尤为重要,因为解压缩到网络位置可能会非常慢。如果可执行文件在不同的计算机上并行运行(例如,运行并行程序的计算机集群),则当不同的集群尝试访问同一网络位置时,这甚至可能cause lock-outs。在这两种情况下,解决方案是将MCR_CACHE_ROOT设置为本地文件夹(例如,/ tmp或%TEMP%)。如果您计划再次重用已提取的文件,那么您可能不应该删除提取的文件,而是重用它们。否则,只需在可执行文件结束后删除临时文件夹。在以下示例中,$ RANDOM是一个返回随机数的bash函数:

export MCR_CACHE_ROOT=/tmp/mcr$RANDOM
./matlab_executable
rm -rf $MCR_CACHE_ROOT

设置MCR_CACHE_ROOT还可用于解决已部署应用程序中的其他性能瓶颈问题,如MathWorks technical solution和相关文章here中所述。

在相关的事情中,当Matlab由于缺少权限权限而无法在MCR缓存目录中写入时,编译的Matlab可执行文件可能会失败并且无法访问MCR组件缓存错误。这可以通过将MCR_CACHE_ROOT设置为a non-existent directory,或者设置为具有全局访问权限的文件夹(/ tmp或%TEMP%通常是这样的可写文件夹)来避免 - 请参阅相关帖子here和{{ 3}}

答案 1 :(得分:0)

如果使用deploytool编译代码,请在“项目 - 设置 - 路径上的工具箱”下取消选中可执行文件不需要的任何工具箱。我最近遇到了这个问题,上面的步骤将可执行文件大小减少了一半,大大减少了可执行文件的开始时间。