Single- und Multi-Core-Apps

engine

Captain
Registriert
Apr. 2007
Beiträge
3.955
Hi,

ich habe schon auf Wikipedia nachgelesen. Es ist mir aber noch nicht ganz klar, warum der Taskmanager für eine Single-Core-Applikation so einen CPU-Auslastungs-Verlauf zeigt (Bild 2).
Also:

Bild 2
- 4 Kerne werden ausgelastet, warum nicht nur einer?
- Die Ausschläge der Graphen scheinen bis 50% der Feldhöhe zu gehen? Unklar.
- Das HT nicht genutzt wird ist ja noch klar bei Single-Core-App.

Bild4
- Ein Feld hat hier als Ymax 12,5%=100%/8 (maximale Auslastung pro Feld)
- wie kommt man hier auf 15% Auslastung. Ist das die (Summe der Einzelauslastungen)
- Das HT nicht genutzt wird ist ja noch klar bei Single-Core-App.

Bild 3
- Multi-Core Applikation ist auch klar

Das Bild hat ja alle Infos.
single-multi-core-jpg.277087
 

Anhänge

  • Single-Multi-Core.jpg
    Single-Multi-Core.jpg
    224,1 KB · Aufrufe: 800
Welches Programm hast du denn genutzt um die Last zu erzeugen, allgemein sind die Ausschläge recht gering, gut möglich das auch irgendwelche Hintergrundprozesse das Ergebnis verfälschen.

Mal als Bespiel wenn ich World of Tanks spiele, dass ja leider nur einen CPU Kern unterstützt, sieht die CPU Auslastung bei mir so aus:
unbenannt-png.277089
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    55,5 KB · Aufrufe: 752
richtig, indem windows die applikation mal auf der cpu, dann wieder auf der anderen laufen lässt - im taskmanager auf 1 cpu festsetzen und schon passierts nichtmehr ;)

ist aber eigentlich auch egal, solang es rund läuft
 
Wie bereits gesagt: Eine Anwendung ist ja nicht an einen Kern gebunden. Das könntest du manuell machen im Taskmanager... das sollte sich dann in den Diagrammen zeigen...
 
Der Scheduler des Betriebssystems verteilt die Last im Normalfall auf alle Kerne. Ausserdem weiß Win7 auch, welches echte, und welches nur "HT-Kerne" sind. Letztere bleiben bei Anwendungen die nur einen Thread abarbeiten also ungenutzt.
 
Wie die Kollegen schon sagten verteilt das System die Last auf die verschiedenen Kerne. Ein ganz einfaches Programm in dem eine Schleife ohne Abbruchbedingung läuft hat bei mir nach wenigen Sekunden schon 25000 Prozesswechsel absolviert (OS X, ist da aber exakt das gleiche). Er versucht halt das System gleichmäßig auszulasten, wobei HT-Kerne nicht zählen. Die werden nur als letzter Ausweg angepackt.
 
Ich habe natürlich alles gelesen und danke dafür, aber kann nicht jeden einzelnen Beitrag erwähnen.

Ach ja, Scheduler und Lastverteilung (die komplette Appl. "herumschieben"). Den Scheduler muss ich mir genauer durchlesen.

Jetzt nur noch:
Bild4
- Ein Feld hat hier als Ymax 12,5%=100%/8 (maximale Auslastung pro Feld)
- wie kommt man hier auf 15% Auslastung. Ist das die (Summe der Einzelauslastungen)
Ich denke das stimmt.
 
Zuletzt bearbeitet:
engine schrieb:
Bild4
- Ein Feld hat hier als Ymax 12,5%=100%/8 (maximale Auslastung pro Feld)
- wie kommt man hier auf 15% Auslastung. Ist das die (Summe der Einzelauslastungen)
15% = Summe aller Auslastungen geteilt durch 8

Also sowas wie eine durchschnittliche Auslastung der gesamten CPU.
Die Angabe ist natürlich insofern optimistisch als "HT-Kerne" viel langsamer sind, also HT die Leistung nicht so erhöht wie ein richtiger Kern.

Daher kann es bei einem HT-enabled Prozessor sein, dass er bei 50% "Last" (laut Taskmanager) schon aus allen Löchern keucht und nur noch 10-20% Mehrleistung möglich sind.
 
Hi,

ich meine das so.
Hier 7*12,5%+1,5%=89%

Werte 2 und 1,5 nur grob abgeschätzt.
single-multi-core2-jpg.277130

Ergänzung ()

Froschcommander schrieb:
Welches Programm hast du denn genutzt um die Last zu erzeugen, allgemein sind die Ausschläge recht gering, gut möglich das auch irgendwelche Hintergrundprozesse das Ergebnis verfälschen...

Es geht hier um ein Excel 2010 Makro, also VBA7, welches 100te ActiveX-CheckBoxen in einem Tabellenblatt erzeugt.

Code:
Do
   ...
   Set mCB = .OLEObjects.Add( _
            ClassType:="Forms.CheckBox.1", Link:=False, _
            DisplayAsIcon:=False, _
            Left:=Target.Left + Cleft, _
            Top:=last_y + CTop, _
            Width:=CWidth, _
            Height:=Target.Height - CHeight)
   ...
loop ... (bis 200 CheckBoxen)

Während der Laufzeit ist Excel komplett blockiert, da VBA grundsätzlich immer noch single-threaded ist nicht Multitaskfähig ist und alles beansprucht (kann man aber auch mit dem Befehl DoEvents umgehen)

Es kam mir eigenartig vor, dass 4 echte Kerne gleichmäßig ausgelastet sind und nicht nur ein Kern sehr stark. Im Bilde 2 ganz oben zu sehen.
 

Anhänge

  • Single-Multi-Core2.JPG
    Single-Multi-Core2.JPG
    264,8 KB · Aufrufe: 564
Zuletzt bearbeitet: (RF)
Ob man jetzt jede einzelnen Kern-Graphen nur von 0 bis 12,5% sieht und dann aufsummiert, oder man sie von 0 bis 100% ansieht, aufsummiert und dann durch 8 teilt, ist mathematisch doch exakt das selbe...
 
Hi,

klar, man muss sich aber auf ein Bezugssystem einigen, um kommunizieren zu können.
Es sollte jetzt aber klar sein.
Summe der Einzelauslastungen (bezogen auf 12,5%) = Summe der Einzelauslastungen (bezogen auf 100%)/8
Trivial, oder?
 
Zuletzt bearbeitet:
digitalangel18 schrieb:
Der Scheduler des Betriebssystems verteilt die Last im Normalfall auf alle Kerne.
Nein. Bei einer Last, die aus einem einzigen Thread besteht, ist das nicht der Normalfall. Der Scheduler eines vernünftigen Betriebssystems wird so eine Last möglichst durchgängig auf dem gleichen Kern laufen lassen. Das Wechseln eines Threads auf einen anderen Kern ist ziemlich teuer. Sowas macht man nur, wenns Gründe dafür gibt.

digitalangel18 schrieb:
Es kam mir eigenartig vor, das 4 echte Kerne gleichmäßig ausgelastet sind und nicht nur ein Kern sehr stark.
Ist es auch.

Ich vermute, das Makro läuft nicht die ganze Zeit in einem Thread rein CPU-begrenzt durch sondern die Arbeit wird vom Excel - warum auch immer - nacheinander in vielen kleinen Häppchen ausgeführt, die nacheinander auf verschiedenen Kernen abgearbeitet werden. Aus Sicht des Schedulers sind das voneinander unabhängige Threads, die der Scheduler brav reihum über alle Kerne verteilt. Der Scheduler kann nicht ahnen, dass er vom doofen Excel niemals mehr als einen Job gleichzeitig zur Arbarbeitung überreicht bekommt und deshalb seine Reihum-Verteilung für die Katz ist.
 
Zuletzt bearbeitet:
mensch183 schrieb:

So einen Gedankengang hatte ich auch, dass Excel 2010 Codeteile, die in sich geschlossen sind weitergibt. Der Scheduler erledigt den Rest und verteilt schön gleichmäßig.

Anders kann es ja fast nicht sein.

Übrigens, es ist natürlich eine

Code:
Do
  ...
loop ... (bis 200 CheckBoxen)

Schleife, habe ich oben nicht erwähnt.

Es wird langsam klarer.
 

Ähnliche Themen

Antworten
18
Aufrufe
2.733
0815-TYP
0
S
Antworten
151
Aufrufe
268.021
S
Zurück
Oben