App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
GCC: Optimierungsanweisungen im Code
- Ersteller i_hasser
- Erstellt am
Hi
Such eine Möglichkeit GCC für einen kleineren Codeabschnitt (notfalls gehts auch per Compilerflag) anzuweisen, dass er keinen Code wegoptimieren soll.
Läuft auf sowas hinaus:
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
Und da will ich auch immer schön ein ADD im Assembleroutput sehen. Dummerweise optimiert GCC das einfach weg .
i und j sind einfache ints, komischerweise geht es wenn ich stattdessen floats nehme... brauch das aber auch mit ints.
Such eine Möglichkeit GCC für einen kleineren Codeabschnitt (notfalls gehts auch per Compilerflag) anzuweisen, dass er keinen Code wegoptimieren soll.
Läuft auf sowas hinaus:
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
i+=j;
Und da will ich auch immer schön ein ADD im Assembleroutput sehen. Dummerweise optimiert GCC das einfach weg .
i und j sind einfache ints, komischerweise geht es wenn ich stattdessen floats nehme... brauch das aber auch mit ints.
Ray
Grand Admiral Special
- Mitglied seit
- 11.11.2001
- Beiträge
- 3.141
- Renomée
- 20
- Standort
- An der Spree
- Mein Laptop
- Kein Notbuch
- Prozessor
- Intel Core2Quad Q9650@3.8, AMD Ryzen 9 under test
- Mainboard
- DFI LANPARTY LT X48-T2R + MIPS DFI LANparty P35/X38/X48 Series Freezer Set Nickel
- Kühlung
- EK-Supreme
- Speicher
- 4 x 2 GB OCZ PC2 8500 C5 Reaper@500
- Grafikprozessor
- XFX 8800 GTS(G92) 512 + EK-FC8800 GT/GTS(g92)
- Display
- TFT HP w2408h, 1920x1200
- SSD
- Samsung 840 Pro 256 GB
- HDD
- 2 x WD Black 1TB
- Optisches Laufwerk
- Samsung SH-D163A, Samsung SH-S183A
- Soundkarte
- Creative X-FI Xtreme Gamer Fatality Pro
- Gehäuse
- Modified Lian Li PC201B
- Netzteil
- Seasonic S12 550W
- Betriebssystem
- Win7U-64
- Webbrowser
- FireFox
- Verschiedenes
- Thermochill PA120.3 Triple Radiator , Liang DDC , 11 years old mainboard, still running!
Deklariere Deine Variablen mit volatile, dann darf der Compiler das nicht wegoptimieren.
Alternativ kannst Du versuchen, mit (volatile type) zu casten, wobei Du das Increment ausschreiben mußt:
Oder so ähnlich.
Ciao,
Ray
Alternativ kannst Du versuchen, mit (volatile type) zu casten, wobei Du das Increment ausschreiben mußt:
Code:
int i, j;
...
(volatile int) i = (volatile int)(i+j);
...
Ciao,
Ray
Original geschrieben von Ray
Deklariere Deine Variablen mit volatile, dann darf der Compiler das nicht wegoptimieren.
Alternativ kannst Du versuchen, mit (volatile type) zu casten, wobei Du das Increment ausschreiben mußt:
Oder so ähnlich.Code:int i, j; ... (volatile int) i = (volatile int)(i+j); ...
Ciao,
Ray
Also wenn es das ist wofür ich es halte...
DANKE!
Dummerweise hab ich jetzt schon ca. 4 Stunden mit dem Zeug zugebracht
*grummel*
Also manchmal könnt ich gcc wirklich treten.
Jetzt gehts um sowas:
int a;
a=a+7
a=a+6
Die Sache ist etwas delikat. Einerseits sollen beide Additionen nacheinander durchgeführt werden. Das macht er auch schön wenn ich a als volatile int deklariere.
Andererseits soll a zwischen den Additionen aber nicht wieder zurückgeschrieben werden.
Also von der Sache her brauch ich ein a=a+7+6; ohne, dass er das +7 und +6 zusammenfasst. Ich hab vor die 6 und die 7 mal volatile geschrieben, ohne Ergebnis (hats trotzdem zu +13 zusammengefasst).
Dann hab ich das in Klammern gesetzt - auch nix. volatile vor Konstanten oder Berechnungsausdrücken scheint ihn nicht zu interessieren.
Die einzige Möglichkeit die mir so spontan einfallen würde wäre volatile register int a; ... aber das schmeckt ihm auch nicht. Da macht der wieder das draus:
Ich will da ein einwandfreies 'add $0x6, %edx \n add $0x7, %edx' stehen haben
Also manchmal könnt ich gcc wirklich treten.
Jetzt gehts um sowas:
int a;
a=a+7
a=a+6
Die Sache ist etwas delikat. Einerseits sollen beide Additionen nacheinander durchgeführt werden. Das macht er auch schön wenn ich a als volatile int deklariere.
Andererseits soll a zwischen den Additionen aber nicht wieder zurückgeschrieben werden.
Also von der Sache her brauch ich ein a=a+7+6; ohne, dass er das +7 und +6 zusammenfasst. Ich hab vor die 6 und die 7 mal volatile geschrieben, ohne Ergebnis (hats trotzdem zu +13 zusammengefasst).
Dann hab ich das in Klammern gesetzt - auch nix. volatile vor Konstanten oder Berechnungsausdrücken scheint ihn nicht zu interessieren.
Die einzige Möglichkeit die mir so spontan einfallen würde wäre volatile register int a; ... aber das schmeckt ihm auch nicht. Da macht der wieder das draus:
Code:
00000000 <main>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 ec 08 sub $0x8,%esp
6: 8b 55 fc mov 0xfffffffc(%ebp),%edx
9: 83 c2 06 add $0x6,%edx
[color=red] c: 89 55 fc mov %edx,0xfffffffc(%ebp)
f: 8b 55 fc mov 0xfffffffc(%ebp),%edx[/color]
12: 83 c2 07 add $0x7,%edx
15: 89 55 fc mov %edx,0xfffffffc(%ebp)
18: 83 e4 f0 and $0xfffffff0,%esp
1b: 89 ec mov %ebp,%esp
1d: 31 c0 xor %eax,%eax
1f: 5d pop %ebp
20: c3 ret
Ich will da ein einwandfreies 'add $0x6, %edx \n add $0x7, %edx' stehen haben
Ray
Grand Admiral Special
- Mitglied seit
- 11.11.2001
- Beiträge
- 3.141
- Renomée
- 20
- Standort
- An der Spree
- Mein Laptop
- Kein Notbuch
- Prozessor
- Intel Core2Quad Q9650@3.8, AMD Ryzen 9 under test
- Mainboard
- DFI LANPARTY LT X48-T2R + MIPS DFI LANparty P35/X38/X48 Series Freezer Set Nickel
- Kühlung
- EK-Supreme
- Speicher
- 4 x 2 GB OCZ PC2 8500 C5 Reaper@500
- Grafikprozessor
- XFX 8800 GTS(G92) 512 + EK-FC8800 GT/GTS(g92)
- Display
- TFT HP w2408h, 1920x1200
- SSD
- Samsung 840 Pro 256 GB
- HDD
- 2 x WD Black 1TB
- Optisches Laufwerk
- Samsung SH-D163A, Samsung SH-S183A
- Soundkarte
- Creative X-FI Xtreme Gamer Fatality Pro
- Gehäuse
- Modified Lian Li PC201B
- Netzteil
- Seasonic S12 550W
- Betriebssystem
- Win7U-64
- Webbrowser
- FireFox
- Verschiedenes
- Thermochill PA120.3 Triple Radiator , Liang DDC , 11 years old mainboard, still running!
volatile register int a; ist Quatsch, das ist wie fahren und bremsen gleichzeitig.
volatile veranlasst den Compiler, bei jedem Zugriff die Variable zu benützen. D.h. er kann gar nicht anders, als immer zurückschreiben.
Und was ist mit:
oder
Aber warum brauchts das denn überhaupt?
volatile veranlasst den Compiler, bei jedem Zugriff die Variable zu benützen. D.h. er kann gar nicht anders, als immer zurückschreiben.
Und was ist mit:
Code:
int a;
a = (int)(volatile int) (a+7); // Um den Ausdruck allein zu betrachten
a = (int)(a+6); // Um a im Register zu halten
Code:
int a;
a = (int) ((volatile int)(a)+7); // Um den Ausdruck allein zu betrachten
a = (int)(a+6); // Um a im Register zu halten
Ray
Grand Admiral Special
- Mitglied seit
- 11.11.2001
- Beiträge
- 3.141
- Renomée
- 20
- Standort
- An der Spree
- Mein Laptop
- Kein Notbuch
- Prozessor
- Intel Core2Quad Q9650@3.8, AMD Ryzen 9 under test
- Mainboard
- DFI LANPARTY LT X48-T2R + MIPS DFI LANparty P35/X38/X48 Series Freezer Set Nickel
- Kühlung
- EK-Supreme
- Speicher
- 4 x 2 GB OCZ PC2 8500 C5 Reaper@500
- Grafikprozessor
- XFX 8800 GTS(G92) 512 + EK-FC8800 GT/GTS(g92)
- Display
- TFT HP w2408h, 1920x1200
- SSD
- Samsung 840 Pro 256 GB
- HDD
- 2 x WD Black 1TB
- Optisches Laufwerk
- Samsung SH-D163A, Samsung SH-S183A
- Soundkarte
- Creative X-FI Xtreme Gamer Fatality Pro
- Gehäuse
- Modified Lian Li PC201B
- Netzteil
- Seasonic S12 550W
- Betriebssystem
- Win7U-64
- Webbrowser
- FireFox
- Verschiedenes
- Thermochill PA120.3 Triple Radiator , Liang DDC , 11 years old mainboard, still running!
Das es um AMBiX geht, war schon klar.
Und wie ist nun die Lösung?
Oh, Freitag, kurz vor 21 Uhr und immer noch auf Arbeit. Mal wieder typisch. Muß jetzt Feierabend machen...
Und wie ist nun die Lösung?
Oh, Freitag, kurz vor 21 Uhr und immer noch auf Arbeit. Mal wieder typisch. Muß jetzt Feierabend machen...
Zuletzt bearbeitet:
Ich hab das ganze etwas anders und vor allem mit nicht-konstanten Werten gemacht. Also es ist nach wie vor der Form x=x+y+z, aber eben mit Variablen. Dafür hab ich eben die Zugriffe auf selbige inkauf genommen (sind arrayvariablen, also da kann er nix vorhersagen), hat den Bench zwar etwas verändert praktisch hat er so aber fast mehr Wert.
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 456
- Antworten
- 38
- Aufrufe
- 10K
- Antworten
- 8
- Aufrufe
- 4K
- Antworten
- 469
- Aufrufe
- 77K