Geschwindigkeit

Fragen und Bugreports zur PureBasic 4.0-Beta.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Geschwindigkeit

Beitrag von Martin66119 »

Einen schönen guten Tag!

Ich habe mal eine Frage wegen der Geschwindigkeit des erzeugten Code.

Wenn ich eine Schleife

Code: Alles auswählen


  i.l
  StartTime = ElapsedMilliseconds()             
  For i = 0 To 10000000
  Next i                                   
  ElapsedTime = ElapsedMilliseconds()-StartTime
  MessageRequester("Stop", StrU(ElapsedTime,#lond),0)

durchlaufen lasse ist auf meinem Rechner (Pentium 3 1,4 GHz) "PureBasic 4.0 Beta" ca 10%langsamer in Bezug auf PB 3.94.

PB 3.94 brauch ca. 1000ms
PB 4.0 Beta 2 braucht ca. 1110ms

Was ist der Grund?

Grüße
Martin
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Beta :!: Was sagt Dir das?
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Na hoffentlich beta. Denn alles was ich bisher getestet habe, war mit der 4.0 langsamer als mit den alten PB-Versionen... und die exe-Files sind bei der 4.0 auch größer geworden....
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Ist doch kein Wunder, das neue String-System ist nunmal langsamer. Das wird sich auch bis zur final nich ändern, dafür haben wir jetzt die Threadsicherheit die sich ja so viele gewünscht haben.
Was auch eine Rolle spielen könnte ist das jetzt Fred kaum noch (keine?) Procs in reinem Asm schreibt, damit er die besser auf andere Systeme portieren kann. Also freut euch auf eine langsamere Runtime, aber dafür schnellere Developmenttime von PB ;)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Warum bremst der Ausdruck a = a (und a ist dabei 0) die Schleife so extrem ab? Wenn ich in jeder Schleife +0 addiere, geht das dreimal so schnell als wenn ich nichts mache:

Code: Alles auswählen

a = 0
StartTime1 = ElapsedMilliseconds()             
  For i = 0 To 100000000
    a = a + 0
  Next i                                   
ElapsedTime1 = ElapsedMilliseconds() - StartTime1

a = 0
StartTime2 = ElapsedMilliseconds()             
  For i = 0 To 100000000
    a = a
  Next i                                   
ElapsedTime2 = ElapsedMilliseconds() - StartTime2  

MessageRequester("Stop", Str(ElapsedTime1))
MessageRequester("Stop", Str(ElapsedTime2))
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Du hast Fragen Lebostein :roll: ;)

Das ist bei 3.94 auch nich anders. Liegt warscheinlich daran das du kurz nachdem du aus a gelesen hast wieder reinschreibst. Weiß den Fachausdruck dafür nicht mehr, jedenfalls ergibt das ein Problem für die CPU weil a noch nicht "komplett geladen" wurde. (Relativ kompliziert das ganze)
Jedenfalls wartet die CPU halt ein bisl bis die wieder in a schreibt.
Mit "+0" verhinderst du diesen Effekt. (Was auchnoch ein besonderen Fall hervorrufen kann, wodurch das ganze schneller geht. Aber will ja nich zu viel vom ASM-Kram verraten ;) )
Das ganze kann aber auch von CPU zu CPU unterschiedlich sein.

-> Hat also nichts mit PB zu tun.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Deeem2031 hat geschrieben:Weiß den Fachausdruck dafür nicht mehr
Ist hier Dekrement und Inkrement gemeint? wenn nicht, ein Versuch wars wert... ;-)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Friedhelm
Beiträge: 43
Registriert: 29.08.2004 08:50

Beitrag von Friedhelm »

Code: Alles auswählen

i.l
  StartTime = ElapsedMilliseconds()          
  For i = 0 To 1000000000 
  Next i                                    
  ElapsedTime = ElapsedMilliseconds()-StartTime 
  MessageRequester("Stop", StrU(ElapsedTime,#Long),0) 
  

i.l
 Delay(100) 
SetPriorityClass_(GetCurrentProcess_(),#REALTIME_PRIORITY_CLASS) 
  StartTime = ElapsedMilliseconds()              
  For i = 0 To 1000000000 
  Next i                                    
  ElapsedTime = ElapsedMilliseconds()-StartTime 
  MessageRequester("Stop", StrU(ElapsedTime,#Long),0) 
  SetPriorityClass_(GetCurrentProcess_(),#NORMAL_PRIORITY_CLASS) 
Gemessen auf einer AMD Maschine 240018100- XP Pro

PB 3.94 Brauch ca. 3594ms
PB 4.0 Beta 2 braucht ca. 3531ms

#REALTIME_PRIORITY
PB 3.94 Brauch ca. 3093ms
PB 4.0 Beta 2 braucht ca. 2813ms

mfg
Friedhelm
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Garnich gesehen das es nur eine einfach For-Schleife ist, ohne was drin:

Leute, das bringt nichts sowas zu messen. Der Unterschied beim messen rüht daher das die Schleifen ein unterschiedliches Offset in der Exe haben und somit der eine oder der andere JMP schneller ist. Desswegen ist es ja auch so schwer die Geschwindigkeit von ASM-Befehlen herrauszufinden. Das Offset spielt bei solchen Sachen eine große Rolle.

Alles was ihr hier rausbekommt hat nichts mit PB zu tun..
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Lebostein hat geschrieben:Na hoffentlich beta. Denn alles was ich bisher getestet habe, war mit der 4.0 langsamer als mit den alten PB-Versionen... und die exe-Files sind bei der 4.0 auch größer geworden....
Kann ich nicht bestätigen. Hab ein (kleines) Programm geschrieben, dass - mit PB4B2 kompiliert - weniger Platz benötigt
Gesperrt