Ich habe einen Quad Core i7 Mac von Anfang 2011. Aufgrund von Hyperthreading melden viele Programme 8 „Kerne“. Wenn ich ein Programm schreiben würde, das parallel ausgeführt wird, könnte ich dann 8 Instanzen dieses Programms starten oder nur 4?
Ich verstehe, dass ich so viele Threads starten kann, wie ich möchte, aber würde ich 4 oder 8 Instanzen des Programms parallel ausgeführt sehen?
Antwort1
Der Intel Core i7-Prozessor verfügt über 4 physische Kerne, aber jeder Kern kann bis zu 2 Threads gleichzeitig eingeben, sodass dem Betriebssystem insgesamt 8 Threads in Form von „verfügbaren logischen CPUs“ angezeigt werden.
In Wirklichkeit kann ein einzelner Kern nur einen Thread gleichzeitig verarbeiten, aber er verfügt über spezielle Warteschlangen-/Zeit-/Planungsmechanismen, die es zwei Threads ermöglichen, sich gleichzeitig in verschiedenen Phasen der „Pipeline“ zu befinden. Dadurch kann die CPU zwei Threads schneller abschließen, als wenn sie nur einen gleichzeitig verarbeiten würde. Da beide Threads dieselbe Pipeline gemeinsam nutzen, ist der Leistungsvorteil offensichtlich nicht doppelt so groß. Die meisten Tests schätzen den Vorteil auf 10 bis 50 %, je nach Art der ausgeführten Anweisungen.
Als Antwort auf Ihre Frage: Wenn Sie 4, 8 oder 16 Instanzen Ihres Programms starten, würden sie alle „laufen“, aber die Anweisungen für jede Instanz würden in die Warteschlange gestellt, je nachdem, wie viele THREADS verfügbar sind. Sobald Sie die Anzahl der verfügbaren PHYSIKALISCHEN KERNE überschreiten (z. B. 5 oder mehr), verringert sich die Leistung, da alle Threads über die Basis 4 hinaus einen physischen CPU-Kern gemeinsam nutzen.
Wenn Sie schließlich das Limit der verfügbaren CPU-Threading-Kapazität erreichen (mehr als 8 Threads), beginnt das Betriebssystem mit der Planung/Warteschlangeneinreihung von Anweisungen, um zu warten, bis die in der Pipeline befindlichen Anweisungen fertig sind. Idealerweise sollten Sie vermeiden, die verfügbaren Threads zu überschreiten, da dies negative Auswirkungen auf die Leistung haben und das System ausbremsen könnte.