|
skewcrap |

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 22.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 10:33
Titel: CPU Auslastung Matlab
|
 |
Hallo
Ich habe ziemlich aufwändige Matlab Simulationen die ich laufen lasse. Im Grunde ist es eine Monte Carlo Simulation in Fortran, aber ich brauche dann Matlab um mit Schleifen die gleiche Simulation für verschiedene Input Parameter laufen zu lassen. Der Fortran Code wird dann jeweils aus Matlab mit !fortrancode.exe aufgerufen.
Ich dachte eigentlich dass eine solche Simulation nur 1 Prozessor Kern auslastet. Wenn ich allerdings den Windows Task Manager öffne dann ist die CPU Auslastung bei bei 25%, es wird jedoch jeder Kern ungefähr gleich belastet!
Das verstehe ich nicht. Die 25% machen ja Sinn, wenn 1/4 Kernen immer voll ausgelastet wäre, aber wieso werden alle Kerne belastet? Und wenn schon alle Kerne belastet sind, wieso ist dann die Last nur 25%?
Kann mir das jemand erklären?
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 12:04
Titel:
|
 |
kenn mich da auch nicht so aus. aber wenn ich im task maneger gucke dann is das ehr so eine krakel linie die so aussiht als würde der peak immer nur bei einem sein. und nach ner weile ist es dann nur noch auf 1 oder 2. er wird also schon nur einen cpu nutzen ohne paralel processing toolbox. die virtuellen kerne werden garnicht angesprochen.
hier einmal ohne pp
und mit pp
|
|
|
skewcrap |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 22.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 12:25
Titel:
|
 |
Bei mir schaut das so aus:
Ich dachte eigentlich dass beim ausgelsteten Kern die Last ziemlich konstant hoch sein müsste, aber bei dir scheint das auch nicht der Fall zu sein.
Beschreibung: |
|
 Download |
Dateiname: |
taskmanager.png |
Dateigröße: |
54.62 KB |
Heruntergeladen: |
902 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 14:45
Titel:
|
 |
Hallo,
ich würde die Aussagen des Task Manager nicht zu ernst nehmen.
Wenn bei einem Quad Core die Auslastung bei 25% liegt, heißt das i.d.R., dass MATLAB auch nur mit einem Kern arbeitet. Es kann höchstens sein, dass kurzzeitig mal andere Kerne beschäftigt werden.
Viel wird meines Erachtens auch von deinem Fortran-Code abhängen.
Wenn MATLAB nicht automatisch mehrere Kerne verwendet, kann man das über die Parallel Computing Toolbox erreichen, indem man z.B. eine for-Schleife in eine parfor-Schleife umwandelt.
Grüße,
Harald
|
|
|
skewcrap |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 22.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 17:17
Titel:
|
 |
Hallo
Ja, der Fortran Code ist denke ich nicht gross parallelisierbar!
Dass es die Parallel Computing Toolbox gibt weiss ich, die nützt mir aber nicht direkt etwas. Die Hauptarbeit wird vom Fortrancode erledigt, deshalb würde es wohl nicht viel bringen den Matlab Code zu ändern. Ich hätte höchstens alles anders aufbauen können, beispielsweise dass jeweils 4 Instanzen des Fortran Programms aufgerufen werden die dann gleichzeitig laufen würden. Das wäre mir dann doch zu aufwändig und mühsam geworden. Nun lass ich halt auf 3 PCs die Simulationen über Nacht laufen, dann gehts schon!
Wird sich da eigentlich in Zukunft was ändern in Matlab? Beispielsweise dass normaler Code automatisch besser auf die 4 Kerne verteilt wird, oder wird man auch in Zukunft nicht drum herum kommen den Code entsprechend aufzubauen? Bis in 5 Jahren werden wir ja eher Prozessoren mit 20 Kernen haben als 2 Kerne mit 10 Ghz...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 18:46
Titel:
|
 |
Hallo,
Zitat: |
Die Hauptarbeit wird vom Fortrancode erledigt, deshalb würde es wohl nicht viel bringen den Matlab Code zu ändern. |
Da wird die entscheidende Frage sein, ob man vom MATLAB-Code aus mehrere Instanzen des Fortran-Codes aufrufen kann. Ich weiß es nicht, halte es jedoch nicht für abwegig.
Zitat: |
Beispielsweise dass normaler Code automatisch besser auf die 4 Kerne verteilt wird, oder wird man auch in Zukunft nicht drum herum kommen den Code entsprechend aufzubauen? |
Sofern es etwas bringt, passiert das bei einzelnen Operationen heute schon, z.B. Multiplikation großer Matrizen:
Bei for-Schleifen bietet sich wie gesagt parfor an. Im einfachsten Fall dauern die Anpassungen keine 3 Minuten:
for --> parfor
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 20:42
Titel:
|
 |
Hallo skewcrap,
Das Taskmanager-Diagramm sieht sehr interessant aus: Es sieht so aus, als seien der 2. und 3. Kern involviert und dort, wo der zweite ein Peak nach unten hat, weist der dritte einen Peak nach oben auf, und umgekehrt. Hier scheint also der Thread von einem Kern zum nächsten geschoben zu werden, weil der Task-Schedular des Betriebssystems meint, dass dort mehr freie Resourcen vorhanden sind. Man könnte nun einen Thread an einen bestimmten Kern binden (siehe Windows API->SetProcessAffinityMask), aber das ist im Allgemeinen nicht schneller.
Wenn die Fortran-Simulationen unabhängig von einander sind, sollten sich doch auch 4 gleichzeitig starten lassen, oder?
Gruß, Jan
|
|
|
skewcrap |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 22.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 21:44
Titel:
|
 |
|
 |
|
Hallo
Ja, der Fortran Code sollte man eigentlich schon mehrfach aufrufen können. Es handelt sich dabei um einen relativ allgemeinen Monte Carlo Ray Tracing Code den ich brauche um den optischen Wirkungsgrad von speziellen Linsen zu simulieren. Diesen Code habe ich jedoch nicht selber geschrieben (das wäre vom Umfang wohl mit einer Doktorarbeit vergleichbar).
Der Fortran Code greift auf mehrere Text Dateien zu; darin ist zB. die Linsen Geometrie definiert. Um nun 4 gleiche Instanzen aufzurufen müsste ich quasi 4 Unterordner haben mit jeweils identischem Inhalt. Im gleiche Ordner kann es nicht funktionieren, da die Input Files für jeden Schleifendurchgang überschrieben werden.
Der Aufwand war mir dann einfach zu hoch alles umzuschreiben!
Damit die Standardabweichung der Ergebnisse genügend klein wird, sind ca. 1e7 Lichtstrahlen notwendig die simuliert werden.
Wenn ich nun zB. einen Contour Plot erstelle wo der Wirkungsgrad als Funktion von 2 Input Parameter dargestellt wird, habe ich dann zB. 100x100 einzelne Simulationen. Eine einzelne Simulation dauert für 1e7 Strahlen ca. 2 Minuten, für 1e6 Strahlen ca. 14 Sekunden...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 22:08
Titel:
|
 |
Hallo,
das wären also 20.000 Minuten oder knapp 14 Tage, und das für einen kleinen Plot. Da würde sich meines Erachtens ein Aufwand von ein paar Minuten sicher lohnen, um die Rechenzeit ein wenig zu reduzieren.
Grüße,
Harald
|
|
|
skewcrap |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 22.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.06.2013, 22:51
Titel:
|
 |
Das stimmt schon, aber auch bei Auslastung von 4 Kernen würde es immer noch 3.5 Tage dauern. Ich habe dann halt für die aufwändigsten Plots das Raster auf 50x50 und die Anzahl Strahlen auf 1e6 reduziert.
Das dauerte dann noch ca. 12 Stunden.
Somit konnte ich eigentlich alle Plots in einer Nacht durchrechnen lassen...
Rechenpower hat man eigentlich nie genug. Frage mich manchmal wie man solche Simulationen vor 10 Jahren gemacht hat^^
|
|
|
Andy386 |

Forum-Guru
|
 |
Beiträge: 485
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.1/8
|
 |
|
|
 |
|
Verfasst am: 27.06.2013, 14:36
Titel:
|
 |
früher? da hatte keiner Bock auf Asphären
_________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|