Könnte ein Thread als CPU gezählt werden?

Könnte ein Thread als CPU gezählt werden?

Also habe ich es in mein Terminal eingegeben lscpuund Folgendes gesehen:

CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
Socket(s):           1

Die Anzahl der CPU(s) beträgt hier 4 aufgrund der Formel: No. of CPUs = Sockets X Cores per socket X Threads per Core

Die Frage ist jedoch, was genau ist eine CPU? Warum beziehen wir Threads in die obige Formel ein?

Antwort1

Es hängt davon ab, wonach Sie suchen.

Beim Kauf eines Prozessors werden Hyperthreading und Anzahl der Kerne deutlich angegeben sowie die Möglichkeit, ihn im Multiprozessor-Modus (mit mehreren Sockeln) zu verwenden.

Vergessen wir die Fälle, in denen wir mehrere physische CPUs haben.

Wir haben auf einem Chip mehrere Kerne: Sie können sich einen Teil des Caches teilen, ansonsten sind sie fast unabhängig. Aber trotzdem: Einige Aufgaben müssen koordiniert werden, sodass Sie mit 4 Kernen (normalerweise) nicht die 4-fache „Leistung“ eines einzelnen Kerns haben.

Hyperthreads: Das ist etwas kniffliger: Das war ein Trick von Intel (auch vor Multi-Cores), mit dem man mehrere CPUs simulieren konnte. In Wirklichkeit kann man nur einen Thread gleichzeitig ausführen, aber die CPU muss oft Pausen machen (z. B. beim Warten auf Speicherzugriff oder Schreiben). Mit Hyperthreading könnte die CPU schnell auf die zweite virtuelle CPU umschalten.

Mit Hyperthreading erzielen Sie daher im Vergleich zu nur einer normalen CPU häufig eine bessere Leistung, und zwar fast ohne Kosten (etwas mehr Logik, Cache und Register, aber keine doppelten Transistoren). Zwei Kerne sind jedoch immer noch besser (immer noch nicht das Gleiche wie zwei CPUs, aber bei numerischen Berechnungen sind die beiden Aufgaben völlig unabhängig und der Kernel stört die Aufgaben nicht).

Wenn Sie parallele Prozesse haben, würde ich häufig die Threads multipliziert mit den Kernen verwenden (und häufig füge ich einen zu den Threads oder Endergebnissen hinzu, wenn es eine diskrete Anzahl von IO gibt). In diesem Fall erzielen Sie eine bessere Leistung (vorausgesetzt, es gibt keine anderen CPU-intensiven Aufgaben): Sie nutzen die maximale Leistung, auch wenn ein einzelner Kern auf Speicherdaten wartet.

Aber um die Beschleunigung zu erreichen, würde ich einfach die Anzahl der Kerne verwenden (wobei ich daran denke, dass ich dadurch bessere Daten erhalten werde).

Es hängt also davon ab, wonach Sie suchen. Und wenn Sie komplexe Aufgaben ausführen, messen Sie Ihre Prozesse wahrscheinlich viel häufiger und optimieren sie (Cache, Speicher, Threads, Kerne, CPU, MPI, ...). Jedes Programm hat unterschiedliche Ressourcen.

verwandte Informationen