Aktuelle Zeit: 12.11.2019 21:35

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 32 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 31.08.2019 13:45 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Zeiten YX zu XY

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 / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 31.08.2019 18:39 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Der Geschwindigkeitsunterschied hängt mit dem CPU-Cache zusammen. Aufeinanderfolgende Daten zu beschreiben ist immer schneller.

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 31.08.2019 20:39 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Windows: 1299 / 446
SpiderBasic: 3903 / 449 :wink:

_________________
"A user interface is like a joke. If you have to explain it, it’s not that good." (Martin Leblanc)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 31.08.2019 22:13 
Offline

Registriert: 25.04.2018 22:36
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 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 01.09.2019 01:41 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
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).

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 06.09.2019 12:16 
Offline

Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony
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)


Zuletzt geändert von Blitzer am 19.09.2019 13:36, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 10.09.2019 14:31 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
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ß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 12.09.2019 08:35 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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?

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 12.09.2019 10:14 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
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ß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Langsamer Code
BeitragVerfasst: 12.09.2019 15:27 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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?

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 32 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye