подобряване на времето за стартиране на изпълнимия файл на matlab

Компилирах самостоятелен exe файл за matlab, който мога да стартирам на всеки компютър, на който е инсталиран MATLAB Compiler Runtime.

Въпреки това стартирането на exe отнема 20-30 секунди!

Как мога да измеря точно времето и най-важното - как да го намаля до 1-2 секунди.


person Matthias Pospiech    schedule 19.10.2012    source източник
comment
Не мисля, че можеш. Но определено бих искал да видя различен отговор..   -  person angainor    schedule 19.10.2012
comment
Времето за стартиране (според моя опит) е свързано с инициирането на MCR. Разглеждал съм този проблем преди и никога не съм измислил начин да го ускоря (наистина досадно, съгласен съм). Въпреки това, една бележка: ако извикате няколко самостоятелни exe подред, времето за стартиране (отново според моя опит) трябва да е по-малко от второто извикване нататък. Вероятно нещо общо с това, че компютърът е достатъчно умен, за да държи инициализиран MCR в RAM.   -  person Colin T Bowers    schedule 19.10.2012
comment
Искате да кажете, че е бавен първия път след внедряване/рестартиране или всеки път?   -  person Dennis Jaheruddin    schedule 02.05.2014


Отговори (2)


Това е взето от блога на Yair Altman:

Приложението splash wrapper може да облекчи голяма част от болката от бавното стартиране на внедрени (компилирани) Matlab приложения. Решение за Splash прозорец може да се намери тук. Въпреки че такава обвивка на splash е наистина полезна, може да е възможно да се постигне действително ускоряване на стартирането на компилираното приложение с помощта на променливата на средата 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

Има и начини да зададете тази променлива env за постоянно в Windows, ако е необходимо...

Настройката на MCR_CACHE_ROOT е особено важна, когато изпълнявате изпълним файл от мрежово (NFS) местоположение, тъй като разопаковането в мрежово местоположение може да бъде доста бавно. Ако изпълнимият файл се изпълнява паралелно на различни машини (например компютърен клъстер, изпълняващ паралелна програма), това може дори да причинява блокирания, когато различни клъстери се опитват да получат достъп до едно и също мрежово местоположение. И в двата случая решението е да зададете 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 технически решение и свързана статия тук.

В свързан въпрос, компилираният изпълним файл на Matlab може да се провали с грешка Не може да се осъществи достъп до кеша на MCR компонента, когато Matlab не може да пише в директорията на кеша на MCR поради липсващи права за разрешение. Това може да се избегне, като зададете MCR_CACHE_ROOT на несъществуваща директория или на папка, в която има глобални разрешения за достъп (/tmp или %TEMP% обикновено са такива папки с възможност за запис) – вижте свързани публикации тук и тук.

person bla    schedule 19.10.2012

Ако използвате инструмент за разгръщане, за да компилирате кода си, под Project - Settings-Toolboxes по пътя премахнете отметката от всички кутии с инструменти, които не са необходими на вашия изпълним файл. Наскоро имах този проблем и горните стъпки намалиха размера на изпълнимия файл наполовина и значително намалиха началното време на изпълнимия файл.

person Peter    schedule 13.08.2014