Wird der Prozess in einem Thread langsamer als in einem Kern ausgeführt

456
dzh

So viele CPUs kommen jetzt mit 2/4 Kernen und 4/8 Threads.

Es gibt auch einige CPUs, die aus 4 Kern- und 4 Threads bestehen.

Würde das bedeuten, dass ein unvergleichlicher Prozess auf derselben Taktzyklus-CPU mit 8/4 CPU langsamer läuft als auf einer 4/4 CPU, da er nur die Hälfte des Kerns verwendet?

Gibt es eine programmatische Möglichkeit (z. B. Betriebssystemebene), die CPU auf nur 1 Thread pro Kern festzulegen?

2

2 Antworten auf die Frage

1
Hennes

Würde das bedeuten, dass ein unvergleichlicher Prozess auf derselben Taktzyklus-CPU mit 4-Core-8-Thread-CPU langsamer abläuft als auf 4-Core-4-ThreadCPUs, da er nur die Hälfte des Kerns verwendet?

Irgendwie ja und nein.

Wenn ich 8 unabhänige Programme mit einem einzelnen Profil auf einer 8-Core-CPU (8 Lauffläche) ausführen, wird jeder Kern ein Profil ausführen, und diese werden mit maximaler Geschwindigkeit ausgeführt (z. B. die ganze Zeit zuweisen, etwa Betriebssysteme ignorieren, die auch etwas CPU-Zeit benötigen).

Wenn ich 8 unabhängige Programme mit einem einzelnen Profil auf einer CPU mit 4 Kernen (4 Laufflächen) ausführe, werden bei einem durchschnittlichen Betrieb zwei dieser Kerne ausgeführt. Das Programm läuft nur halb so schnell.

Bisher keine Überraschungen.

Jetzt mit einer 4-Kern-CPU (8 Laufflächen) glaubt das Betriebssystem, dass es 8 Kerne gibt. Es wird sie als ersten Fall treten. Dies ist jedoch nicht der Fall. Die Hälfte der Kerne wird nicht als normale Kerne gebaut. Normalerweise wird nur ein Teil der Funktionalität dupliziert, und wenn Sie Pech haben, wird einer der Laufstreifen stehen bleiben. Schneller als eine 4c / 4t-CPU.

Wenn Sie jedoch sehr viel Glück haben (z. B. ALUs verdoppelt werden und Sie abwechselnd zwischen dem Abrufen von Informationen aus dem Speicher und dem Hinzufügen von Informationen wechseln), können beide mit voller Geschwindigkeit laufen.

Im Durchschnitt führt dies zu einer Geschwindigkeitssteigerung von 30%.


Um dies noch komplizierter zu gestalten: Wenn Sie große Datensätze verwenden, führt die Ausführung von mehr als vier davon möglicherweise zu weniger Cache-Treffern. Das Letzte kann die Dinge wirklich verlangsamen.


Gibt es eine programmatische Möglichkeit (z. B. Betriebssystemebene), die CPU auf nur 1 Thread pro Kern festzulegen?

Ja, schalten Sie das Hyper-Treten ab.

Sie können dies in der Firmware (z. B. im BIOS oder in UEFI) oder vom Betriebssystem aus durchführen.

ZB für eine 8-t-4-Core-CPU mit den Kernen 0 1 2 3 als ersten Kernen und 4 5 6 7 als Laufflächen-Set, das Sie verwenden könnten:

echo 0 > /sys/devices/system/cpu/cpu4/online echo 0 > /sys/devices/system/cpu/cpu5/online echo 0 > /sys/devices/system/cpu/cpu6/online echo 0 > /sys/devices/system/cpu/cpu7/online 

IIRC FreeBSD hat dasselbe mit einer Syscontrol gemacht. Für OSX oder Windows müssten Sie umsehen.

0
ClaireW

Das Threading wird durch Software gesteuert (denke Java-VM) und Kerne sind Hardware. Ein Prozessor kann mehrere Kerne mit unterschiedlichen Verbindungsschemata enthalten. Jeder Kern kann einen Thread verarbeiten. Dies hängt jedoch davon ab, wie das Betriebssystem jeden Thread verwaltet.

Ich empfehle die "Expert's Voice in Microprocessors" -Serie von Apress für die neueste und beste Prozessor-Hardware.

Ich empfehle Paul Butchers hervorragendes Buch zur Thread-Parallelität, da er auch GPUs (Seven Concurrency Models in Seven Weeks) behandelt.