WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

CPU Auslastung Matlab

 

skewcrap
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2013, 10:33     Titel: CPU Auslastung Matlab
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 23.06.2013, 12:04     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
skewcrap
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2013, 12:25     Titel:
  Antworten mit Zitat      
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.

taskmanager.png
 Beschreibung:

Download
 Dateiname:  taskmanager.png
 Dateigröße:  54.62 KB
 Heruntergeladen:  902 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.06.2013, 14:45     Titel:
  Antworten mit Zitat      
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.
http://www.mathworks.de/products/parallel-computing/

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
skewcrap
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2013, 17:17     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.06.2013, 18:46     Titel:
  Antworten mit Zitat      
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:
Code:


Bei for-Schleifen bietet sich wie gesagt parfor an. Im einfachsten Fall dauern die Anpassungen keine 3 Minuten:
for --> parfor
Code:
matlabpool open
% Code laufen lassen
matlabpool close


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.06.2013, 20:42     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
skewcrap
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2013, 21:44     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.06.2013, 22:08     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
skewcrap
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2013, 22:51     Titel:
  Antworten mit Zitat      
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^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 27.06.2013, 14:36     Titel:
  Antworten mit Zitat      
früher? da hatte keiner Bock auf Asphären Wink
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.