PureBoard
http://forums.purebasic.com/german/

Langsamer Code
http://forums.purebasic.com/german/viewtopic.php?f=3&t=31636
Seite 3 von 4

Autor:  mk-soft [ 31.08.2019 13:45 ]
Betreff des Beitrags:  Re: Langsamer Code

Zeiten YX zu XY

macOS (Host): 1742/1372
Window (VM): 4649/1457
Linux (VM): 2464/622

Interessant

Autor:  NicTheQuick [ 31.08.2019 18:39 ]
Betreff des Beitrags:  Re: Langsamer Code

Der Geschwindigkeitsunterschied hängt mit dem CPU-Cache zusammen. Aufeinanderfolgende Daten zu beschreiben ist immer schneller.

Autor:  Kiffi [ 31.08.2019 20:39 ]
Betreff des Beitrags:  Re: Langsamer Code

Windows: 1299 / 446
SpiderBasic: 3903 / 449 :wink:

Autor:  Peti [ 31.08.2019 22:13 ]
Betreff des Beitrags:  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 ;)

Autor:  STARGÅTE [ 01.09.2019 01:41 ]
Betreff des Beitrags:  Re: Langsamer Code

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
Du kannst die Vulkan dll ganz normal mit OpenLibrary() in PureBasic einladen und dann alle Befehle mit GetFunction() einladen.
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).

Autor:  Blitzer [ 06.09.2019 12:16 ]
Betreff des Beitrags:  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:
Code:
'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
Ganz schön flott für 'nicht natives' Java ...

*2) = FreeBasic64:
Code:
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


Alle Werte in 64-bit von meinem Notebook.
(Nur zur Information)

Autor:  juergenkulow [ 10.09.2019 14:31 ]
Betreff des Beitrags:  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ß

Autor:  Mijikai [ 12.09.2019 08:35 ]
Betreff des Beitrags:  Re: Langsamer Code

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ß


Gibts Code dazu?

Autor:  juergenkulow [ 12.09.2019 10:14 ]
Betreff des Beitrags:  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:
Code:
; 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



Gruß

Autor:  Mijikai [ 12.09.2019 15:27 ]
Betreff des Beitrags:  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?

Seite 3 von 4 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/