mikrocontroller.net

Forum: Compiler & IDEs WinCC Outputgrößen bei Optimierung


Autor: Tobias Hipp (taranis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

gestern abend (spät) viel mir auf, dass sich die Outputgrößen irgendwie 
nicht so verhalten wie ich es erwartet hätte, nämlich so:
- Ohne Optimierung: Output: 7,05kB
- mit -O/-O1 : 7,15kB
- mit -O2 : 7,64kB
- mit -O3: 7,75kB
- mit -Os: 7,63kB

Was ich nicht verstehe, ist, dass -Os so einen großen Output liefert, 
gerade im Vergleich zum nicht auf Größe optimierten Code.
Zum Anderen frag ich mich natürlich, schreib ich so miesen Code, dass er 
sich nicht optimieren lässt, oder mach ich was beim Kompilieren falsch?
Als Optionen hab ich nur das Target, -Wall und eine Optimierungsstufe. 
Und im Debug-Modus noch -g (erzeugt Debugger Symbole).

Grüße
Tobi

Autor: Tobias Hipp (taranis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerade gemerkt, dass ich im Debug-Modus kompiliert habe.
Im Releasemodus ändern sich aber nur die Zahlen um rund 3kB und die 
Reihenfolge der Outputgrößen wäre dann
-O/O1 (4,11kB)
-O2 (4,15kB)
-Os (4,16kB)
-O3 (4,22kB)
-ohne (4,37kB)

Immerhin ist der unoptimierte Output jetzt der Größte. Aber ich versteh 
immer noch nicht, warum die Größenoptimierung größeren Output erzeugt 
als die Geschwindigkeitsoptimierung. Das läuft doch dem Ziel zu wieder 
und macht -Os doch eigentlich (zumindest in dem Fall hier) überflüssig.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal zusätzlich:

-fno-inline-small-functions


Peter

Autor: Tobias Hipp (taranis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schön für den Tipp, jetzt mach die Option -Os auch Sinn, in menem 
Verständnis.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Versuch mal zusätzlich:
>
> -fno-inline-small-functions

hmmm, ich dachte das wäre längst in gcc? Sind nur ein paar Zeilen das.

FYI:
Index: avr-protos.h
===================================================================
--- avr-protos.h        (Revision 160067)
+++ avr-protos.h        (Arbeitskopie)
@@ -23,6 +23,8 @@

 extern int function_arg_regno_p (int r);
 extern void avr_override_options (void);
+extern void avr_optimization_options (int,int);
 extern void avr_cpu_cpp_builtins (struct cpp_reader * pfile);
 extern int avr_ret_register (void);
 extern bool class_likely_spilled_p (int c);
Index: avr.c
===================================================================
--- avr.c       (Revision 160067)
+++ avr.c       (Arbeitskopie)
@@ -223,6 +223,20 @@ avr_override_options (void)
   init_machine_status = avr_init_machine_status;
 }

+/* Implement `OPTIMIZATION_OPTIONS' */
+/* Give some reasonable optimization defaults for AVR.
+   These can still be overwritten by command line arguments */
+
+void
+avr_optimization_options (int level ATTRIBUTE_UNUSED, int size)
+{
+  if (size)
+    {
+      set_param_value ("max-inline-insns-single", 3);
+      set_param_value ("max-inline-insns-auto", 3);
+    }
+}
+
 /*  return register class from register number.  */

 static const enum reg_class reg_class_tab[]={
Index: avr.h
===================================================================
--- avr.h       (Revision 160067)
+++ avr.h       (Arbeitskopie)
@@ -125,6 +125,7 @@ extern GTY(()) section *progmem_section;
 #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");

 #define OVERRIDE_OPTIONS avr_override_options ()
+#define OPTIMIZATION_OPTIONS(OPTIMIZE,OPTIMIZE_SIZE) avr_optimization_options (OPTIMIZE,OPTIMIZE_SIZE)

 #define CAN_DEBUG_WITHOUT_FP


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.