Langsamer Code
Re: Langsamer Code
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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Langsamer Code
Der Geschwindigkeitsunterschied hängt mit dem CPU-Cache zusammen. Aufeinanderfolgende Daten zu beschreiben ist immer schneller.
Re: Langsamer Code
Das mit dem vertauschen von X Y ist schon richtig. Habs nach meinem Post selber gemerkt
So hatte ich in Blitz3D 500ms zu 559ms in PB also nur 10% langsamer in PB (damit kann ich leben). Der Code ist übrigens 1:1 der selbe der läuft so in beiden Basics sonst ergäbe es ja keinen Sinn. Werde mich mal schrittweise durch die wichtigsten und zeitkritischsten Befehle messen und schauen wie man das eine oder andere schneller kriegt.(vor allem die Division die macht mir sorgen )
Vielen Dank fürs Mittesten und wer noch weiss wie man am einfachsten zu den fehlenden 3D Befehlen kommt, was aktuelles (Vulkan ?) den hätte ich ganz lieb
So hatte ich in Blitz3D 500ms zu 559ms in PB also nur 10% langsamer in PB (damit kann ich leben). Der Code ist übrigens 1:1 der selbe der läuft so in beiden Basics sonst ergäbe es ja keinen Sinn. Werde mich mal schrittweise durch die wichtigsten und zeitkritischsten Befehle messen und schauen wie man das eine oder andere schneller kriegt.(vor allem die Division die macht mir sorgen )
Vielen Dank fürs Mittesten und wer noch weiss wie man am einfachsten zu den fehlenden 3D Befehlen kommt, was aktuelles (Vulkan ?) den hätte ich ganz lieb
Re: Langsamer Code
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
Für Konstanten und Prozedurparameter müsstest du ggf. die >>Header-Datei von Vulkan<< in PB umwandeln.
(Für OpenGL gibts sowas schon hier oder im englischen Forum, ggf. auch für Vulkan).
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Langsamer Code
Zeiten YX zu XY
============
1. Betriebssystem Windows10 Enterprise
2. Betriebssystem Linux Deepin(15.11)
3. Betriebssystem MacOS 10.15 (Catalina) in VirtualBox unter Linux (2.)
zu 1.: Windows:
PureBasic: 721 zu 405
Blitzmax: 586 zu 83
*1) = B4J: 945 zu 48
*2) = Freebasic64 : 667 / 364
zu 2.: Linux:
PureBasic: 724 zu 409
BlitzMax: 542 zu 173
zu 3.: Virt. MacOX:
PureBasic: 1885 zu 441
*1) = B4J:Ganz schön flott für 'nicht natives' Java ...
*2) = FreeBasic64:
Alle Werte in 64-bit von meinem Notebook.
(Nur zur Information)
============
1. Betriebssystem Windows10 Enterprise
2. Betriebssystem Linux Deepin(15.11)
3. Betriebssystem MacOS 10.15 (Catalina) in VirtualBox unter Linux (2.)
zu 1.: Windows:
PureBasic: 721 zu 405
Blitzmax: 586 zu 83
*1) = B4J: 945 zu 48
*2) = Freebasic64 : 667 / 364
zu 2.: Linux:
PureBasic: 724 zu 409
BlitzMax: 542 zu 173
zu 3.: Virt. MacOX:
PureBasic: 1885 zu 441
*1) = B4J:
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
*2) = FreeBasic64:
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
(Nur zur Information)
Zuletzt geändert von Blitzer am 19.09.2019 13:36, insgesamt 2-mal geändert.
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: Langsamer Code
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ß
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ß
Re: Langsamer Code
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ß
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: Langsamer Code
Hallo Mijikai,
nach einem Neustart bekomme ich völlig andere Werte:
ein Durchlauf d to 1: 14 ms
StartDrawing: 9 ms StartDraw2: 11 ms
StopDrawing: 25 ms StopDrawing2:0 ms
ZeitInfo: DrawingBuffer() + DrawingBufferPitch() + DrawingBufferPixelFormat: 3 ms
Hier der Testcode:
Gruß
nach einem Neustart bekomme ich völlig andere Werte:
ein Durchlauf d to 1: 14 ms
StartDrawing: 9 ms StartDraw2: 11 ms
StopDrawing: 25 ms StopDrawing2:0 ms
ZeitInfo: DrawingBuffer() + DrawingBufferPitch() + DrawingBufferPixelFormat: 3 ms
Hier der Testcode:
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
Re: Langsamer Code
Danke @juergenkulow
Hab mal etwas rumgespielt.
Ein Durchlauf (das Zeichnen aller Pixel) mit Start- StopDrawing() bei einer
Auflösung von 1920 x 1080 benötigt bei mir im Durchschnitt insgesamt 14 ms.
Von 14 ms werden nur 7 ms zum Zeichnen aller Pixel benötigt!
Die restlichen 7 ms verdampfen in den Start- & StopDrawing() Funktionen.
Jetzt bleibt die Frage was genau hier passiert.
Könnte es sein das hier nochmals alle Pixel durchgegangen
werden oder ist der Zugriff einfach nur langsam?
Hab mal etwas rumgespielt.
Ein Durchlauf (das Zeichnen aller Pixel) mit Start- StopDrawing() bei einer
Auflösung von 1920 x 1080 benötigt bei mir im Durchschnitt insgesamt 14 ms.
Von 14 ms werden nur 7 ms zum Zeichnen aller Pixel benötigt!
Die restlichen 7 ms verdampfen in den Start- & StopDrawing() Funktionen.
Jetzt bleibt die Frage was genau hier passiert.
Könnte es sein das hier nochmals alle Pixel durchgegangen
werden oder ist der Zugriff einfach nur langsam?