Danke fuers austesten, dann wissen wir jetzt was sich lohnt

Ich denke die Sache mit den Shifts bringt am meisten...
Moderatoren: jamiro, ligi, P_Latzhalter.
| Autor | Neuer Beitrag |
|---|---|
| #26 21.08.2008 | |
| Mitglied Registriert seit: Aug 2007 Beiträge: 543 | Super! Danke fuers austesten, dann wissen wir jetzt was sich lohnt ![]() Ich denke die Sache mit den Shifts bringt am meisten... |
| #27 21.08.2008 | |
| Mitglied Registriert seit: Jun 2008 Beiträge: 24 | Ich verstehe aber noch nicht warum -Os besser ist als -O3. O3 optimiert teilung in Bit Shift. Os Code (100k) ist jedenfalls kleiner als O3 Code (114k). Ist 114k zu gross fuer den Atmega644p? « Bearbeitet von scheveningen am 21.08.2008. » |
| #28 21.08.2008 | |
Mitglied ![]() Registriert seit: May 2007 Beiträge: 492 Ort: Zuerich |
-Os == Optimize for Size -O3 == Optimize for Speed O3 macht Loop-unrolling und aehnliches... Optimiert also so, dass bei beliebig viel Programmspeicher optimal schneller Code rauskommt. Os optimier auf Speicherplatz. Das heisst es kommt langsamerer Code raus, wenn er dafuer kompakter ist. Das heisst auch, dass garantiert kein Loop-unrolling und aehnliches gemacht wird. Eigentlich waehlt man diese Option nur dann, wenn man zu wenig Platz hat. Beim NG optimiere ich mit -O3... Gruss - Amir _______________ UAVP | MK | NG "Computer games don't affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!" - K. Wilson, Nintendo |
| #29 21.08.2008 | |
| Mitglied Registriert seit: Sep 2007 Beiträge: 96 Ort: 21271 Asendorf | Divisionen auf signed ints können auch nicht so einfach zu shifts umgewandelt werden (Vorzeichenbit!) *zu-cascade-schiel*. Sobald man aus dem "int" ein "unsigned int" macht, optimiert der Compiler auch von alleine.
Der Code ist ähnlich, aber die Sprungziele sind unterschiedlich ![]() Der Ausdruck im zweiten if() wird nur im "else" Fall ausgewertet. _______________ "Sir! We are surrounded!" - "Excellent! We can attack in any direction!" |
| #30 21.08.2008 | |
| Mitglied Registriert seit: Jun 2008 Beiträge: 24 | razzor, du hasst recht mit die shifts! Mit die if's sehe ich es nicht so deutlich... int test3 (int c) werd: 0000001c <test3>: |
| #31 23.08.2008 | |
| Mitglied Registriert seit: May 2007 Beiträge: 62 |
Ich dachte der GCC führt bei einer signed variable einen arithmetic shift aus, d.h. das Vorzeichen wird korrekt behandelt. Klaus Leiss |
| #32 23.08.2008 | |
Mitglied ![]() Registriert seit: May 2007 Beiträge: 492 Ort: Zuerich |
Richtig, dachte ich auch. Natuerlich nur bei Divisionen mit Zweierpotenzen... Gruss - Amir _______________ UAVP | MK | NG "Computer games don't affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!" - K. Wilson, Nintendo |
| #33 23.08.2008 | |
| Mitglied Registriert seit: Jun 2008 Beiträge: 24 | Nochmal ein bisschen Code ![]() Optimiert mit -Os: int test (int a) Optimiert mit -O3: 00000000 <test>: |
| #34 25.08.2008 | |
| Mitglied Registriert seit: Apr 2007 Beiträge: 84 Ort: Ulft | We could gain more speed if we try to overclock the Mega644. The http://belogic.com/uzebox/ uses even 28,6MHz on a Mega644 for clockspeed, thats 140% compared to the original 20MHz.
A downside:
Perhaps 26 MHz or less will do.. Of course the software needs to be modified, but hej who doesn't want to push a MK to its limits. ![]() « Bearbeitet von Jacques am 25.08.2008. » |
| #35 26.08.2008 | |
| Mitglied Registriert seit: Sep 2007 Beiträge: 96 Ort: 21271 Asendorf |
Scheinbar sind selbst alle funktionsinternen Sprungmarken ungültig wenn das Programm nicht gelinkt wurde. Wenn man den Code vollständig linked sieht es anders aus: int test1(int i) {$ avr-gcc -Wall -Os avrtest.c -o avrtest $ avr-objdump -d avrtest 00000054 <test1>: _______________ "Sir! We are surrounded!" - "Excellent! We can attack in any direction!" |
| #36 26.08.2008 | |
| Mitglied Registriert seit: Sep 2007 Beiträge: 96 Ort: 21271 Asendorf | 00000054 <test1>: Der __divmodhi4() Call wird schon von -O1 unterdrückt (und zu einem arithmetic-shift gewandelt) und von -O2 schliesslich noch optimiert:
_______________ "Sir! We are surrounded!" - "Excellent! We can attack in any direction!" |
| #37 27.08.2008 | |
| Mitglied Registriert seit: Jun 2008 Beiträge: 24 | Razzor, danke! Wann mein Kopter fliegt (in 2 Wochen?) werde ich versuchen die Code ein bisschen zu optimieren. - mehr else Statements - Wahrscheindlichkeitssortierung / profiling - conditional compilation (fuer Leute die jetzt kein Kompass u.s.w. brauchen) |
Beiträge als RSS Feed · Impressum
© Holger Buss & Ingo Busker • Mikrocontroller- & MicroSPS-Forum is powered by UseBB Forum Software