Gast
#4776465
Hi, ich habe eine merkwürdige Beobachtung beim GCC gemacht. Daß -O3 aufs ganze Programm Geschwindigkeit kosten kann, kenne ich ja von x86 - Stichwort anwachsende Programmgröße vs. CPU-Cache. Also compiliere ich global gesehen mit -O2. Es gibt aber auch Pragmas, mit denen man den GCC zu Optimierung nur ausgewählter Code-Passagen anweisen kann. Das habe ich auch gemacht - nichts Wildes, nur z.B. eine oft aufgerufene Funktion mit einem Shellsort, die ich per Pragma auf -O3 gesetzt habe. Auf x86 bringt das eine meßbare Beschleunigung, weil die Routine klein genug bleibt, um kein Cacheproblem zu erzeugen. Auf ARM Cortex M4 hingegen bringt das eine Verlangsamung, obwohl der nichtmal einen Cache in dem Sinne hat. Ich habe auch ansonsten beim ARM-GCC auf Cortex-M4 noch kein Beispiel oder Codefragment gehabt, wo -O3 die Sache nicht gegenüber -O2 verlangsamt hätte. Ist das ein bekannter Defekt beim ARM-GCC? -O3 wäre damit ja eigentlich völlig sinnlos, weil es die Codegröße aufbläht UND den Code auch noch verlangsamt. Oder habe ich einfach nur die ganzen Pechtreffer gehabt, während andere da ein glücklicheres Händchen hatten? Wie sind Eure Erfahrungen mit ARM-GCC, -O3 und Cortex-M?