81083
Goto Top

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

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?

Content-Key: 135360

Url: https://administrator.de/contentid/135360

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: affabanana
affabanana 06.02.2010 um 19:55:52 Uhr
Goto Top
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
LordGurke 06.02.2010 um 20:30:44 Uhr
Goto Top
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: 81083
81083 06.02.2010 um 20:33:15 Uhr
Goto Top
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: 81083
81083 06.02.2010 um 20:35:42 Uhr
Goto Top
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
LordGurke 06.02.2010 um 20:38:24 Uhr
Goto Top
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 face-wink
Mitglied: LordGurke
LordGurke 06.02.2010 um 20:41:38 Uhr
Goto Top
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 face-smile
Mitglied: StefanKittel
StefanKittel 06.02.2010 um 20:57:19 Uhr
Goto Top
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: 81083
81083 06.02.2010 um 21:14:09 Uhr
Goto Top
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
Pjordorf 06.02.2010 um 21:19:09 Uhr
Goto Top
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
LordGurke 06.02.2010 um 21:26:32 Uhr
Goto Top
Mit calc meint er vermutlich den Windows-Taschenrechner ;)
Mitglied: StefanKittel
StefanKittel 06.02.2010 um 22:49:29 Uhr
Goto Top
in der tat. nichts ist einfacher um cpu last zu erzeugen...
Mitglied: 81083
81083 06.02.2010 um 23:02:49 Uhr
Goto Top
Der WindowsRechner ist wohl auch nicht auf Multiprozessorbetrieb ausgerichtet. Auch nur 50% Auslastung.
Mitglied: 81083
81083 06.02.2010 um 23:03:31 Uhr
Goto Top
Danke, Peter. Werde mir das genauer angucken.
Mitglied: StefanKittel
StefanKittel 06.02.2010 um 23:24:38 Uhr
Goto Top
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