Krik schrieb:
Für mich klingt das alles nach einer mangelhaften Implementierung.
Die Programmierer können Threads Prioritäten zuweisen. So weiß der Scheduler, welchen Thread er auf welchen (SMT)Core verteilen muss. Problematisch wird das erst, wenn zu viele anspruchsvolle Threads auf zu wenig Cores treffen. Aber dann wird es ohnehin lahm.
Ne, das funktioniert nicht, weil sich der Bedarf je nach Szenario teils x-fach die Sekunde ändert. Nimm Gaming wieder als Beispiel, dann hat es bei 150 FPS 150x Bilder, die da berechnet werden. Ein geübter Gamer ist in der Lage bei sagen wir einem Shooter binnen einer Sekunde das Blickfeld von stark CPU limitiert in wenig anspruchsvoll und zurück zu ändern.
Was soll da eine Prio noch groß was bringen? Es kann von einem auf das nächste Frage auf einmal bspw. eine komplexe KI oder Physik ins Spiel kommen, die mal eben so die Threadlaufzeiten von vorher ruhenden oder nur seichten Dingen stark erhöht und damit das Gefüge der Threads zu Cores Zuordnung deutlich durcheinander würftelt.
Jetzt wirst du vielleicht sagen, OK, dann schubs die Threads halt rum wie es benötigt wird - KANN man machen, aber das bedeutet, die Daten der Caches gehen verlustig und müssen neu gezogen werden. Die Auswirkung davon sieht man bspw. wenn man auf nem Dual CCD Ryzen ein Game mal anstatt auf 1x 6-8C auf 2x3 oder 2x4C zwingt. Also die Verbindung über die lahme IF muss. Das kostet im Zweifel stark durchsatz durch einfach nur hohe Straflatenzen. -> deswegen ist das alle Nase lang rumschubsen auch nicht förderlich.
Krik schrieb:
Ein Hintergrunddienst kann dann also so eingestellt werden, dass er nur auf den E-Cores bzw. nur auf den energiesparenden Cores läuft. Anwendungen, die wenige aber anspruchsvolle Threads haben, können bzw. sollte man so taggen, dass sie auf den P-Cores bzw. Nicht-SMT-Cores und vielleicht sogar auf den Cores mit Boost laufen.
Das ist reinste Theorie. In der Praxis ist es eher so, dass man anstatt mit einer fixen Anzahl an Threads mit einer Art Pool arbeitet. Das heißt, es gibt nicht "weniger anspruchsvolle Threads". Sondern es gibt einfach nur Aufgaben, die in einen Pool gekippt werden und wo am Ende dann die Gesamtlaufzeit entscheidet. Der Programmierer einer Software wird auch nicht zusätzlichen Programmcode integrieren, der die ganze Zeit den eigentlichen Programmcode überwacht und da große eingreifen. Programmierer sind faul und vor allem ist es viel viel viel einfacher mit Hardware auf das Problem zu schlagen. Sprich läuft es scheiße, kauf mehr Cores und gut ist.
Krik schrieb:
Ich sage nicht, dass man das einfach umsetzen kann, aber unmöglich ist es nicht. Der Prozessor kann nicht entscheiden, welchen Thread es wie behandeln soll, aber der Programmierer kann es.
Der Programmierer könnte es, wenn er es denn wöllte und wenn die Aufgabe entsprechend so gestaltet ist, dass es überwachbar ist.
Beim Gaming ist das bspw. ein Ding der Unmöglichkeit, denn neben Dingen die das Game macht (Programmierer A) kommen noch Dinge dazu, die bspw. der Treiber fabriziert (Programmierer B) - die wissen nix voneinander. A kippt Aufgaben in eine Schnittstelle, die B bereit gestellt hat und am Ende muss der Threadscheduler vom OS wissen, ob jetzt der/die Threads von A oder von B die laufzeitkritisicheren sind. Denn wenn es eng wird, entscheidet sich hier stark wie viel Performance man liegen lässt.
Was macht man also? Man lässt sich nicht auf das Glückspiel ein und wird es nicht eng werden lassen
Krik schrieb:
Oder ein anderes Beispiel: Smartphone CPUs
Die enthalten zwei bis drei verschiedene Core-Arten, um verschiedene Szenarien abzudecken. Was dort klappt, klappt auch in einem PC.
Das ist nicht vergleichbar, da dir der 1:1 Vergleich wie auf dem PC fehlt. Was man auf den PC macht ist wahlweise SMT an oder aus zu knipsen, Wahlweise E-Cores an oder aus zu knipsen oder sogar mit großen CPUs die Core-Skalierung zu ermitteln.
Das gibts auf dem Smartphone in aller Regel nicht. Ein Gerät, eine Konfig. Du wirst nicht rausbekommen, ob der Ansatz keine Ahnung 1+2+4 besser ist als der Ansatz 2+0+4 oder 2+2+8 oder sonstwas. Weil gibt es nicht zu kaufen...