
Aufgrund von Hyper-Threading verfügt meine CPU über 2 logische Prozessoren pro Kern. Wenn ich die Prämisse von Hyper-Threading richtig verstehe, ermöglicht es jedem Kern, einen separaten Cache und einen Befehlszeiger für 2 separate Threads gleichzeitig zu haben, abernichtermöglicht die gleichzeitige Ausführung von 2 Threads durch einen einzelnen Kern. Damit wird im Grunde nur der hohe Overhead des Thread-Swappings gemildert, was bedeutet, dass die negativen Auswirkungen auf die Leistung, die dadurch entstehen, dass mehr Threads ausgeführt werden als Kerne, um sie auszuführen, reduziert werden. Ich würde jedoch immer noch erwarten, dass esmancheGemeinkosten undmanchenegative Auswirkungen auf die Leistung, wenn beispielsweise 16 Threads auf einem System mit nur 8 physischen Kernen ausgeführt werden.
Es scheint, dass die auf meinem System laufende Software aufgrund meines Hyperthreadings mit 8 physischen Kernen davon ausgeht, dass ich 16 CPU-Kerne habe. Es gibt einige Software, wie z. B. bestimmte Build-Systeme, die standardmäßig alle verfügbaren Kerne verwenden, um die Parallelisierung zu maximieren. Ich weiß, dass ich die Anzahl der Threads durch Argumente für die Software angeben kann, an die ich denke. Liege ich richtig in der Annahme, dass mehr als 8 Threads keinen Leistungsvorteil bringen? Liege ich richtig in der Annahme, dass mehr als 8 Threads die Leistung sogar beeinträchtigen? Sollte ich die Programme daher anweisen, nicht mehr als 8 Threads zu verwenden?
Antwort1
Es kommt darauf an.
Im Allgemeinen wird die beste Leistung erzielt, wenn ein Software-Thread pro CPU-Thread ausgeführt wird. Ich erkenne regelmäßig Geschwindigkeitssteigerungen von 10 % gegenüber der Ausführung eines Software-Threads pro CPU-Kern. Anstatt also einen Software-Thread mit 100 % laufen zu lassen, habe ich zwei Software-Threads, die jeweils mit 55 % laufen.
Aber ich habe auch eine bessere Leistung gesehen beimwenigerProzesse als CPU-Kerne, wenn mehrere Kerne den gleichen Cache teilen. Dies ist jedoch äußerst selten.
Normalerweise sollten Sie alle 16 CPU-Threads nutzen, aber die einzige Möglichkeit, dies auf Ihrem System sicher herauszufinden, ist eine Messung.