Just another Purebasic Optimizer V 2.01

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Just another Purebasic Optimizer V 2.01

Beitrag von Deeem2031 »

JaPBO geht in die nächste Runde. Und zwar für PB 4.0.
Und nicht nur das es der erste Optimierer für 4.0 ist - es ist auch das erste Projekt, das mit PB.Net geschrieben wurde. (Die .Net Exe brauch auch demensprechend das .Net Framework 2.0+)

Bisher implementierte Optimierungen:
-remove unused code after 'JMP' (Version 1.0)
-replace SYS_StringEqual (Ecx = 0) (Version 1.0)
-remove useless PUSH/POP (Version 1.0)

Installation ist ähnlich wie beim alten Optimierer:
-umbenennen: "\Compilers\Fasm.exe" -> "\Compilers\Fasm2.exe"
-downloaden & in "\Compilers\" Ordner entpacken:
-.Net: http://www.deeem2031.de/PB.Net/D_Optimizer_Net.zip
-x86: http://www.deeem2031.de/PB.Net/D_Optimizer_x86.zip
-ausprobieren :)

Noch'n kl. Bsp:

Code: Alles auswählen

Procedure p()
  ProcedureReturn #True
EndProcedure


Dim a(10,10)

#r = 50000000
t1 = ElapsedMilliseconds()
For i = 1 To #r
  If a.s
  EndIf
  p()
  a(1,2) + 1
Next
t1 = ElapsedMilliseconds() - t1
MessageRequester("",Str(t1)+" ("+Str(a(1,2))+")")
Ergebnisse bei mir:
ohne Optimierung: 2700 ms
mit Optimierung: 725 ms

Feedback und Bugreports sind natürlich willkommen :)

(Alter Thread: http://www.purebasic.fr/german/viewtopi ... optimierer (für PB3.94))
Zuletzt geändert von Deeem2031 am 11.12.2006 23:15, insgesamt 4-mal geändert.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Vielleicht wäre es ja noch recht interessant was du denn da optimierst :). Für
Leute, die gerne mal was in Assembler dazu lernen wollen :D
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

PB:

Code: Alles auswählen

Procedure a()
  ProcedureReturn #True
EndProcedure
Asm:

Code: Alles auswählen

; Procedure a()
macro MP0{
_Procedure0:
PS0=4
; ProcedureReturn #True
  MOV    eax,1
  JMP   _EndProcedure1
; EndProcedure
  XOR    eax,eax
_EndProcedure1:
  RET
}
Asm optimiert:

Code: Alles auswählen

; Procedure a()
macro MP0{
_Procedure0:
PS0=4
; ProcedureReturn #True
MOV    eax,1
_EndProcedure1:
RET
}
'Ne kleine Beschreibung erhält man übrigens auch, wenn man die Exe direkt ausführt.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@Deeem2031:

Danke! :allright: Werde ich mir heute abend mal anschauen.

<OT>

@Dostej, Dr. Shrek und Kaeru Gaman,

Ihr habt also auch keine Java-Programme auf Euren Rechnern?

</OT>


Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Kiffi hat geschrieben: <OT>
@Dostej, Dr. Shrek und Kaeru Gaman,
Ihr habt also auch keine Java-Programme auf Euren Rechnern?
</OT>


Grüße ... Kiffi
Das ist keine konstruktive Frage.
Die Antwort ist Nein.

Wenn es so einfach ist wie Deeem2031 sagt...
...kann er doch leicht auch die PB only Variante zur Verfügung stellen.
Er muss es aber nicht!
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Ähm, also eigentlich wollt damit manche Leute dazu bringen das .Net Framework zu installieren, anstatt die Fronten zu verhärten :roll:
Also wer strickt das .Net Framework nicht haben will (was ich zwar nicht wirklich verstehen kann, nur weil's von M$ kommt muss es ja nicht schlecht sein), der hat halt Pech und kann das Programm nicht nutzen. Vorerst werde ich keine PB4.0 Version rausgeben.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Deeem2031 hat geschrieben:PB:

Code: Alles auswählen

Procedure a()
  ProcedureReturn #True
EndProcedure
Asm:

Code: Alles auswählen

; Procedure a()
macro MP0{
_Procedure0:
PS0=4
; ProcedureReturn #True
  MOV    eax,1
  JMP   _EndProcedure1
; EndProcedure
  XOR    eax,eax
_EndProcedure1:
  RET
}
Asm optimiert:

Code: Alles auswählen

; Procedure a()
macro MP0{
_Procedure0:
PS0=4
; ProcedureReturn #True
MOV    eax,1
_EndProcedure1:
RET
}
'Ne kleine Beschreibung erhält man übrigens auch, wenn man die Exe direkt ausführt.
Heißt das etwa, dass

Code: Alles auswählen

  JMP   _EndProcedure1
; EndProcedure
  XOR    eax,eax
Völlig sinnlos da steht? :freak: Kann ich mir irgendwie nicht vorstellen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

In dem Fall ist das aber sinnlos. Nur wenn du das "ProcedureReturn #True" löschst, dann ist es nicht mehr sinnlos.
Das wird also auch nur gelöscht, wenn ein ProcedureReturn in der Proc steht, und dieses in keiner Abfrage o.Ä. steht.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

So für alle die, die .Net Exe nicht ausprobieren möchten:
Ich hab vorhin mal versucht den Optimierer mit PB4.01 zu kompilieren. Das war auch nicht das Problem. Das Installieren auch nicht. Aber das Ausprobieren. Ich war recht überrascht als ich dachte der Optimierer hat sich aufgehangen, wobei er aber einfach nur so lange gebraucht hat. Ich hab nämlich versucht den PB.Net-Compiler Source zu optimieren. Das funtkoniert mit der .Net-Exe auch wunderbar in paar Sekunden. Aber mit der PB4.01-Exe hat das über 5 mins gedauert, bis er den Code ausgespuckt hat. Nun könnte man natürlich behaupten ich hab das scheiße programmiert - aber warum ist dann die .Net Exe so schnell? Ist ja genau der gleiche Source-Code.
Ich werd zwar noch versuchen den Code ein bischen zu optimieren, aber ich würde euch trotzdem empfehlen die .Net-Exe zu nehmen...
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Hab jetzt mal Deeems Optimierer auf dem FirmenPaltop getestet:

Meine Ergebnisse:
Mit Optimierung: 591 ms
Ohne Optimierung: 1462 ms

Ansonsten frisst grad mscorsvw.exe meine CPU auf. Das Programm hat
anscheinend irgendwas mit dem Kompilieren von .NET-Anwendungen zu tun.
Auf jeden Fall hält es jetzt dauernd das System an und erzeugt durchgehend
zwischen 90% und 98% CPU-Auslastung. Scheißdreck sag ich da nur. Die
sollen erstmal ihr .NET aus dem Alpha-Stadium holen. :evil: Der Laptop zieht
grad Strom ohne Ende. Google zu laden hat schon 2 Minuten gedauert. :|
Antworten