Quidproquo77 schrieb:
SPEC kann/sollte nicht darüber befinden, wie ihre Benchmarks ausgeführt werden sollen. Compileroptimierungen sind etwas völlig normales und werden permanent angewendet.
Es geht hier aber nicht um normale Compiler-Optimierungen, sondern um welche, die "narrow applicability" haben, also ausser dem SPEC-CPU-Program xalancbmk bzw. das Programm, das die Grundlage dieses Benchmarks ist, vermutlich kein anderes real existierendes Programm optimieren.
Das kann sowas sein wie vor laengerer Zeit der Fall, in dem Sun es geschafft hat, in einem SPEC-CPU-Benchmark ein array-of-structs in ein struct-of-arrays umzuformen (und damit einen Faktor 2 oder so fuer dieses Programm erzielt hat, und damit fuer die entsprechende SPEC-Suite irgendwo in der Gegen von 10%). Wobei diese Umformung grundsaetzlich ok ist, in diesem Fall aber so viele Bedingungen erfuellt sein mussten, damit der Compiler sie anwenden konnte, dass eine kleine Aenderung im Programm schon dafuer gesorgt hat, dass sie nicht angewendet wurde, und in vielen Faellen, in denen weniger Bedingungen noetig sind, sie auch nicht angewendet wurde.
Ganz extrem waere es natuerlich, wenn man einen "Compiler" schreibt, der ueberprueft, ob der Programmcode dem eines SPEC-Benchmark-programms gleicht, und wenn ja, dann ein Programm produziert, das zunaechst ueberprueft, ob es den reference-input des entsprechenden SPEC-Benchmark-Programms als Input hat, und wenn ja, dann die dazupassende Ausgabe produziert, ohne etwas zu berechnen. Im Fall, dass es nicht der reference-input ist, wird das gemacht, was ohne diese "Optimierung" gemacht wird; genauso vom Compiler, wenn der Programmcode kein bekannter Benchmark ist.
Wo man die Grenze zieht, ist natuerlich die Frage. Ich bin mir sicher, dass bei den meisten anderen C, C++, und Fortran-Compilern auch Optimierungen gemacht wurden, weil sich die Entwickler angeschaut haben, was fuer Code herauskommt, wenn sie die SPEC CPU Programme compilieren, und wo sie diesen Code noch verbessern koennen. Und das Ergebnis wird dann im Durchschnitt die SPEC CPU Programme etwas besser optimieren als andere Programme, die sie sich nicht angeschaut haben.
Aber wenn man keine Grenze zieht, dann waere auch der oben genannte Extremfall legitim, obwohl der definitiv zu nichts anderem nuetzlich ist. Findest Du, dass dieser Extremfall akzeptiert werden sollte? Im Ergebnis waere SPEC CPU ein reiner Benchmark, der misst, wie schnell eine Eingabe gelesen und verglichen werden kann, und dann eine Ausgabe produziert werden kann. Das waere fuer die meisten Nutzer von SPEC CPU wenig nuetzlich.