Chiaro dal mio codice C++ una DLL scritta in MATLAB. Osservo uno strano effetto: la prima chiamata richiede molto più tempo rispetto alle chiamate successive. Richiede 3-4 volte di più. È normale? È possibile fare qualcosa con esso?Perché la prima chiamata a una DLL Matlab richiede molto più tempo rispetto alle chiamate successive?
risposta
Sì, è normale, il ritardo viene dall'avvio di MATLAB Runtime Compiler. Questo è ciò che esegue il codice MATLAB dalla DLL che hai creato tramite MATLAB. L'avvio iniziale non può essere evitato AFAIK, ma è possibile aggiungere una chiamata fittizia alla DLL all'avvio dell'applicazione per evitare il "costo" successivo.
Poiché la domanda è bloccata, la aggiungerò come commento. Esistono due tipi di ritardi: il primo quando si esegue l'applicazione * per la prima volta * in questo computer, quindi il file ZIP viene estratto e viene avviato il MCR. Il secondo tipo è quando hai già eseguito questa applicazione una volta. Quindi, viene caricato solo l'MCR. –
Ho pensato che il ritardo dall'avvio di Matlab Runtime Compiler sia da qualche parte nella chiamata a mclInitializeApplication o
Se ho diverse funzioni MATLAB in diverse DLL vuol dire che tale ritardo sarà alla prima chiamata a ciascuna funzione? – user1913557
Come stai facendo le chiamate nel tuo codice C++? –
Una domanda perfettamente soddisfacente. Probabilmente gli utenti non Matlab lo hanno chiuso a causa di incomprensioni. –
La mia comprensione è l'unico modo per evitare ciò è convertire il codice Matlab in codice C o C++ usando [Matlab Coder] (http://www.mathworks.com.au/products/matlab-coder/index.html) e quindi compilarlo da lì. Come sottolinea @NominSim, il codice "compilato" Matlab non è in realtà compilato - c'è una buona risposta SO su questo argomento [qui] (http://stackoverflow.com/questions/8636267/matlab-code-after-compilation) –