2013-04-12 15 views
22

Ich konvertierte mein Matlab Programm in eine Konsole basierte Anwendung mit dem deploytool in Matlab. Die Matlab .m Datei dauert ungefähr 2 Sekunden, aber nachdem ich sie in eine ausführbare Datei umgewandelt und die .exe aufgerufen habe, dauert es 45 Sekunden, um sie auszuführen, was zu lang ist.Matlab ausführbar zu langsam

Ich möchte das Matlab-Programm mit PHP integrieren. Gibt es einen anderen effizienten und schnellen Weg, dies zu tun? In meinem Projekt ist die Zeit ein großer Faktor (nicht die Entwicklungszeit, sondern die Ausführungszeit der Anwendung). Gibt es irgendwelche Methoden, die weniger Zeit benötigen?

Ich sah im Internet, dass wir PHP-Erweiterungen schreiben können, um den Matlab zu nennen. Ist diese Methode schnell oder genauso wie der Aufruf der .exe Datei? Hat Matlab Coder keine Hilfe für diesen Prozess? Wenn es alternative Möglichkeiten gibt, geben Sie dies bitte an.

+0

Eine Sache, die Sie ist die eigentliche Rechenzeit verfolgen tun möchten. Zumindest können Sie dann feststellen, ob der Anruf langsamer ist oder die Berechnung selbst. –

+0

Wie kann ich das verfolgen? Ich habe den Lauf und die Zeit benutzt, aber es gibt nur die Gesamtzeit an. – user1583647

+0

die Matlab-Datei .m dauert nur 2 Sekunden auszuführen, aber die exe dauert wie ich 45 Sekunden, also ist es der Anruf, der langsam ist? – user1583647

Antwort

15

Ein MATLAB erstellt .exe wird von oben beim ersten Mal leiden Sie führen Sie es becuase es das MCR beginnt: Why does my application compiled with the MATLAB Compiler 4.1 take a long time to start up?

Wenn Sie Ihr Betriebssystem abmelden oder neu starten, wird die MCR bleiben vorbelastet. Ein weiterer nützlicher Hinweis: Speeding up compiled apps startup.

"Why does my stand-alone created using the MATLAB Compiler take longer to start the first time?" meldet auch, dass aufeinanderfolgende Läufe schneller sein sollten, aber wenn Sie später erneut ausführen, müssen Sie den Prozess im Speicher neu laden.

Sie können Ihren Code in tic toc einschließen, bereitstellen und überprüfen, wie viel Zeit die Ausführung benötigt, um den Systemstart-Overhead zu vermeiden.

Die Alternative zur Beschleunigung der .exe wäre MATLAB mit PHP aufrufen. Wenn Sie die MATLAB-Sitzung geöffnet lassen, stoßen Sie einmal auf den Overhead. Sie können MATLAB beim Start starten und so den Overhead vermeiden, der speziell während des Telefonierens mit PHP auftritt.

Für weitere Informationen lesen Sie Calling MATLAB from PHP, und denken Sie daran, dass Sie nicht exit verwenden möchten, wenn es nicht speziell benötigt wird.

+0

Eine bewährte Methode zum Schreiben kompilierter Anwendungen besteht darin, sie so zu entwickeln, dass sie ohne Neustart ausgeführt werden können. Das heißt, Sie können versuchen, Ihre Anwendung so zu entwerfen, dass sie nicht beendet wird, es sei denn, dies ist absolut notwendig. Auf diese Weise muss der MCR nicht oft initialisiert werden. Aber wie kann ich das erreichen? – user1583647

+5

Sofern Sie sich nicht abmelden oder das Betriebssystem neu starten, bleibt die MCR vorinstalliert. Ein weiterer nützlicher Hinweis: [Beschleunigung kompilierter Apps Startup] (http://undocumentedmatlab.com/blog/speeding-up-compiled-apps-startup/) – Oleg

+0

Ich habe versucht, die EXE-Datei kontinuierlich, aber keine Änderung der Zeit – user1583647

7

Das Aufrufen einer ausführbaren Datei, die mit MATLAB Compiler erstellt wurde, hat einen höheren Aufwand als das Aufrufen des Programms in MATLAB live, da die MCR gestartet werden muss. Dies wird beim ersten Start länger sein, aber auch nach dem ersten Mal wird es noch einen Overhead geben.

Wenn Sie Zugriff nicht nur auf MATLAB Compiler haben, sondern auch auf eines der Builder Produkte (Builder für .NET oder - was wahrscheinlich besser ist, da Sie PHP - Builder für Java verwenden), gibt es eine Möglichkeit zu umgehen Dies.

Mit den Builder-Produkten können Sie eine eigenständige Komponente (entweder eine .NET-Assembly oder eine Java-JAR-Datei) erstellen. Sie können dann eine .NET- oder Java-Anwendung erstellen, die ausgeführt wird, Ihre MATLAB-basierte Komponente instanziieren - die MCR startet - und dann dort sitzen und auf einen Aufruf von Ihrem PHP warten. Jeder Aufruf wird dann den MCR-Startup-Overhead überhaupt nicht erleiden und sollte nur einen viel geringeren Aufwand von dem Aufruf von PHP zu .NET/Java haben.

+0

Danke Sam für die Antwort. Ja, ich habe das auch versucht. Aber können wir die .m-Datei in mex-Datei umwandeln, wird dieser Prozess schneller oder der gleiche? Wenn Sie irgendeine Idee über die Konvertierung von .m zu mex-Dateien haben, schlagen Sie bitte vor. – user1583647

+0

Siehe meine Antwort auf Ihre andere Frage. –

+0

Wird einige Toolbox beim Erstellen einer .Net-Assembly den Prozess abit beschleunigen? Ich habe eine Console-basierte C# -Anwendung gemacht und die Exe von PHP aufgerufen, andere Methoden zu tun? – user1583647

1

Wie andere sagten, wenn Sie die ausführbaren Dateien aufrufen, gibt es einen (wirklich großen für Matlab) Overhead, wenn die ausführbare Datei geladen wird. Die Lösung? Laden Sie es nur einmal. Wie es geht? Es ist kompliziert und hängt von den Plattformen ab.

Ich denke, dass die portabelste Art, etwas zu tun, wie es ist, einen Server in Matlab zu machen (Ich weiß, das ist möglich, aber ich habe es nie versucht). Wenn Sie es verwenden müssen, verbinden Sie sich einfach damit und senden die Argumente.

Werfen Sie einen Blick auf diese: HTTP server in matlab und diese: http://blogs.mathworks.com/loren/2011/05/27/transferring-data-between-two-computers-using-matlab/