Nur halbe CPU-Auslastung. Warum wird nicht alles genutzt?

Mitglied: baldrianforte

baldrianforte (Level 1)

06.02.2010, aktualisiert 19:36 Uhr, 12764 Aufrufe, 14 Kommentare

Hallo.

Ich bin Student und schreibe in Java meine Programme.
Es geht experimentell darum, in einem riesigen Array das größte Element zu suchen. Rekursiv.

Wie dem auch sei, ist ja auch egal.

Nach etwa 5 Sekunden macht sich der Lüfter bemerkbar. Gucke ich in den Leistungsmonitor von Vista,
wird mir angezeigt, dass die CPU nur zu 50% ausgelastet ist.

Ich habe ein DualCore 2 Duo T8300 2,4GHz pro Kern.

Wie kriege ich meinen Rechner dazu, dass der Prozessor zu 100% ausgelastet wird, wenn ich es so möchte?
Mitglied: affabanana
06.02.2010 um 19:55 Uhr
Hallo Du

Wenn Du student bist solltest Du das ja eigentlich Wissen

Dein Java Programm kann nur einen Kern auslasten.

2 =100%
1 = 50%

Gruass affabanana

PS: Studenten wissen woll immer weniger woher man Informationen holt


http://www.google.com
Mitglied: LordGurke
06.02.2010 um 20:30 Uhr
Und um beide Kerne auszulasten, müsstest du diese Aufgabe zumindest auf zwei verschiedene Threads aufteilen. Das reicht meines Wissens dazu, um beide Kerne zu nutzen.
Mitglied: baldrianforte
06.02.2010 um 20:33 Uhr
Mir fallen zwei Möglichkeiten ein:
1.) Vista reserviert sich die Kapazität.
2.) Es wird nur einer von zwei Kernen beansprucht.

oder es liegt an etwas anderem.

Auch unter Java muss möglich sein, die CPU voll zu beanspruchen.
Evtl. liegt es an einer Systemeinstellung unter Vista oder es fehlt was in meinem Programm.
Mitglied: baldrianforte
06.02.2010 um 20:35 Uhr
Danke, maxi89. Das heißt, ich muss zwei Aufgaben parallel laufen lassen?
Hm, ich könnte das Array halbieren.
Aber wie lasse ich zwei Methoden gleichzeitig laufen??
Mitglied: LordGurke
06.02.2010 um 20:38 Uhr
Sorry, bei Java bin ich lediglich bis zu dem Stand vorgedrungen, dass ich eine Datei auf- und wieder zumachen kann. Von Threading habe ich leider nichtmal den Hauch einer Ahnung, wie und ob das unter Java geht
Mitglied: LordGurke
06.02.2010 um 20:41 Uhr
Punkt zwei stimmt.
Wenn du im Tassenmanager im Reiter "Leistung" nur einen Kurvenverlauf siehst, musst du möglicherweise erst noch unter Ansicht -> CPU-Verlauf die Option "Ein Diagramm pro CPU" aktivieren.
Dann siehst du ganz genau welcher Kern gerade wie viel zu tun hat.

Bei Punkt 1 muss ich widersprechen:
Vista reserviert sich keine Kapazität, es ist unter jedem Betriebssystem so, dass ein Prozess auf nur einem Prozessor ausgeführt werden kann. Und da ein Multicore-Prozessor im Grunde ja einzelne Prozessoren darstellt, wird das OS ein Programm nur auf einem Kern ausführen.
Ob jetzt mehrere Threads reichen, um sich auf alle Kerne zu verteilen, oder ob es wirklich eigenständige Prozesse sein müssen, weiß ich jetzt nicht aus dem Kopf - eigentlich müssten die Threads reichen.
Zumindest kann der Apache mit nur einem Prozess und 20 Threads alle 16 Kerne eines Servers beanspruchen
Mitglied: StefanKittel
06.02.2010 um 20:57 Uhr
Hallo,

du kannst das ganz einfach ausprobieren und mit calc n! einer großen Zahl berechnen lassen.
Nutze mal einen calc und einmal 2xcalc.

Stefan
Mitglied: baldrianforte
06.02.2010 um 21:14 Uhr
Hallo Stefan,

was ist calc? In der API ist das nicht zu finden.
Oder meinst Du, ich sollte mir eine Methode schreiben, die das macht?
Iterativ oder rekursiv?
Mitglied: Pjordorf
06.02.2010 um 21:19 Uhr
Hallo baldrianforte,

Ich bin Student und schreibe in Java meine Programme.
Es geht experimentell darum, in einem riesigen Array das größte Element zu suchen. Rekursiv.

Wie dem auch sei, ist ja auch egal.

Nach etwa 5 Sekunden macht sich der Lüfter bemerkbar. Gucke ich in den Leistungsmonitor von Vista,
wird mir angezeigt, dass die CPU nur zu 50% ausgelastet ist.
1 Kern wird verwendet

Ich habe ein DualCore 2 Duo T8300 2,4GHz pro Kern.
2 kerne vorhanden

Wie kriege ich meinen Rechner dazu, dass der Prozessor zu 100% ausgelastet wird, wenn ich es so möchte? baldrianforte
Als java Entwickler (und dann noch als Student) solltest du vom Multithread Applikation schon mal was gehört haben. Schau doch mal hier Writing multithreaded Java applications oder hier http://java.sun.com/docs/books/tutorial/essential/concurrency/ wie so etwas geht. Dann kannst du auch ohne probleme deine 2 Kerne zu je 100% auslasten.

Peter
Mitglied: LordGurke
06.02.2010 um 21:26 Uhr
Mit calc meint er vermutlich den Windows-Taschenrechner ;)
Mitglied: StefanKittel
06.02.2010 um 22:49 Uhr
in der tat. nichts ist einfacher um cpu last zu erzeugen...
Mitglied: baldrianforte
06.02.2010 um 23:02 Uhr
Der WindowsRechner ist wohl auch nicht auf Multiprozessorbetrieb ausgerichtet. Auch nur 50% Auslastung.
Mitglied: baldrianforte
06.02.2010 um 23:03 Uhr
Danke, Peter. Werde mir das genauer angucken.
Mitglied: StefanKittel
06.02.2010 um 23:24 Uhr
1 x calc laufen lassen = 1 Thread/Process = 50% Last
2 x calc laufen lassen = 2 Thread/Process = 100% Last

1000000000 und dann n! in der wissenschaftlichen Ansicht
Titel: Nur halbe CPU-Auslastung. Warum wird nicht alles genutzt?
Content-ID: 135360
Art des Inhalts: Frage
Ausgedruckt am: 16.09.2019 um 02:25:06 Uhr
URL: https://administrator.de/contentid/135360