Software > Coding
gcc, GEMDOS Super und Stackzerstörung
czietz:
Du hast einen schnelleren Rechner als ich ;). Auf einem 1040ST (original mit 8 MHz) bekomme ich:
gcc -O02579 ticksgcc -O11424 ticksgcc -O21155 ticksgcc -O31048 ticksgcc -Os994 ticks (schneller als O3, wie bei Dir)Pure C940 ticks (Gewinner!)
Die -- nicht im Forum gepostete -- Variante mit lokalen statt mit globalen Variablen liefert:
gcc -O02365 ticksgcc -O1779 ticksgcc -O2806 ticks (langsamer als O1!)gcc -O3725 ticksgcc -Os672 ticksPure C672 ticks (gleichauf mit gcc -Os)
--- Zitat ---... da scheint was mit der Optimierung im Argen zu sein ...
--- Ende Zitat ---
Das sehe ich auch so.
mfro:
--- Zitat von: czietz am Fr 12.08.2016, 17:49:05 ---Du hast einen schnelleren Rechner als ich ;). Auf einem 1040ST (original mit 8 MHz)...
--- Ende Zitat ---
... einen (fast) originalen TT.
Lustigerweise wird's da auch mit -O3 -mcpu=68030 -mtune=68030 nur unwesentlich schneller, das mit Abstand beste Ergebnis liefert auch da der 68000 code mit -Os ...
simonsunnyboy:
Kurz und wenig Befehle kann auch schnell sein, muss nicht automatisch, aber kann....
ari.tao:
ad Topic:
--- Zitat von: czietz am Sa 06.08.2016, 17:58:02 ---SuperToUser() dürfte tatsächlich eine Lösung sein. Supexec() ist hier nicht so toll, weil ich -- anders im Beispiel mit foobar() -- schon Parameter an die Funktion übergeben will, am liebsten ohne globale Variablen dafür zu verwenden.
--- Ende Zitat ---
Man kann SuperExec (XBIOS_38) grundsätzlich auch für Prozeduren mit Parametern verwenden. Falls es noch interessiert, kann ich ein Bsp. für M2(TDI) zeigen, mit C kenne ich mich nicht aus. Alles nur eine Frage des Bindings. Übrigens kann man auch mittels GEMDOS_32 ein SuperExec ´zusammenbinden´.
ad offTopic:
Mit großem Interesse verfolge ich, wie Eure C-Compiler ´ticken´ . Weiß jmd., wie gcc die genannten ´ticks´ berechnet? Würde mich stark interessieren! Ich habe mich mal sehr intensiv mit Takt-zählen für Code-Stücke befaßt. Auf den kleinen STs ist das ganz einfach (man schaut in´s MC68000-Manual und addiert), auf einer 68030-Maschine ungleich schwieriger! Der Proz.-Cache sowie die unterschiedlichen MHze für Bus, P.-extern & P.-intern machen eine Berechnung nur an Hand des Codes imho unmöglich! Ich habe daraufhin eine Meßmethode programmiert. Funzt grundsätzlich, aber die Sache ist derart kompliziert, daß ich bis heutigen Tags nicht sicher bin, ob alles ok ist.
--- Zitat von: mfro am Fr 12.08.2016, 23:14:23 ---
--- Zitat von: czietz am Fr 12.08.2016, 17:49:05 ---Du hast einen schnelleren Rechner als ich ;). Auf einem 1040ST (original mit 8 MHz)...
--- Ende Zitat ---
... einen (fast) originalen TT.
Lustigerweise wird's da auch mit -O3 -mcpu=68030 -mtune=68030 nur unwesentlich schneller, das mit Abstand beste Ergebnis liefert auch da der 68000 code mit -Os ...
--- Ende Zitat ---
Die Performance kann man afaik immer nur für das Gesamt-System vergleichen, also die Kombi Maschine + Compiler. Das macht man (auf Ataris) mit dem Dhrystone-Test. Die ´ticks´ alleine dürften ziemlich irreführend sein!
ad @mfro :
Könnte sich Deine Biene, bitte bitte, auch mal setzen? Das Viech ist derart lästig, daß ich mich davon immer in den H... gestochen fühle :'(
czietz:
--- Zitat von: ari.tao am So 14.08.2016, 08:41:57 ---Man kann SuperExec (XBIOS_38) grundsätzlich auch für Prozeduren mit Parametern verwenden. Falls es noch interessiert, kann ich ein Bsp. für M2(TDI) zeigen, mit C kenne ich mich nicht aus. Alles nur eine Frage des Bindings.
--- Ende Zitat ---
Auch wenn das Problem mittlerweile gelöst ist, würde mich das Beispiel (auch wenn's in Modula 2 ist) interessieren.
--- Zitat von: ari.tao am So 14.08.2016, 08:41:57 ---ad offTopic:
Mit großem Interesse verfolge ich, wie Eure C-Compiler ´ticken´ . Weiß jmd., wie gcc die genannten ´ticks´ berechnet? Würde mich stark interessieren!
--- Ende Zitat ---
Die "ticks", die mein Testprogramm auswirft, sind einfach aus dem 200-Hz-Timer (Systemvariable hz_200) abgeleitet und somit proportional zur Zeit, die für die Ausführung des "Moving inversions"-Algorithmus benötigt wird. Das ist ja das, was letztlich der Benutzer (von YAART) merkt: Wieviel Zeit vergeht für einen Testdurchlauf. Und das dauert in der gcc-compilierten Version eben länger als in der Pure-C-compilierten Version.
Wenn ich oben hingegen von Zyklen gesprochen habe, waren CPU-Taktzyklen gemeint und sie waren mit dem Profiler von Hatari aufgenommen. Für die Emulation eines MC68000, dürfte sie ziemlich genau der Realität entsprechen. Für einen MC68030 weiß ich es nicht, wobei ich seit YAART immerhin weiß, dass Hatari durchaus den Cache des MC68030 emulieren kann.
--- Zitat ---Die Performance kann man afaik immer nur für das Gesamt-System vergleichen, also die Kombi Maschine + Compiler. Das macht man (auf Ataris) mit dem Dhrystone-Test. Die ´ticks´ alleine dürften ziemlich irreführend sein!
--- Ende Zitat ---
Das denke ich nicht. Die ticks (aka die vergangene Zeit) ist genau das, was der Benutzer spürt, siehe oben.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln