foofoobar schrieb:
Mir fallen auf Anhieb wenig Funktionen, Methoden oder Algorithmen ein die von mehr als 16 Registern (speziell GPR) profitieren.
Wenn du ein Programm nur als einzelne Funktionen, Methoden und Algorithmen begreifst, dann ist es natürlich relativ einfach zu schreiben, dass mehr als 16 Register nicht benötigt werden. Mit der gleichen Argumentation könnte man allerdings auch 16 Register hinterfragen, weil 8 früher auch gereicht haben und wenn man heute händisch einen Algorithmus umsetzt, ist es einfacher das mit 8 Registern zu machen als mit 16.
Nur besteht heute eine Software nicht mehr aus einzelnen Funktionen, Methoden oder Algorithmen, sondern eine Vielzahl davon, die auch teilweise miteinander interaggieren.
foofoobar schrieb:
Hast du konkrete Beispiele parat?
https://www.intel.de/content/www/de...ons-intel-apx-architecture-specification.html - In der PDF von Intel steht alles zu dem Thema drin, wie die 16 zusätzichen Register dabei helfen Load- und Store-Anweisungen zu reduzieren und wie das auch in Verbindung mit den Befehlen nun auf drei Register auch dabei hilft, "Wide-Core-Designs" besser auszulasten.
In wie weit sich weitere Vorteile zeigen, kann man erst sehen, wenn quasi wirklich einen Compiler einmal x86 mit 16 Registern und einmal später x86 mit 32 Registern nebeneinander liegt als fertiges Binary.
Es geht hier nämlich nicht mehr darum, dass man händisch irgendwelche Algorithmen, Funktionen und Methoden überträgt, sondern was der Compiler zur Verfügung hat und daraus machen kann und welche Optimierungen er damit vornehmen kann und ebenso welche Optimierungen die CPU im ganzen am Ende "leichter" vornehmen kann.
Bigfoot29 schrieb:
Anders sieht es bei ARM64 (AARCH64) aus. Aktuelle Versionen können da schon eine Weile 31 Register nutzen. Gut möglich, dass da ein Teil der Performance herkommt...
Natürlich kommt am Ende auch da ein Teil der Preformance her, weil weniger Load- und Store vorhanden sind, dazu kann die CPU im OoO-Fenster und Co wesentlich mehr optimieren und das auch simpler, weil die "Register-Alias"-Tabelle weniger komplex wird.
Nur ist Software heute eben deutlich komplexer und ein Zusammenspiel aus verschiednen Ebenen. Wirklich gute Beispiele wird man erst bekommen, wenn - wie bei AVX512 vor zig Jahren - man wirklich Code nebeneinander legen kann und dann sieht was los ist.
foofoobar schrieb:
Immer her mit konkreten Beispielen.
Willst du damit behaupten, dass Intel hier ein vollkommen sinnlose Erweiterung schaft? Interessant, dass ab den 80er, als die Compiler sich immer stärker durchgesetzt haben, quasi alle neuren ISAs plötzlich auf 32 und mehr Register gesetzt haben, Die hätten ja alle damals auf 8 oder 16 bleiben können.
Bitte jetzt nicht falsch verstehen, aber wäre es so dass man hier nicht von profitiert, Intel würde es nichbt umsetzten und man hätte in den 80er und 90er nicht teilweise bei neuren Architekturen direkt auf 32 oder gar 64 Register gesetzt.
Wenn du natürlich immer nur jedes Problem einzeln isoliert betrachtest, klar okay. Aber heutige Compiler sind teilweise zu optimierungen fähig, die kein normaler Mensch wirklich schafft, weil LLVM und Co deutlich komplexeren Optimerungsroutinen haben und je mehr Futter man den gibt, um so besser arbeiten sie.