Seite 4 von 10

Verfasst: 04.05.2005 19:55
von remi_meier
Tja doch.. Hab die Tipps von Stefan schnell noch eingebaut, aber noch nicht überprüft! V.a. in Prozeduren hab ichs nicht getestet!
Aber, bitte, Testen! (Link: http://mypage.bluewin.ch/remimeier/zip/Optimierer.zip

cu
Remi :)

Verfasst: 04.05.2005 20:08
von hardfalcon
Remi.....
Ich hab mein Windows XP erst vor einer Woche neu installiert! Da werde ich doch nicht gleich "eine unbekannte Datei von einen Unbekannten" runterladen, und dann auch noch ausführen...... tssssssss....... :mrgreen:

Ne, im Ernst, bin grade zu faul..... :mrgreen: Ausserdem kenn ich mich nicht mit ASM aus, da könnte ich dir eh keine guten Bugreports liefern.... :wink:

cya
Pascal

Verfasst: 04.05.2005 21:19
von remi_meier
Ou tolles Feedback :D
Für alle, dies noch nie gedownloadet haben: Der Source is dabei :D

Verfasst: 05.05.2005 13:11
von remi_meier
Hab ne Beta hier die getestet werden will!
Hab die Optimierungen von Stefans Link (http://www.azillionmonkeys.com/qed/amultl1.html) reingetan, nur bin ich da sehr unsicher, da ich z.T. 2 Register benutze anstatt wie PB nur eines. D.h. es könnte Fehler haben, deshalb stelle ich es auch noch nicht online. Bei interesse bitte bei mir melden.

Neu werden sachen wie
x * 2
x * 53
x * 567
bis x * 2048
optimiert!

Ich suche also ein Testprogramm mit vielen konstanten Multiplikationen (Multipl. mit festen Werten).

Danke
Remi :)

Verfasst: 12.05.2005 09:12
von dige
Wo kann man denn das Teil downloaden? Der Link oben funzt net

Verfasst: 12.05.2005 09:36
von gnozal
dige hat geschrieben:Wo kann man denn das Teil downloaden? Der Link oben funzt net
http://mypage.bluewin.ch/remimeier/zip/Optimierer.zip :wink:

Verfasst: 12.05.2005 21:00
von remi_meier
1. Danke gnozal
2. Hab jetzt nach erfolgreichen Testverläufen die neue Version online ge-
stellt!

Was ist neu:
- Ganz viele Multiplikationen mit festen Werten zwischen 2 und 2048 (glaub)
werden jetzt optimiert:
Bsp: X * 576
Wird jetzt zu
LEA eax,[eax+eax*8]
SAL eax,06H
anstatt zu
IMUL eax, 576 ;<- viel langsamer

- Rausschneiden von unbenötigten Prozeduren! Wobei das relativ be-
schränkt funktioniert. Es werden nur Prozeduren rausgeschnitten, die
in keiner anderen Stelle im Code aufgerufen oder mit @ der Pointer geholt
wird! Das tönt jetzt nach allem, ist es aber nicht, denn wenn 2 nichtbenötigte
Prozeduren sich gegenseitig aufrufen, wird keine der beiden rausgeschnitten!
Dieses Feature würde sonst zu viel Zeit benötigen und wäre wahrscheinlich
nicht mehr in einem Durchlauf durchführbar!
Also nur, wenn die Prozedur wirklich unabhängig dasteht.
Bei allen Includes von jaPBe hinzugelinkt macht das, anstatt 211KB eine
Exe von 102KB!

Zu beachten ist, dass jetzt nicht mehr nur Fasm.exe und Fasm2.exe in den
Compilers-Ordner kopiert werden muss, sondern auch IMULOptimierungen.txt

Link ist derselbe.
Also viel Spass beim Testen!

cu
Remi

EDIT: Aktuelles Beispiel:

Code: Alles auswählen

a = 5
b = 6
c = 7
d = 3
e = 1
zahl = 1
i2 = 1
e = 1
c = 5
#N = 49999999
z.l
Delay(1000)

time1 = ElapsedMilliseconds()
For z = 1 To #N
  ;{ Integer
  c - a / d
  c = a % 2
  a % 2
  a = b * 3
  a * 5
  zahl = i2/e
  zahl = -i2 - -c
  zahl * 576
  zahl * 2005
  zahl * 10
  zahl * 20
  zahl * 36
  zahl * 1399
  zahl * 417
  zahl * 427
  PeekL(@c)
  PokeL(@c,2)
  Red(c)
  Green(c)
  Blue(c)
  RGB(a,b,c)
  PeekB(@c)
  PokeB(@c, 2)
  PeekW(@c)
  PokeW(@c,23)
  PeekF(@c)
  PokeF(@c, 2.0)
  ; Austausch von Variablenwerten
  a = b
  b = c
  c = a
  ;}
Next
time1 = ElapsedMilliseconds() - time1

MessageRequester(Str(zahl), Str(time1))
Meine Zeiten:
Ohne Optimizer: 11300ms
Mit Optimizer: 7200ms

Verfasst: 21.05.2005 11:58
von Hades
Ein super Tool ! :mrgreen:
Das hat Purebasic wirklich gefehlt.

Ich hoffe Du machst damit weiter. :allright:

Verfasst: 22.05.2005 14:31
von remi_meier
Danke!
Ich arbeite gerade (mit DD) daran, dass die Assembler-Fehler auch ange-
zeigt werden und das alles auch mit TailBite funktioniert.

Könnte vielleicht jeder hier, der sich dafür interessiert, mal seine wichtigsten
Zeitkritischen Code-Zeilen posten, damit ich sehe, was hier am ehesten
optimiert werden muss?

Wäre euch sehr dankbar!

geetz
Remi :)

Verfasst: 23.05.2005 18:50
von Hades
Was theoretisch noch ne Menge Potenzial bietet sind die Fließkomma-Routinen. Dort sind 8 Register vorhanden, die bis jetzt von Purebasic nur sehr ungenügend genutzt werden.
Wenn bei meinem momentanen Projekt erst mal wieder die Luft raus ist schau ich mal, ob ich da direkt ein paar Beispiele finde.