Logische vs. Physische CPU-Leistung

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

Wenn ein Programm A ausgeführt wird, zeigt htop , dass es 100% von 1 Kern verwendet und andere 3 Kerne fast im Leerlauf sind. Der Durchsatz beträgt in diesem Fall X.

Meine Frage ist, wenn ich 4 Instanzen von A auf 4 logischen Kernen ausführe, ist der Gesamtdurchsatz 4X oder 2X? Was ist, wenn ich nur zwei Instanzen ausführe?

Author: vhl, 2016-07-27

3 answers

Das Konzept von cores ist nicht so einfach. Logische Kerne sind die Anzahl von physischen Kernen mal die Anzahl von Threads , die auf jedem Kern ausgeführt werden können. Dies wird als HyperThreading bezeichnet. Wenn ich einen Computer mit einem 4-Kern-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 4 Kerne hat, aber 8 Threads in parallel bedeutet, dass es nur 4 physische Kerne (Verarbeitungseinheiten) hat. Aber seine Hardware kann bis zu 8 Threads in parallel unterstützen. In den Kernen können maximal 4 Jobs ausgeführt werden. Ein Job, der im Kern ausgeführt wird, wenn er auf irgendeine Weise für Speicher oder E/A-Operation steht, kann ein anderer Thread diesen freien Kern verwenden.

Sie sollten jetzt verstehen, dass, wenn Ihr Computer über 2 physische Kerne verfügt und 2 Threads pro Kern ausführen kann, Sie über 4 logische Prozessoren . Also du kann nur 2 Instanzen ausführen, da Sie über 2 physische Kerne verfügen, dh Sie verwenden die vollen Funktionen einzelner physischer Kerne (jeweils 2 Threads). Der Durchsatz beträgt also 50%. Wenn jedoch jederzeit ein Thread inaktiv wird, kann der Kern einen Thread auf diesen Kern laden.

Sie können das HyperThreading in BIOS deaktivieren (so etwas wie "Intel ht technology") und sehen Sie den Unterschied zwischen normalen und HyperThreading-Funktionen, da jetzt der Durchsatz höher ist 100%.

 16
Author: Animesh Patra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-02-11 11:01:51

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

SMT (dh. Hyper-Threading) kann sich darauf verlassen, dass verschiedene Aufgaben unterschiedliche CPU-Ausführungseinheiten verwenden. Daher kann auf superskalaren CPUs eine sogenannte "Parallelität auf Anweisungsebene" erreicht werden. Praktisch jeder moderner x86-Prozessor ist Superscalar.

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

Dies ist jedoch meistens nicht der Fall und es passiert eine Vielzahl von Dingen. Solange derselbe Befehl nicht (ungefähr) gleichzeitig in beiden Anweisungsströmen angezeigt wird, kann die CPU-Auslastung der Ausführungseinheit sein verbessern.

 3
Author: Daniel B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-07-27 11:47:15

Wenn das Programm keine Möglichkeit hat, separate Instanzen zu koordinieren, werden Sie mit ziemlicher Sicherheit keine Verbesserung erhalten.

Beispiel:

Wenn ich ein Single-Threaded-Programm habe, das Primzahlen von 2-10 berechnet, würde eine einzelne Instanz, die es ausführt, berechnen, ob jede Zahl von 2-10 Primzahl ist, und feststellen, dass 2,3,5,7 Primzahl ist.

Wenn ich eine zweite Instanz ohne Änderung zum Code hinzufüge Die erste Instanz würde berechnen, ob jede Zahl von 2-10 Primzahl ist, und das 2,3,5,7 finden primzahl sind, während die zweite Instanz berechnen würde, ob jede Zahl von 2-10 Primzahl ist, und feststellen würde, dass 2,3,5,7 Primzahl sind.

Dies würde dazu führen, dass dieselbe Arbeit zweimal ausgeführt wird, was zu keiner Verbesserung führt.

 -1
Author: Gerrit Tipping,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-12-26 18:51:27