2012-10-19 9 views
6

Ho compilato un exe standalone matlab che posso eseguire su qualsiasi computer su cui è installato MATLAB Compiler Runtime.migliorare i tempi di avvio dell'eseguibile matlab

Tuttavia a partire l'exe richiede 20-30 secondi!

Come posso misurare il tempo in modo accurato e più importante - come posso ridurlo a 1-2 secondi.

+0

Non credo che si può. Ma mi piacerebbe sicuramente vedere una risposta diversa .. – angainor

+0

Il tempo di avvio è (nella mia esperienza) associato all'avvio dell'MCR. Ho esaminato questo problema prima e non ho mai trovato un modo per accelerarlo (davvero fastidioso sono d'accordo). Tuttavia, un punto di nota: se chiami diversi exe standalone in una riga, il tempo di avvio è (sempre nella mia esperienza) deve essere inferiore alla seconda chiamata in poi. Probabilmente qualcosa ha a che fare col fatto che il computer sia abbastanza intelligente da contenere un MCR inizializzato nella RAM. –

+0

Vuoi dire che è lenta la prima volta dopo la distribuzione/riavvio o ogni volta? –

risposta

5

questo è preso da Yair Altman's blog: applicazione wrapper di

Una spruzzata può allevia gran parte del dolore del lento avvio di dispiegate (compilato) applicazioni Matlab. A Splash window solution can be found here. Mentre un tale involucro spruzzata è davvero utile, può anche essere possibile ottenere un aumento di velocità effettiva di avvio del app compilato utilizzando la variabile d'ambiente MCR_CACHE_ROOT.

Normalmente, l'MCR e l'eseguibile autonomo vengono decompressi ad ogni avvio nella directory temporanea dell'utente e cancellati quando l'utente si disconnette. A quanto pare, quando viene impostata la variabile d'ambiente MCR_CACHE_ROOT, questi file sono solo spacchettato volta e conservato per un successivo riutilizzo. Se questo report è effettivamente vero, questo potrebbe velocizzare significativamente il tempo di avvio di un'applicazione compilata nelle successive chiamate.

Su Linux:

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

Su Windows:

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

Ci sono anche modi per impostare questa variabile ENV permanentemente su Windows, se necessario ...

Impostazione MCR_CACHE_ROOT è particolarmente importante quando si esegue il file eseguibile da una posizione di rete (NFS), poiché il disimballaggio in un percorso di rete potrebbe essere piuttosto lento. Se l'eseguibile viene eseguito in parallelo su macchine diverse (per esempio, un cluster di computer che esegue un programma parallelo), allora questo potrebbe anche cause lock-outs quando diversi cluster tentano di accedere allo stesso percorso di rete. In entrambi i casi, la soluzione è impostare MCR_CACHE_ROOT su una cartella locale (ad es.,/Tmp o% TEMP%). Se hai intenzione di riutilizzare nuovamente i file estratti, forse non dovresti eliminare i file estratti ma riutilizzarli. Altrimenti, elimina semplicemente la cartella temporanea dopo che l'eseguibile è terminato. Nel seguente esempio, $ RANDOM è una funzione bash che restituisce un numero casuale:

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

Impostazione MCR_CACHE_ROOT può essere utilizzato anche per risolvere altri colli di bottiglia nelle applicazioni distribuite, come spiegato in un MathWorks technical solution e un articolo correlato here.

In un argomento correlato, l'eseguibile Matlab compilato potrebbe non riuscire con un errore di cache del componente MCR non riuscito, quando Matlab non può scrivere nella directory della cache di MCR a causa dei diritti di autorizzazione mancanti. Ciò può essere evitato impostando MCR_CACHE_ROOT su a non-existent directory o su una cartella in cui vi siano autorizzazioni di accesso globali (/ tmp o% TEMP% sono in genere tali cartelle scrivibili) - vedere i post correlati here e here.

0

Se si utilizza deploytool per compilare il codice, in Project - Settings-Toolboxes sul percorso deselezionare tutte le toolbox non necessarie per il file eseguibile. Recentemente ho riscontrato questo problema e i passaggi precedenti riducono la dimensione del file eseguibile a metà e riducono significativamente il tempo di avvio dell'eseguibile.

Problemi correlati