Läuft der Prozess auf einem Thread langsamer als auf einem Kern


2

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

Es gibt auch einige CPUs mit 4 Kernen und 4 Threads.

Würde dies bedeuten, dass ein beispielloser Prozess auf derselben Taktzyklus-CPU mit 8/4 CPU langsamer abläuft als auf einer 4/4 CPU, da nur die Hälfte des Kerns verwendet wird?

Gibt es eine programmatische Möglichkeit (etwa auf Betriebssystemebene), die CPU auf nur 1 Thread pro Kern einzustellen?


Sie laufen nicht "auf einem Thread". Prozesse erstellen Threads, und Threads werden ausgeführt. Threads laufen auf einem "logischen Prozessor". Wenn Sie Hyperthreading aktiviert haben, stellt jeder CPU-Kern zwei LPs bereit, ansonsten nur eine.
Jamie Hanrahan

Antworten:


1

Würde dies bedeuten, dass ein beispielloser Prozess auf derselben Taktzyklus-CPU mit 4-Kern-8-Thread-CPU langsamer abläuft als auf 4-Kern-4-Thread-CPU, da nur die Hälfte des Kerns verwendet wird?

So ähnlich wie Ja und Nein.

Wenn ich 8 nicht abhängige Single-Treaded-Programme auf einer 8-Core- (8-Tread-) CPU ausführe, wird auf jedem Core ein Tread ausgeführt, und diese werden mit maximaler Geschwindigkeit ausgeführt (z. B. ständige Zuweisung, Ignorieren von Dingen wie Betriebssystemen, die auch etwas CPU-Zeit benötigen).

Wenn ich 8 nicht abhängige Single-Treaded-Programme auf einer 4-Core-CPU (4-Tread-CPU) ausführe, werden auf jedem Core durchschnittlich zwei davon ausgeführt. Das Programm läuft halb so schnell.

Bisher keine Überraschungen.

Bei einer 4-Kern-CPU (8-Laufflächen-CPU) geht das Betriebssystem davon aus, dass 8 Kerne vorhanden sind. Es wird sie als erster Fall behandeln. Dies ist jedoch nicht wirklich der Fall; Die Hälfte der Kerne sind keine regulären Kerne. Normalerweise wird nur ein Teil der Funktionalität dupliziert, und wenn Sie Pech haben, bleibt einer der Schritte stehen. Schneller als eine 4c / 4t-CPU wird es nicht sein.

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

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


Um dies noch etwas komplexer zu gestalten: Wenn Sie Programme mit großen Datenmengen verwenden, führt die Ausführung von mehr als vier davon möglicherweise zu weniger Cache-Treffern. Letzteres kann die Dinge wirklich verlangsamen.


Gibt es eine programmatische Möglichkeit (etwa auf Betriebssystemebene), die CPU auf nur 1 Thread pro Kern einzustellen?

Ja, Hyper Treading ausschalten.

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

ZB für eine 8-Tonnen-4-Kern-CPU mit den Kernen 0 1 2 3 als ersten Kernen und 4 5 6 7 als Profilsatz könnten Sie Folgendes verwenden:

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 einem syscontrol gemacht. Für OSX oder Windows müssten Sie googeln.


-1

Das Threading wird von der Software gesteuert (denken Sie an Java VM) und die Kerne sind Hardware. Ein Prozessor kann mehrere Kerne mit unterschiedlichen Verbindungsschemata enthalten. Jeder Kern kann einen Thread verarbeiten, es 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 Prozessorhardware.

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.