Warum wird manche Software auch bei mehreren Kernen nicht lastausgeglichen?

652
Nav

Während VTune Analyzer auf einem Blade-Server mit 8 Kernen lief, beobachtete ich den Prozentsatz der CPU-Auslastung mpstat -P ALL 1.

mpstat zeigte mir, dass VTune einen einzelnen Kern zu 100% aufnahm, während alle anderen Kerne im Leerlauf waren.

Warum passiert das? Sollte das Betriebssystem (RHEL Server 5.2) die Last nicht automatisch auf die Kerne verteilen? Dasselbe passierte, als ich versuchte, MATLAB auszuführen (selbst nachdem in den MATLAB-Einstellungen die Unterstützung für Multithreading aktiviert war).

ps: Ich bin ein Entwickler. Kein Sys-Administrator. Also fühlte es sich besser an, hier zu fragen als bei Serverfault.

0
Die von Ihnen verwendete Software ist möglicherweise nicht in der Lage, mehrere Kerne parallel zu verwenden. Wie bei MATLAB gibt es einige Aspekte, die nicht parallelisiert werden können? Daniel Beck vor 13 Jahren 1

1 Antwort auf die Frage

3
Majenko

Das Betriebssystem verteilt Threads über Kerne.

Ein Prozess besteht aus einem oder mehreren Threads.

Ein Prozess, der nur einen Thread hat, kann nur auf einem Kern ausgeführt werden. Ein Prozess mit 2 Threads kann auf einem Kern oder zwei Kernen ausgeführt werden. Ein Prozess mit 500 Threads kann auf so vielen Kernen wie möglich ausgeführt werden (beispielsweise 125 Threads pro Kern für einen Quad-Core).

Es liegt also alles am Prozess.

Dies wird immer nur auf einem Kern laufen:

for(i=0; i<1000; i++) { do_something_intensive(); } 

Dies ist eher kernfreundlich:

pthread_create(pth1,&do_something_intensive,attr,&args); pthread_create(pth1,&do_something_else_intensive,attr,&args); 

Zum Beispiel.