Re: Langsamer Code
Verfasst: 31.08.2019 13:45
Zeiten YX zu XY
macOS (Host): 1742/1372
Window (VM): 4649/1457
Linux (VM): 2464/622
Interessant
macOS (Host): 1742/1372
Window (VM): 4649/1457
Linux (VM): 2464/622
Interessant
Du kannst die Vulkan dll ganz normal mit OpenLibrary() in PureBasic einladen und dann alle Befehle mit GetFunction() einladen.Peti hat geschrieben:... und wer noch weiss wie man am einfachsten zu den fehlenden 3D Befehlen kommt, was aktuelles (Vulkan ?) den hätte ich ganz lieb
Code: Alles auswählen
'Non-UI application (console / server application)
#Region Project Attributes
#CommandLineArgs:
#MergeLibraries: True
#End Region
Sub Process_Globals
Public d,x,y As Int
Public Feld(1921,1081) As Int
Public RGB=5646469 As Int
End Sub
Sub AppStart (Args() As String)
Dim n As Long = DateTime.Now
For d = 0 To 100
For y = 0 To 1080
For x = 0 To 1920
Feld(x,y)=RGB
Next
Next
Next
Log($"1.Lauf: ${DateTime.Now - n}ms"$)
Dim n As Long = DateTime.Now
For d = 0 To 100
For x = 0 To 1920
For y = 0 To 1080
Feld(x,y)=RGB
Next
Next
Next
Log($"2.Lauf: ${DateTime.Now - n}ms"$)
End Sub
Code: Alles auswählen
dim as short d,x,y
dim as long wert
dim as double zeit
dim shared feld(1920,1080) as Integer
wert = 5646469
zeit = timer
for d = 0 to 100
for y = 0 to 1080
for x = 0 to 1920
feld(x,y) = wert
next
next
next
print timer - zeit
zeit = timer
For d = 0 To 100
For x = 0 To 1920
For y = 0 To 1080
feld(x,y) = wert
Next
Next
Next
print timer - zeit
Gibts Code dazu?juergenkulow hat geschrieben:Hallo,
ich bekomme zu 2D-Zeichnungsfunktionsaufrufen merkwürdig lange Reaktionszeiten:
ein Durchlauf d to 1: 12 ms
StartDrawing: 185 ms StartDraw2: 358 ms
StopDrawing: 840 ms StopDrawing2:0 ms
ZeitInfo: DrawingBuffer() + DrawingBufferPitch() + DrawingBufferPixelFormat: 240 ms
Kann das bestätigt werden?
Gruß
Code: Alles auswählen
; ImportC "E:\demo.obj" ; Laufwerk+Datei anpassen pocc /Tx64-coff E:/demo.c
; demo(RGB.l,*Buffer,Pitch.l,ScreenWidth.l,ScreenHeight.l)
; EndImport
ExamineDesktops()
ScreenWidth.l=DesktopWidth(0)
ScreenHeight.l=DesktopHeight(0)
;#ScreenWidth = 1200 ;1920
;#ScreenHeight = 1920 ; 1080
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "DirectX is needed.",0)
EndIf
If OpenScreen(ScreenWidth, ScreenHeight, 32, "PB Plasma")
RGB.l=255 <<24+255<<16+255<<8+0
zeit=ElapsedMilliseconds()
If StartDrawing(ScreenOutput())
StartDraw=ElapsedMilliseconds()-zeit
zeit=ElapsedMilliseconds()
StopDrawing()
ZeitStopDrawing=ElapsedMilliseconds()-zeit
zeit=ElapsedMilliseconds()
StartDrawing(ScreenOutput())
StartDraw2=ElapsedMilliseconds()-zeit
zeit=ElapsedMilliseconds()
Buffer = DrawingBuffer() ; Get the start address of the screen buffer
Pitch.l = DrawingBufferPitch() ; Get the length (in byte) took by one horizontal line
PixelFormat = DrawingBufferPixelFormat() ; Wird nicht genutzt könnte 1, 2, 3 Byte oder BGR oder Y umgekehrt sein.
ZeitInfo=ElapsedMilliseconds()-zeit
zeit=ElapsedMilliseconds()
DisableDebugger
For d=1 To 1 ;100 x Screen mit Pixel beschreiben
; demo(RGB,Buffer,Pitch,ScreenWidth-1,ScreenHeight-1)
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
Dauer=ElapsedMilliseconds()-zeit
EnableDebugger
zeit=ElapsedMilliseconds()
StopDrawing()
ZeitStopDrawing2=ElapsedMilliseconds()-zeit
EndIf
;ExamineKeyboard()
FlipBuffers()
Delay(1000)
;FlipBuffers()
CloseScreen()
s.s="ein Durchlauf d to 1: "+Str(Dauer)+" ms"+#CRLF$+
"StartDrawing: "+Str(StartDraw)+" ms StartDraw2: "+Str(StartDraw2)+" ms"+#CRLF$+
" StopDrawing: "+Str(ZeitStopDrawing)+ " ms StopDrawing2:"+Str(ZeitStopDrawing2)+" ms"+#CRLF$+
" ZeitInfo: DrawingBuffer() + DrawingBufferPitch() + DrawingBufferPixelFormat: "+Str(ZeitInfo)+" ms"
SetClipboardText(s)
MessageRequester(Str(Pitch)+"Zeitr",s,0)
SetClipboardText(s)
Else
MessageRequester("Error","Can't open the screen !",0)
EndIf