Unterschiedlich schneller Code
Verfasst: 25.04.2018 22:48
Bin hier neu und habe die Demo von PureBasic heruntergeladen.
Beim Austesten ist mir folgendes aufgefallen, je nach dem, wie ich Formeln eingebe und wie lang sie sind oder unterteilt in kleinere Teilrechnungen
erzeugt der Compiler massiv unterschiedlich schnellen Code.
Kennt jemand dieses Verhalten und wie soll man es handeln ?
#ScreenWidth = 1920
#ScreenHeight = 1080
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "DirectX is needed.",0)
EndIf
If OpenScreen(#ScreenWidth, #ScreenHeight, 32, "PB Plasma")
zeit=ElapsedMilliseconds()
RGB=255 <<24+255<<16+255<<8+0
If StartDrawing(ScreenOutput())
Buffer = DrawingBuffer() ; Get the start address of the screen buffer
Pitch = DrawingBufferPitch() ; Get the length (in byte) took by one horizontal line
PixelFormat = DrawingBufferPixelFormat() ; Get the pixel format.
For d=1 To 100 ;100 x Screen mit Pixel beschreiben
For y = 0 To #ScreenHeight-1
For x = 0 To #ScreenWidth-1 ;Rechne alles in der innersten Klammer (auch y, nur Test)
;Var 1 Direkt in Klammer
;PokeL(buffer+Pitch*y+x*4,RGB) ;940 Millisec
;Var 2
;b=buffer+Pitch*y
;b=b+x*4
;PokeL(b,RGB) ;1920 Millisec
;Var 3
;h=Pitch*y
;b=x*4
;hb=h+b
;PokeL(buffer+hb,RGB) ;1656 Millisec
;Var 4
b=buffer+pitch*y+x*4
PokeL(b,RGB) ; 2625 Millisec
Next
Next
Next
StopDrawing()
EndIf
ExamineKeyboard()
FlipBuffers()
Else
MessageRequester("Error","Can't open the screen !",0)
EndIf
MessageRequester("Zeitr",Str(ElapsedMilliseconds()-zeit),0)
Das hab ich getestet und danke schon mal für Infos
__________________________________________________
Thread verschoben
FAQ & Tutorials>Allgemein
25.04.2018
RSBasic
Beim Austesten ist mir folgendes aufgefallen, je nach dem, wie ich Formeln eingebe und wie lang sie sind oder unterteilt in kleinere Teilrechnungen
erzeugt der Compiler massiv unterschiedlich schnellen Code.
Kennt jemand dieses Verhalten und wie soll man es handeln ?
#ScreenWidth = 1920
#ScreenHeight = 1080
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "DirectX is needed.",0)
EndIf
If OpenScreen(#ScreenWidth, #ScreenHeight, 32, "PB Plasma")
zeit=ElapsedMilliseconds()
RGB=255 <<24+255<<16+255<<8+0
If StartDrawing(ScreenOutput())
Buffer = DrawingBuffer() ; Get the start address of the screen buffer
Pitch = DrawingBufferPitch() ; Get the length (in byte) took by one horizontal line
PixelFormat = DrawingBufferPixelFormat() ; Get the pixel format.
For d=1 To 100 ;100 x Screen mit Pixel beschreiben
For y = 0 To #ScreenHeight-1
For x = 0 To #ScreenWidth-1 ;Rechne alles in der innersten Klammer (auch y, nur Test)
;Var 1 Direkt in Klammer
;PokeL(buffer+Pitch*y+x*4,RGB) ;940 Millisec
;Var 2
;b=buffer+Pitch*y
;b=b+x*4
;PokeL(b,RGB) ;1920 Millisec
;Var 3
;h=Pitch*y
;b=x*4
;hb=h+b
;PokeL(buffer+hb,RGB) ;1656 Millisec
;Var 4
b=buffer+pitch*y+x*4
PokeL(b,RGB) ; 2625 Millisec
Next
Next
Next
StopDrawing()
EndIf
ExamineKeyboard()
FlipBuffers()
Else
MessageRequester("Error","Can't open the screen !",0)
EndIf
MessageRequester("Zeitr",Str(ElapsedMilliseconds()-zeit),0)
Das hab ich getestet und danke schon mal für Infos
__________________________________________________
Thread verschoben
FAQ & Tutorials>Allgemein
25.04.2018
RSBasic