Hallo zusammen,
ich quäle gerade Matlab mit rechenintensiven Funktionen.
Dabei stelle ich fest, dass die CPU-Auslastung nicht über 50% geht
(Taskmanager, Windows XP, Matlab 2010a)
Die CPU ist eine Core 2 Duo E6750, zwei Kerne, kein Hyperthreading.
Mache ich nebenbei etwas anderes, öffne z.B. ein Programm, dann geht die
Auslastung auf 100% hoch.
Kann Matlab nicht beide Kerne benutzen? Woran liegt das? Oder ist das
Konfigurationssache?
Lg
Mario
Was machst du Matlab?
Berechnungen müssen parallelisiet werden können, damit beide Cores
benutzt werden. Ergebnisse, die von einander abhängen können, können
nicht gleichzeitig berechnet werden.
Welche Version von Matlab verwendest du`?
PS: Offtopic ist falsch, das gehört nach PC Hard- & Software
Verflixt, sorry wegen dem falschen Forum.
Matlab Version siehe oben.
Im Grunde sind es 3 verschachtelte For-Schleifen, die solle man tiptop
parallelisieren können...
Ja Sorry, blind ;)
Du meinst in etwa soetwas?
for (i=0; i<x; i++) {
for (j=i; j<y; j++) {
da lässt sich gar nichts parallelisieren. Ansonsten bin ich nicht so der
Matlab Profi, eventuell im Forum von Mathcad nach Hilfe suchen?
Ne, eher so:
for i=1:100
for j=1:100
if B(i,j) = ...
end
end
end
Aber es ist mir auch sonst schon aufgefallen, das Matlab immmer nur
einen Kern braucht...kann es das überhaupt, selbstständig die Ware
parallelisieren?
Mario M. schrieb:> for i=1:100> for j=1:100>> if B(i,j) = ...>> end> end> end
was steckt denn hinter den "..."
vielleicht kann man das ganze ja cleverer aufschreiben.
Was soll sich denn da parallelisieren lassen? das sind doch eindeutig
verschachtelte Schleifen. Wenn die innere Schleife gerade abgearbeitet
wird, muß doch die äusere Schleife warten, oder was soll die sonst
machen? Das ist nur was sequentielles, es reicht also nur ein Prozessor
dafür (sofern ich die Syntax richtig interpretiere, ist es daselbe wie
die von Tilo Lutz vermutete Logik).
Ob aber Mathlab parallelisieren kann, kann ich nicht sagen (benutze ich
nicht). Wenn ich mir aber
http://www.mathworks.com/support/solutions/en/data/1-6XY1ZX/index.html?product=ML&solution=1-6XY1ZX
anschaue, dann ist es wohl fähig, mehrere CPU's zu benutzen (wenn die
Aufgabe dies zuläßt).
Jens G. schrieb:> Was soll sich denn da parallelisieren lassen? das sind doch eindeutig> verschachtelte Schleifen. Wenn die innere Schleife gerade abgearbeitet> wird, muß doch die äusere Schleife warten, oder was soll die sonst> machen?
Wenn es keine Abhängigkeiten zwischen mehreren Ausführungen des
Schleifenkörpers gibt, dann lässt sich das natürlich parallelisieren.
MATLAB hat dafür die "parfor"-Anweisung. Inwieweit da
Datenabhängigkeiten automatisch berücksichtigt werden weiß ich aber
nicht; außerdem muss die Parallel Computing Toolbox vorhanden sein.
Einfacher ist es deshalb, die Schleife in Matrix-/Vektoroperationen
umzuformulieren. MATLAB kann diese seit den neueren Versionen ganz gut
parallelisieren.
Hallo Mario,
> ich quäle gerade Matlab mit rechenintensiven Funktionen.> Dabei stelle ich fest,
dass die CPU-Auslastung nicht über 50% geht
> (Taskmanager, Windows XP, Matlab 2010a)> Die CPU ist eine Core 2 Duo E6750, zwei Kerne, kein Hyperthreading.> Mache ich nebenbei etwas anderes, öffne z.B. ein Programm, dann geht die> Auslastung auf 100% hoch.> Kann Matlab nicht beide Kerne benutzen? Woran liegt das? Oder ist das> Konfigurationssache?
Meiner Erfahrung nach nutzt Matlab für die Rechnungen nur einen Kern
(50%).
Manchmal geht die Auslastung bei Rechnungen auf etwa 70% hoch. Wenn ich
das richtig deute, handelt es sich aber bei den zusätzlichen 20%
Rechenleistung um irgendwelche Speicherzugriffe und Rechenzeit für die
Matlab-Oberfläche.
Wenn Du wirklich parallelisieren willst, müßtest Du Dich wahrscheinlich
mit der Toolbox für Parallelrechnen
(http://www.mathworks.com/products/parallel-computing/) vertraut machen.
Bei meinen eigenen Rechnungen umgehe ich diese Toolbox immer. Ich lasse
einfach zwei Matlab-Instanzen parallel an verschiedenen Problemen
rechnen und setze die Lösung des Gesamtproblems nachher zusammen.
Gruß,
Michael
Matlab kann automatisch mehrere Kerne für Berechnungen benutzen, falls
man die Parallel Computing Toolbox verwendet oder falls die Rechnungen
"groß genug" also man z.B. 2000 x 2000 Matrizen multipliziert.