PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von Mok »

ts-soft hat geschrieben:@Mok
So ein blödsinn fehlte bisher noch :lol:
Hä?!
Dass MessageBox_() kleinere Executables erstellt, sollte schon bekannt sein.
Bezüglich GetFileSize_() hab ich einen kleinen Test durchgeführt:
(Ich weiss, dass ElapsedMIlliseconds() nicht das genaueste ist, aber das Ergebnis zeigt schon deutliche Unterschiede)

Code: Alles auswählen

#FILE$ = "C:\windows\system32\shell32.dll" ;12565 KB

Zeit0 = ElapsedMilliseconds()
For i = 1 To 10000
  Lof(ReadFile(#PB_Any,#FILE$))
Next
MessageRequester ("Lof()",Str(ElapsedMilliseconds() - Zeit0))

Zeit0 = ElapsedMilliseconds()
For i = 1 To 10000
  FileSize(#FILE$)
Next
MessageRequester ("FileSize()",Str(ElapsedMilliseconds() - Zeit0))

Zeit0 = ElapsedMilliseconds()
For i = 1 To 10000
  GetFileSize_(CreateFile_(#FILE$, #GENERIC_READ, #FILE_SHARE_READ, #Null, #OPEN_EXISTING, #Null, #Null),@dummy)
Next
MessageRequester ("FileSize()",Str(ElapsedMilliseconds() - Zeit0))
Das Ergebnis:

Code: Alles auswählen

                 Mit Debugger        Ohne Debugger
Lof()             1170                    483
FileSize()        1872                   1903
GetFileSize_()     484                    468
Ich hab schon viel Schmarren verzapft, aber meine eigenen Tests kenne ich fast auswendig.

Edit 1: Kann man nicht einfach mal was sagen, ohne von jeder Seite verarscht zu werden?
Edit 2: @c4s: Ach wirklich? :shock: Stell dir vor, das habe ich auch gewusst. Da FileSize() aber auch eine Möglichkeit bietet, die Dateigrösse festzustellen, hat es nunmal beim Test mitgemacht!
Edit 3: Ok, meine Aussage über MessageBox_() hat nichts mit Geschwindikeit zu tun! Dennoch ist der Befehl aufgrund der Grösse des Endproduktes vorzuziehen. Ist jetzt nicht die Welt, aber trotzdem...
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von SebastianJu2 »

Ich hab grad kein PB zur Verfügung, deshalb kann ich es nicht selbst testen, aber hast du mal getestet ob sich was ändert wenn du den letzten Code an den Anfang setzt?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von ts-soft »

@Mok
Stell mal die Reihenfolge Deines Testes um, der letzte wird wohl immer gewinnen :lol:
Und was hat kleinere Executable mit Geschwindigkeit zu tun?

Ich sag, Birnen mit Äppel vergleichen. Glaub mal weiter an den schmarrn, soll mich
nicht jucken. Muss niemanden überzeugen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von SebastianJu2 »

Wer weiß wie viele schlechtere Funktionen deswegen schon einen Speedtest gewonnen haben... :)
Woran kann das liegen? Die Ergebnisse sind reproduzierbar wenn man es wieder umdreht.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von Mok »

@SebastianJu2: Ich habe mit der Reihenfolge etwas herumjongliert und mit verschiedenen Einstellungen (Debugger, Skins Support) getestet, aber das Resultat bleibt das selbe: GetFileSize_() ist das schnellste, dicht gefolgt von Lof(), dann kommt lange nichts, dann kommt FileSize().
Ist halt so.

Edit:
@ts-soft: Über die Grösse des Endproduktes habe ich mich schon in meinem vorigen Posting geäussert. Glaub du lieber weiter, dass du immer Recht hast!
@ts-soft, @SebastianJu2: Ich weiss ja nicht, was ihr rumgefuhrwekt habt, aber bei mir ist es komplett egal, welche Reihenfolge das ganze hat. Setze ich GetFileSize_() and die erste Stelle und FileSize() an die letzte, ändert sich nichts! Falls es bei euch anders sein sollte: Herzlichen Glühstrumpf!
Zuletzt geändert von Mok am 01.03.2011 22:48, insgesamt 2-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von SebastianJu2 »

@Mok

Ok... ich hatte das nur bei einem Test von mir mal gemerkt. Kann ich mir nicht wirklich erklären. Wenn es mit dem Speicher zu tun hätte dann sollten die tausende Loops aber ausreichen um da Platz zu schaffen schon im ersten Codeteil. Von daher keine Ahnung was das ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von ts-soft »

Selbst mit dem Orginalcode ist FileSize am schnellsten. Jedenfalls bei mir, ist auch
logisch. Lof öffnet ja erst die Datei, wird immer am langsamsten sein.

Aber ist vollkommen egal, so was führt keiner in einer schleife 10000x aus.
API oder PB-Funktion zum Speedtest ist schon falsch. PB nutzt die API.

Runtimefunktionen, also Datenverwaltung im Speicher, z.B. Strings usw.
da kann man Zeitsparen, da macht es auch Sinn.

Eure Tests haben ja mit Speedtest nicht viel am Hut, weil man da sowieso
fast nichts rausschlagen kann, was irgendein Mensch jemals in einer
Anwendung bemerken könnte. Solche Tests wie die von Mok sind selber
nur Zeitverschwendung.

//edit
Lof() verwendet man ja auch nur, wenn die Datei sowieso offen ist, und dann ist
es das schnellste, ansonsten natürlich das langsamste. Paßt also garnich in den
Vergleich, ist wieder ein Birnen Äpfel vergleich.
Zuletzt geändert von ts-soft am 01.03.2011 22:57, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von Mok »

@ts-soft:
Dass das keiner 1000x in einer Schleife ausführt, hoffe ich docheinmal schwer. In meinem Speedtest ging es darum, die Unterschiede zu verdeutlichen, weil man aus 1x ausführen der Befehle per ElapsedMilliseconds() immer 00 zurückbekommt. Aber lassen wir die beknackte FileSize mal beiseite.
Bevor man mit sowas hirnrissigen anfängt und um Millisekunden geizt, sollte man sein Programm eher hinsichtilch Pointer optimieren (oder zumindest lohnt es sich da eher aus), da muss ich dir wohl zustimmen :wink: .
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von freak »

Dieser Test macht keinen Sinn, denn die Hauptzeit die dieser Befehl benötigt besteht darin, im Dateisystem nachzusehen ob es diese Datei überhaupt gibt bzw. sie zu öffnen. Solche Anfragen werden wegen ihrer Dauer vom Betriebssystem gecached. Mehrfach die selbe Datei zu testen gibt also keinen Sinn. Das ist ungefär so als wenn man seine Internetverbindung testen will indem man immer wieder ein Bild aus dem Browsercache lädt :lol:

Grundsätzlich:
Man kann nicht PB mit C/C++ vergleichen, weil es für C/C++ hunderte verschiedener Compiler gibt. Also wenn dann bitteschön einen Vergleich mit einem konkreten Compiler. Genausowenig kann man zwei Sprachen allgemein vergleichen, weil die Anwendungsgebiete viel zu groß sind. Wenn dann kann man allerhöchstens Aussagen bezüglich eines bestimmten Algorithmus treffen.

Letztlich ist ein "langsames" aber korrektes Programm ein vielfaches mehr wert als ein "schnelles", das an jeder Ecke abstürzt. Also macht euch lieber Gedanken wie man fehlerfreie Programme schreibt, anstatt euch zu fragen wie man noch irgendwo 10ns einsparen kann :wink:
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Re: PB im Vergleich mit anderen Sprachen in Bezug auf Speed

Beitrag von inc. »

Die eigentliche Antwort auf diesen Thread wurde schon am Anfang gegeben :-) :
http://www.purebasic.fr/german/viewtopi ... 41#p287441

Ich finde es immer wieder interessant, das "Sprachen" in ihrer Geschwindigkeit verglichen werden, also somit deren Paradigma wenn man die Frage ganz genaue nehmen würde.

Die Geschwindigkeit hängt nicht von der Sprache ab, sondern vom Compiler wie er den Code interpretiert und sodann in ASM (was via PB sodann an FASM weitergereicht wird) oder direkt in Maschinencode umsetzt. Und genau da bestehen selbst zwischen diversen Compilern gleicher Sprachen markante Unterscheide. Vergleiche mal die Geschwindigkeit eines C++ Kompilats aus VS C++ 6 und aus VS C++ 8 oder neuer. Hier merkt man die Optimierung und den dadurch entstandenen Geschwindigkeitszuwachs beim finalen Kompilat.

Der PB-Compiler ist eben nicht optimierend und daher kannst du noch soviel am Ende im nativen PB Code mit z.B. Pointern o.ä. optimieren, aber solange die Interpretation in den ASM Code eben noch nach Optimierung ruft hängt eben ein Kompilat von PB dem eines MSVS oder Intel oder GCC Compilers noch hinterher. DiIes merkst Du z.B. bei For/Next Schleifen, so auch in jenem zitierten FlipBuffers-Code-Workaround am Anfang dieses Threads, wo eben jene Routinen von PB-Nativ bis hin zu ASM direkt verfasst verglichen werden. Selbst wenn du "innerhalb" der For/Next Routine alles in ASM verfasst, hängst du der For/Next Routine in kompletter ASM Schreibe geschwindigkeitsmäßig merklich hinterher.

Und gerade Videobearbeitung wo komplette Pixelarrays via Schelifen behandelt werden, lassen ein PB Kompilat verglichen zu einem GCC Kompilat enorm in die Knie gehen. Beweis: http://www.purebasic.fr/english/viewtop ... =7&t=27449
Dort hat Trond ebenso gezeigt, wie eine native ASM Umsetzung die Sache richtig rennen lässt.

Wenn Du also mit PB maximale Performance erreichen willst (wo dann frecherweise gesagt nur noch FASM der Flaschenhals wäre :-) ), dann kommst du nicht um eine "Bastard"- also Hybride-Codierung aus PB und ASM herum.

Aber ich denke es ist eigentlich auch nicht das Ziel von PB als eine der schnellsten Sprachen da zu stehen, eher als eine schnell erlernbare und überschaubare, daher ist dies auch keine Kritik meinerseits an PB ;-)

EDIT: Sehe Gerade Freak hat auch schon geposted ...daher sorry für Doppelungen
Zuletzt geändert von inc. am 01.03.2011 23:16, insgesamt 3-mal geändert.
Hier gibts die OOP Option für PureBasic.
Antworten