Optimizer

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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 :)
Zuletzt geändert von remi_meier am 12.05.2005 16:24, insgesamt 1-mal geändert.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ou tolles Feedback :D
Für alle, dies noch nie gedownloadet haben: Der Source is dabei :D
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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 :)
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Beitrag von dige »

Wo kann man denn das Teil downloaden? Der Link oben funzt net
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag 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:
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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
Benutzeravatar
Hades
Beiträge: 100
Registriert: 21.05.2005 11:54

Beitrag von Hades »

Ein super Tool ! :mrgreen:
Das hat Purebasic wirklich gefehlt.

Ich hoffe Du machst damit weiter. :allright:
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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 :)
Benutzeravatar
Hades
Beiträge: 100
Registriert: 21.05.2005 11:54

Beitrag 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.
Antworten