Forum: Digitale Signalverarbeitung / DSP / Machine Learning Matlab: CPU-Auslastung nur 50%


von Mario M. (Gast)


Lesenswert?

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

: Verschoben durch Admin
von Tilo (Gast)


Lesenswert?

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

von Mario M. (Gast)


Lesenswert?

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...

von Tilo (Gast)


Lesenswert?

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?

von Mario M. (Gast)


Lesenswert?

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?

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von Jens G. (jensig)


Lesenswert?

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).

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

von Michael L. (Gast)


Lesenswert?

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

von last (Gast)


Lesenswert?

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.

von Anon N. (fuechslein)


Lesenswert?

help parfor

das hat min ruck zuck paralellisiert...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.