Logische vs. physikalische CPU-Leistung

10927
vhl

Ein Computer verfügt über zwei physische Kerne und vier logische Kerne (z. B. einen Computer mit einem i5-3210M-Prozessor).

Wenn ein Programm A ausgeführt wird, zeigt htop, dass es 100% von einem Kern verwendet, und die anderen drei Kerne sind nahezu inaktiv. Der Durchsatz beträgt in diesem Fall X.

Meine Frage ist, wenn ich 4 Instanzen von A auf 4 logischen Kernen ausführen kann, dann beträgt der Gesamtdurchsatz 4X oder 2X. Was ist, wenn ich nur zwei Instanzen ausführen möchte?

2

3 Antworten auf die Frage

2
Daniel B

Selbst mit viel mehr Kernen als Aufgaben können sie nicht perfekt skaliert werden. Das liegt daran, dass ein Zustand fast immer geteilt wird. Nicht unbedingt in der Aufgabe, aber zum Beispiel der Kernel. Oder sie greifen auf dieselbe Ressource wie das Netzwerk oder eine Festplatte oder was auch immer zu.

SMT (Hyper-Threading) kann sich darauf verlassen, dass verschiedene Tasks unterschiedliche CPU-Ausführungseinheiten verwenden. So kann auf Superskalar-CPUs eine sogenannte "Parallelität auf Befehlsebene " erreicht werden . Praktisch jeder moderne x86-Prozessor ist superskalar.

Angenommen, Sie haben zwei Aufgaben, die nur aus dem Hinzufügen von Zahlen ohne weitere CPU-Anweisungen bestehen. Wenn ja, laufen diese Konflikte, wenn sie auf demselben physischen Kern ausgeführt werden, was möglicherweise zu erheblichen Leistungseinbußen führt.

Meistens ist dies jedoch nicht der Fall und es passiert eine Vielzahl von Sachen. Solange derselbe Befehl nicht (ungefähr) zur gleichen Zeit in beiden Befehlsströmen erscheint, kann die Auslastung der CPU-Ausführungseinheiten verbessert werden.

1
Animesh Patra

Das Konzept der Kerne ist nicht so einfach. Logische Kerne sind die Anzahl der physischen Kerne multipliziert mit der Anzahl der Threads, die auf den jeweiligen Kernen ausgeführt werden können. Dies wird als HyperThreading bezeichnet . Wenn ich einen Computer mit einem 4-Core-Prozessor habe, der zwei Threads pro Kern ausführt, habe ich 8 logische Prozessoren. Sie können die Kernfunktionen Ihres Computers anzeigen, indem Sie den Befehl lscpu ausführen .

Wenn ein Prozessor über 4 Kerne verfügt, aber 8 Threads parallel ausführen kann, bedeutet dies, dass er nur 4 Kerne (Verarbeitungseinheiten) hat. Es können jedoch 8 Threads parallel unterstützt werden . Offensichtlich können maximal 4 Jobs in den Kernen ausgeführt werden. Ein Job, der im Kern ausgeführt wird, wenn der Speicher oder die E / A-Operation auf irgendeine Weise unterbrochen wird, kann ein anderer Thread diesen freien Kern verwenden.

Inzwischen ist Ihnen klar, dass Sie über 4 logische Prozessoren verfügen, wenn Ihr Computer über 2 physische Kerne verfügt und 2 Threads pro Kern ausführen kann . Sie können also nur zwei Instanzen ausführen, da Sie über zwei physische Kerne verfügen, dh Sie nutzen die vollen Fähigkeiten einzelner physischer Kerne (jeweils zwei Threads). Der Durchsatz wird also 50% betragen. Wenn jedoch ein Thread inaktiv wird, kann der Kern einen Thread auf diesen Kern laden.

Sie können das HyperThreading im BIOS (z. B. " Intel ht-Technologie ") deaktivieren und den Unterschied zwischen normalen und HyperThreading-Funktionen erkennen, da der Durchsatz jetzt 100% beträgt.

0
Gerrit Tipping

Wenn das Programm keine Möglichkeit hat, separate Instanzen zu koordinieren, werden Sie höchstwahrscheinlich keine Verbesserung erzielen.

Beispiel:

Wenn ich ein einzelnes Threadprogramm habe, das Primzahlen von 2-10 berechnet, würde eine einzelne Instanz, die ausgeführt wird, berechnen, ob jede Zahl von 2-10 Primzahl wäre und dass 2,3,5,7 Primzahlen sind.

Wenn ich eine zweite Instanz hinzufüge, ohne den Code zu ändern, würde die erste Instanz berechnen, ob jede Zahl von 2-10 Primzahlen sind, und dass 2,3,5,7 Primzahlen sind, während die zweite Instanz berechnet, ob jede Zahl aus ist 2-10 sind Primzahlen und finden, dass 2,3,5,7 Primzahlen sind.

Andernfalls würde dieselbe Arbeit zweimal ausgeführt, was zu keiner Verbesserung führt.