Compiler-Optimierungen

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

wenn ich endlich meine Port80-Karte habe, krieg ich den PC meiner Schwester eventuell wieder hin. (BIOS scheint tod zu sein) Der hat nur 300 Mhz, und den mache ich dann sowieso ganz platt, und installiere Firefox drauf. dann schau ich mal, obich da die von dir genannten Symptome auch feststellen kann...
cya
Pascal
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Hi, ich bins wieder :)
Hab den Tipp von Stefan auch noch hinzugefügt.
http://mypage.bluewin.ch/remimeier/webs ... mierer.zip
Hab ne Procedure hinzugefügt, die es mir extrem vereinfacht weitere Optimierungen hinzuzufügen, leider hab ich grad keine Zeit. Deshalb hab ichs jetzt mal online gestellt.
Der aktuelle Test:

Code: Alles auswählen

Code siehe unten (Resultate mit altem Code)
Resultate:
Ohne Optimierer
PB: 8015ms
ASM: 2875ms
Mit Optimierer:
PB: 2938
ASM: 2890

greetz
remi

PS: bald kommen noch mehr :wink:
Zuletzt geändert von remi_meier am 16.02.2005 23:12, insgesamt 1-mal geändert.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

Hey Remi, nicht schlecht! :allright:
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Nochmals n Update auf Arrays und ein unnötiges auf Floats (komisch, Floats scheinen besser optimiert zu sein).

Code: Alles auswählen

Dim Array(5,5)
a = 5
b = 6
c = 7
d = 3
e = 1
#N = 49999999

Delay(1000)

time1 = ElapsedMilliseconds()
For z = 1 To #N
  ;{ Integer
  a = a
  b - 1
  c - a / d
  c = a % 2
  c = c % 2
  a = b * 3
  a * 3
  zahl = i2/e
  
  Array(4,5) = 11
  ;}
  
Next
time1 = ElapsedMilliseconds() - time1


time2 = ElapsedMilliseconds()
For z = 1 To #N
  ;{ Integer
  !DEC [v_b] 
  
  !MOV    Ebx,dword [v_c] 
  !MOV    Eax,dword [v_a] 
  !MOV    Edi,dword [v_d] 
  !CDQ 
  !IDIV   Edi 
  !SUB    Ebx,Eax 
  !MOV    dword [v_c],Ebx 
  
  !MOV    Eax,dword [v_a] 
  !AND    Eax,1 
  !MOV    dword [v_c],Eax 
  
  !AND    dword[v_c], 1
  
  !MOV Eax,[v_b] 
  !LEA Eax,[Eax*2+Eax] 
  !MOV [v_a],Eax
  
  !MOV Eax,[v_a] 
  !LEA Eax,[Eax*2+Eax] 
  !MOV [v_a],Eax
  
  !MOV   Ebx, dword [v_e] 
  !MOV   Eax, dword [v_i2] 
  !CDQ 
  !IDIV   Ebx 
  !MOV    dword [v_zahl],Ebx
  
  
  !MOV    Eax,[a_Array+4] 
  !SAL    Eax,2 
  !MOV    Ebp,Eax 
  !ADD    Ebp,5 
  !SAL    Ebp,2 
  !ADD    Ebp,dword [a_Array] 
  !MOV    dword [Ebp],11
  ;}
  
Next
time2 = ElapsedMilliseconds() - time2

MessageRequester("", Str(time1)+" "+Str(time2))
Resultate:
ohne Opt.: 5078ms gegen 2453ms
mit : 2484ms gegen 2532

Komisch, hab irgendwie grad keine Ideen für Optimierungen mehr :?
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

hey, Remi, du läufst ja zu Höchstform auf! :D :allright:
Ich finde, man sollte dich als "Mister Optimized" ins PB-Team aufnehmen... :allright:

ca
Pascal
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ok, ich bins wieder. :)
Dank Rings hab ich jetzt das jaPBe Plugin - Zeugs mit all seinen Beschänkungen über Bord geworfen und einen FAsm Wrapper gemacht.
Das ganze gibts wie immer auf
http://mypage.bluewin.ch/remimeier/webs ... mierer.zip
Es sind keine weiteren Optimierungen hinzugekommen.

Anleitung:
1. Zip downloaden und entpacken
2. FAsm2.exe, FAsm.exe und Optimizer.ini in den Ordner PB\Compilers kopieren (dabei kann FAsm.exe bedenkenlos ersetzt werden, man kann auch einfach die bestehende FAsm.exe in Fasm2.exe umbenennen und nicht die aus dem Zip nehmen)
3. Irgendwas kompilieren
4. Ein Fenster "Optimizer" erscheint
- Hide this window next time (beim nächsten mal kompilieren dieses Fenster nicht mehr anzeigen)
- Optimize PureBasic.asm (soll der Asm-Output optimiert werden?)
5. Fertig
(Um das Optionenfenster wieder sichtbar zu machen, einfach mal in die Optimizer.ini schauen)

Wies Funktioniert:
Die neue FAsm.exe aus dem Zip stellt den Optimierer dar. Er wird mit den FAsm Parametern durch den PBCompiler aufgerufen. Nun optimiert er das PureBasic.asm und gibt dann die erhaltenen Parameter an den richtigen FAsm (FAsm2.exe) weiter, der das dann zu einem PureBasic.obj kompiliert. Danach läuft es standardmässig weiter.

greetz
remi

[EDIT]
Lol, hab dich glatt verpasst :D . Ich bin eigentlich nicht wirklich gut im Optimieren (es gibt noch so viele kleine Tricks wie der von Stefan), aber ich tu was ich kann.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

Egal, ob du dich als Optimierer siehst, oder nicht, programmieren kannst du auf jeden Fall besser als ich. :mrgreen: (Ich weiss nicht mal, was die verschiedenen ASM-Befehle bewirken. Ich hab ASM mal versucht, aber es war mir zu nervtötend. schlimmer noch als C(++))

cya
PAscal
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Antworten