Optimalerweise sollte SMT 1/2 soviel bringen wie 50% mehr Kerne, nicht 1/5, ich hab keine Ahnung wie du das zusammenrechnest.
SMT im Optimalfall 25%, 50% mehr Kerne im Optimalfall 50%.
Auf das 1/5 kommst du, wenn das Spiel z.B. nur bis 6 Kerne skaliert. Nehmen wir der Einfachheit halber mal an, dass der 6-Kerner perfekt ausgelastet wird und volle 50% Mehrleistung erreicht. Alle Threads erzeugen die gleiche Last und werden entsprechend auf den Kernen/Threads hin- und hergeschoben, um eine bestmögliche Auslastung zu erreichen.
Auslastung 6-Kerner:
Kern 1: 100% der Zeit mit Thread 1 ausgelastet
Kern 2: 100% der Zeit mit Thread 2 ausgelastet
...
Kern 6: 100% der Zeit mit Thread 6 ausgelastet
-> Jeder Thread bekommt also volle 100% Rechenzeit.
Auslastung 4-Kerner:
Kern 1: 66% der Zeit mit Thread 1 ausgelastet, 33% der Zeit mit Thread 2 ausgelastet
Kern 2: 33% der Zeit mit Thread 2 ausgelastet, 66% der Zeit mit Thread 3 ausgelastet
Kern 3: 66% der Zeit mit Thread 4 ausgelastet, 33% der Zeit mit Thread 5 ausgelastet
Kern 3: 33% der Zeit mit Thread 5 ausgelastet, 66% der Zeit mit Thread 6 ausgelastet
-> Wie man sehr schön erkennt, hat nun jeder Thread nur noch 66% der Rechenzeit zur Verfügung -> darum ist der native 6-Kerner auch volle 50% schneller.
Auslastung 4-Kerner mit SMT - jetzt wird es etwas komplizierter: Um die möglichen ~20% SMT-Gewinn zu berücksichtigen, liefert jetzt jeder Thread bei aktiviertem SMT 60%-Rechenzeit. Damit hat ein gesamter Kern in dieser Rechnung wiederum 120% "Gesamtkapazität", was dem SMT-Gewinn entspricht. Kerne ohne SMT haben weiterhin 100%. Weiterhin werden die Lastthreads genau so verteilt, das jeder das gleiche Stückchen der verfügbaren Gesamtrechenzeit bekommt.
Kern 1, Thread 1: 73% der Zeit mit Thread 1 ausgelastet, 27% der Zeit mit Thread 2 ausgelastet
Kern 1, Thread 2: inaktiv (da die Anwendung zeitgleich nur 6 Threads auslasten kann)
Kern 2, Thread 1: 46% der Zeit mit Thread 2 ausgelastet, 54% der Zeit mit Thread 3 ausgelastet
Kern 2, Thread 2: inaktiv (da die Anwendung zeitgleich nur 6 Threads auslasten kann)
Kern 3, Thread 1: 19% der Zeit mit Thread 3 ausgelastet, 41% der Zeit mit Thread 4 ausgelastet
Kern 3, Thread 2: 32% der Zeit mit Thread 4 ausgelastet, 28% der Zeit mit Thread 5 ausgelastet
Kern 4, Thread 1: 45% der Zeit mit Thread 5 ausgelastet, 15% der Zeit mit Thread 6 ausgelastet
Kern 4, Thread 2: 60% der Zeit mit Thread 6 ausgelastet
-> Wie man sieht, stehen nun jedem Thread 73% Rechenzeit zur Verfügung (durch Rundungsfehler hier bei Thread 6 75%, darüber mal hinwegsehen). Damit beträgt der SMT-Gewinn gegenüber dem 4-Kerner 10% (73% zu 66% Rechenzeit pro Lastthread). Oder anders gesagt: Der SMT-Gewinn ist 1/5 so groß wie der Zuwachs von 4 auf 6 Kerne.
Erst wenn mehr als 6 Threads zur Verfügung stehen, kann der SMT-Gewinn mehr als 10% betragen. Genauergesagt wächst die Steigerung bei diesen Rechenparametern linear bis auf maximal 20%, sobald mindestens 8 Threads ausgelastet werden.
Profitiert der 6-Kerner weniger stark, sinkt der SMT-Gewinn proportional mit ab. Beispiel: Das Spiel lastet immernoch 6 Threads aus, davon aber nur 4 Hauptthreads vollständig, die beiden anderen erzeugen nur eine kleinere Last. Wenn der 6-Kerner dadurch nur 20% zulegt, bleiben für den 4-Kerner mit SMT noch mickrige 4%. Und mehr als 20%-Gewinn durch einen 6-Kerner zeigt wohl kaum ein aktuelles Spiel, wenn ich mal so die verfügbaren Benchmarks betrachte.