Software > Coding
gcc, GEMDOS Super und Stackzerstörung
czietz:
... und bevor jemand kommentiert "Ja, aber globale Variablen benutzt man ja auch nicht": Wenn ich alle Variablen der Funktion als Argument übergebe, wird es zwar generell schneller, weil diese dann sowohl bei Pure C als auch bei gcc in Registern vorgehalten werden, jedoch ist der mit gcc generierte Code immer noch ca. 20% langsamer als der mit Pure C generierte.
Insbesondere braucht diese Schleife mit gcc ca. 40%(!) länger als mit Pure C.
--- Code: --- while (p>start_local) {
if ((x = *(--p)) != patt2_local) {
bad = x;
}
*p = patt1_local;
}
--- Ende Code ---
Ich hätte ja gedacht, dass ein moderner Compiler gegen einen aus dem vergangenen Jahrtausend meilenweit überlegen ist. Wohl falsch gedacht...
simonsunnyboy:
O3 hilft vielleicht noch mehr?
czietz:
Mit -O3 braucht die gepostete Schleife mit gcc nur noch 15% länger als mit Pure C. Immer noch nicht toll.
gcc -O3 hält den Pointer p in zwei Adressregistern vor, einen zum Lesen und Beschreiben der Speicherstelle und einen zum Vergleich mit start. So müssen beide Register in jeder Schleife synchronisiert werden und das kostet unnötig Zeit.
Börr:
Könnten wir mal ein Atari Coding Workshop Wochenende machen?
mfro:
--- Zitat von: czietz am So 07.08.2016, 12:01:10 ---Mit -O3 braucht die gepostete Schleife mit gcc nur noch 15% länger als mit Pure C. Immer noch nicht toll.
gcc -O3 hält den Pointer p in zwei Adressregistern vor, einen zum Lesen und Beschreiben der Speicherstelle und einen zum Vergleich mit start. So müssen beide Register in jeder Schleife synchronisiert werden und das kostet unnötig Zeit.
--- Ende Zitat ---
Hmmm.
Mit -O3:
--- Zitat ---Took 185 Ticks.
--- Ende Zitat ---
mit -O2:
--- Zitat ---Took 204 Ticks.
--- Ende Zitat ---
mit -Os:
--- Zitat ---Took 171 Ticks
--- Ende Zitat ---
... da scheint was mit der Optimierung im Argen zu sein ...
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln