Wie kann die Ausführung eines Matlab-Programms beschleunigt werden?

18659
bzak

Gibt es Techniken, mit denen der MATLAB-Code schneller ausgeführt werden kann?

Ich spreche über Dinge, die meinen PC schneller machen können (wie etwa das Anhalten einiger EXE- oder Softwareprogramme, um die PC-Leistung zu verbessern). Ich habe festgestellt, dass mein PC manchmal dieselbe Aufgabe zu zwei verschiedenen Zeitpunkten ausführt: Er kann beispielsweise ein Programm in 45 Sekunden und das gleiche Programm in 10 Minuten erneut ausführen.

3
Es ist nicht wirklich eine MATLAB-bezogene Frage (obwohl Antivirus auf früheren R14-Versionen dazu führen könnte, dass es langsam läuft). Als Faustregel gilt: Um schnell zu laufen, muss man weniger tun. vor 13 Jahren 0

4 Antworten auf die Frage

7
Clifford

Läuft MATLAB langsam auf Ihrem Computer oder die Programme, die Sie in MATLAB geschrieben haben?

MATLAB nutzt die dynamische Speicherzuweisung und Neuzuweisung intensiv. Die Größenänderung von MAtrix oder Arrays kann sehr langsam und nicht deterministisch sein. Wenn eine Matrix oder ein Array wächst, wird neuer Speicher zugewiesen und die vorhandenen Daten in den neuen Speicher kopiert, bevor die alte Kopie gelöscht wird. Sie können diese Speicherüberlastung vermeiden, indem Sie solche Arrays vorbelegen: Zum Beispiel diesen Code:

x = 0; for k = 2:1000 x(k) = x(k-1) + 5; end 

bewirkt x, dass die Größe bei jeder Iteration geändert wird und sehr langsam ausgeführt wird. Zum Vergleich der folgende Code:

x = zeros(1, 1000); for k = 2:1000 x(k) = x(k-1) + 5; end 

Ordnet das Array vorab so zu, dass keine Größenanpassung auftritt und erheblich schneller ausgeführt wird.

Die MathWorks-Website enthält eine ganze Seite, in der diese und andere Techniken zur Leistungsverbesserung beschrieben werden. Die Seite umfasst Folgendes:

  • Vorbelegung von Arrays
  • Verwenden Sie verteilte Arrays für große Datensätze
  • Wenn möglich, ersetzen Sie mit durch (parallel für)
  • Begrenzung der Größe und Komplexität
  • Zuordnung zu Variablen
  • Verwendung geeigneter logischer Operatoren
  • Überladen von integrierten Funktionen
  • Funktionen sind im Allgemeinen schneller als Skripte
  • Laden und Speichern sind schneller als Datei-E / A-Funktionen
  • Schleifen vektorisieren
  • Vermeiden Sie große Hintergrundprozesse

Beachten Sie, dass die von Ihnen vorgeschlagene Lösung die letzte in der Liste von MathWorks ist. Sie sollten sich zuerst alle anderen Punkte ansehen, es sei denn, Sie tun etwas, das offensichtlich ressourcenhungrig ist, z Der Blick auf andere laufende Prozesse schwitzt wahrscheinlich das kleine Zeug.

Vielen Dank für Ihre Antwort Ich denke jedoch, dass das Problem nicht mit dem Matlab-Code zusammenhängt, da dasselbe Programm in zwei verschiedenen Zeiten (45 Sekunden und 10 Minuten) ausgeführt wird. Vielleicht ist das Forum für die Programmierung reserviert, aber mein Problem zeigt, dass die langsame Ausführung eines Matlab-Programms etwas anderes sein kann als ein schlechtes Skript. Bevor Sie eine Simulation durchführen, müssen Sie daher zunächst überprüfen, ob der PC ordnungsgemäß funktioniert. Außerdem ist es für einen Programmierer wichtig, dass der Inhalt des Programms angezeigt wird. vor 13 Jahren 0
@bzak: In diesem Fall füge ich meine Stimme zum Abschluss hinzu, obwohl nicht deterministisches Verhalten genau das bedeutet, was Sie sehen. Wenn der Algorithmus zu einem bestimmten Zeitpunkt ausreichend Speicherplatz zuweist, um den Speicher auf die Festplatte auszulagern, ist die Verlangsamung erheblich. In MATLAB ist das Hinzufügen von Speicher häufig der effektivste Beschleuniger. vor 13 Jahren 0
3

Nachdem Sie die Clifford-Vorschläge befolgt haben, können Sie mit den MATLAB-Profiling-Tools überprüfen, wo Ihr Programm die meiste Zeit verbringt, normalerweise nicht zu viele Zeilen / Funktionen. Konzentrieren Sie sich dann auf die Optimierung dieser Zeilen.

3

Wenn die Laufzeit für Ihren Code sehr variabel ist, ist es wahrscheinlich, dass Sie ein Problem haben, wenn Sie manchmal bis zu einem gewissen Grad in den virtuellen Speicher wechseln. Wenn MATLAB Swap Space verwenden muss, verlangsamt sich die Situation dramatisch. Schließlich verwenden Sie Festplattenspeicher, um die Verfügbarkeit von physischem RAM zu ersetzen. Dies ist der beste Grund, den ich für einen Code anbieten kann, der zeitlich um eine Größenordnung in der Zeit variiert, die für verschiedene Läufe benötigt wird.

Verwenden Sie das Profiler-Tool, um festzustellen, wo die Zeit vergeht. Schauen Sie sich diese Zeilen genau an. Erstellen Sie ein großes Array, auch wenn dies in einer von Ihnen aufgerufenen Funktion vorübergehend geschieht?

Überprüfen Sie Ihr System. Sehen Sie nach, ob in diesem Fall die CPU im Wesentlichen inaktiv ist, während die Festplattenzugriffe stark sind.

Wenn dies so ist, wie ich es vorschlage, ist die Lösung natürlich auch logisch.

  • Machen Sie Ihren Algorithmus hinsichtlich des Speichers effizienter. Das ist IMMER eine gute Sache.

  • Holen Sie sich mehr RAM, wenn Sie derzeit weniger als 2 GB haben.

  • Verwenden Sie die 64-Bit-Version von MATLAB, um mehr RAM zu erhalten.

+1. Wenn es kein I / O-Problem gibt, ist dies sicherlich der Grund. Sobald Sie mit dem Blättern beginnen, verlangsamt sich alles zu einer Durchforstung. Jonas vor 13 Jahren 0
2
jdehaan

Meiner Meinung nach muss es sich um einen systemweiten Ressourcenengpass handeln, z. Versuchen Sie herauszufinden, was in Process Explorer angezeigt wird. Dort erfahren Sie möglicherweise, was im System vor sich geht.

Fast sicher ist MATLAB. Es ist bekanntermaßen ressourcenhungrig. Sowohl Sie als auch bzak bellen wahrscheinlich den falschen Baum auf, wenn Sie der Meinung sind, dass die Lösung darin besteht, den PC und nicht den MATLAB-Code zu reparieren. Darüber hinaus ist eine solche Aktion kein Thema für dieses Forum. vor 13 Jahren 2