enormer performance Einbruch bei PB v5.21

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

enormer performance Einbruch bei PB v5.21

Beitrag von captain_hesse »

Hallo zusammen.
Ich habe gerade mal mein Schachprogramm mit der neusten Version von PB gestartet und musste mit Entsetzen feststellen das die Ausführungsgeschwindigkeit um gute 40-50% langsamer ist als noch bei Version 5.20 oder früher ohne was am Quellcode zu ändern woran könnte das liegen ? Der Debugger ist natürlich ausgeschaltet und alle Einstellungen, soweit ich das sehe sind gleich. Muss ich da vielleicht was beim zugriff auf Arrays oder Structuren beachten oder optimiert der Compiler nicht mehr so gut :? ?

MfG.
Armin
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: enormer performance Einbruch bei PB v5.21

Beitrag von SBond »

...hast du mal versucht die Quelle zu lokalisieren?

Ich habe gerade mal einen Test gemacht und nur minimale unterschiede zwischen 5.11 und 5.21 festgestellt.



Hier ist mein wahrscheinlich erstes Tool, das ich mal mit PB geschrieben habe. Es ist nicht toll, aber zweckmäßig.
Du kannst es ja mal mit der neuen und der alten PB-Version testen.

Code: Alles auswählen

Enumeration
	#GUI
	#Statusleiste
	#Image_Buffer
	#Image_Zeichenflaeche
	
EndEnumeration


	X_aktueller_Wert.d 	= 0
	Y_aktueller_Wert.d	= 0
	X_letzer_Wert.d 	= 0
	Y_letzer_Wert.d		= 0

	Counter_Sin.d 		= 0
	Counter_Messung		= 0
	Counter_FPS			= 0
	
	Zeit_Messung		= 0
	Zeit_FPS			= 0
	
	FPS					= 0
	
	aktueller_Test		= 1
	bearbeite_Test		= 0
	
	Test_1_Werte		= 0
	Test_1_FPS			= 0
	Test_2_Werte		= 0
	Test_2_FPS			= 0
	Test_3_Werte		= 0
	Test_3_FPS			= 0
	Test_4_Werte		= 0
	Test_4_FPS			= 0
	
	
	Zahl_1.i			= 0
	Zahl_2.d			= 0
	
	Zeit.i				= 0
	Text.s				= "aaaaaaaaa"
	
	Ergebnis_Test_1		= 0
	Ergebnis_Test_2		= 0
	Ergebnis_Test_3		= 0	
	
	
	
	
; Konsolen-Fenster erstellen
If OpenConsole()
	
	EnableGraphicalConsole(1)
	ConsoleCursor(0)
	
	ConsoleLocate ( 0, 0):	ConsoleColor( 7, 0):	Print("Performance-Test: Programmiersprache PureBasic")
    ConsoleLocate ( 0, 1):	ConsoleColor( 7, 0):	Print("------------------------------------------------------------")
    ConsoleLocate ( 0, 4):	ConsoleColor( 7, 0):	Print("[    ]   Test 1: Ganzzahl von 0 bis 1.000.000.000 hochzählen"):      ConsoleLocate (65, 4):	ConsoleColor( 7, 0):	Print("[           ]");
    ConsoleLocate ( 0, 5):	ConsoleColor( 7, 0):	Print("[    ]   Test 2: Gleitkommazahl von 0 bis 1.000.000 hochzählen"):    ConsoleLocate (65, 5):	ConsoleColor( 7, 0):	Print("[           ]");
    ConsoleLocate ( 0, 6):	ConsoleColor( 7, 0):	Print("[    ]   Test 3: Stringinhalt 100.000.000 mal ändern"):            	ConsoleLocate (65, 6):	ConsoleColor( 7, 0):	Print("[           ]");
    ConsoleLocate ( 0, 7):	ConsoleColor( 7, 0):	Print("[    ]   Grafik 1: direkt in die GUI zeichnen"):           	 		ConsoleLocate (54, 7):	ConsoleColor( 7, 0):	Print("[        ] [           ]");
    ConsoleLocate ( 0, 8):	ConsoleColor( 7, 0):	Print("[    ]   Grafik 2: in Backbuffer zeichnen"):           			 	ConsoleLocate (54, 8):	ConsoleColor( 7, 0):	Print("[        ] [           ]");
    ConsoleLocate ( 0, 9):	ConsoleColor( 7, 0):	Print("[    ]   Grafik 3: in Backbuffer zeichnen (skaliert)"):           	ConsoleLocate (54, 9):	ConsoleColor( 7, 0):	Print("[        ] [           ]");
    ConsoleLocate ( 0,10):	ConsoleColor( 7, 0):	Print("[    ]   Grafik 4: in Backbuffer zeichnen (Rauschen)"):           	ConsoleLocate (54,10):	ConsoleColor( 7, 0):	Print("[        ] [           ]");
    
    ConsoleLocate ( 0,16):	ConsoleColor( 7, 0):	Print("zu Test 2: die Schrittweite ist 0,001")
    ConsoleLocate ( 0,17):	ConsoleColor( 7, 0):	Print("FPS:       Darstellungen des kompletten Graphen pro Sekunde")
    ConsoleLocate ( 0,18):	ConsoleColor( 7, 0):	Print("W/s:       Werte die pro Sekunde geplottet werden")
    ConsoleLocate ( 0,22):	ConsoleColor( 7, 0):	Print("by SBond, 09.06.2013")
    


	; Test 1
	ConsoleLocate ( 2, 4):	ConsoleColor(10, 0):	Print("->")
	Zeit = ElapsedMilliseconds()

	While (Zahl_1 <= 1000000000)
		Zahl_1 + 1		
	Wend
	
	Ergebnis_Test_1 = ElapsedMilliseconds() - Zeit
	ConsoleLocate ( 2, 4):	ConsoleColor(10, 0):	Print("ok")
	ConsoleLocate (74 - Len(StrU(Ergebnis_Test_1)), 4):	ConsoleColor(14, 0):	Print(StrU(Ergebnis_Test_1) + " ms")
	
	
	
	; Test 2
	ConsoleLocate ( 2, 5):	ConsoleColor(10, 0):	Print("->")
	Zeit = ElapsedMilliseconds()
	
	While (Zahl_2 <= 1000000)
		
		Zahl_2 + 0.001
		
	Wend
		
	Ergebnis_Test_2 = ElapsedMilliseconds() - Zeit
	ConsoleLocate ( 2, 5):	ConsoleColor(10, 0):	Print("ok")
	ConsoleLocate (74 - Len(StrU(Ergebnis_Test_2)), 5):	ConsoleColor(14, 0):	Print(StrU(Ergebnis_Test_2) + " ms")	
	
	
	
	; Test 3
	ConsoleLocate ( 2, 6):	ConsoleColor(10, 0):	Print("->")
	Zeit = ElapsedMilliseconds()
	
	For	i = 0 To 10000000 Step 1
		
		Text = "aaaaaaaaa"
		Text = "bbbbbbbbb"
		Text = "ccccccccc"
		Text = "ddddddddd"
		Text = "eeeeeeeee"
		Text = "fffffffff"
		Text = "ggggggggg"
		Text = "hhhhhhhhh"
		Text = "iiiiiiiii"
		Text = "123456789"
		
	Next
		
	Ergebnis_Test_3 = ElapsedMilliseconds() - Zeit
	ConsoleLocate ( 2, 6):	ConsoleColor(10, 0):	Print("ok")
	ConsoleLocate (74 - Len(StrU(Ergebnis_Test_3)), 6):	ConsoleColor(14, 0):	Print(StrU(Ergebnis_Test_3) + " ms")
	


	
	; GUI-Fenster erstellen
	If (OpenWindow(#GUI, 0, 0, 800, 423, "PureBasic 2D-Drawing-Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu))
	
	
		
		; Statusleiste erstellen
		If (CreateStatusBar(#Statusleiste, WindowID(#GUI)))
			AddStatusBarField(350)
			AddStatusBarField(100)
			AddStatusBarField(150)
			AddStatusBarField(200)
			StatusBarText		(#Statusleiste, 0, "starte Tests...")
			StatusBarProgress	(#Statusleiste, 1, 0)
			StatusBarText		(#Statusleiste, 2, "0 Werte/sek")
			StatusBarText		(#Statusleiste, 3, "0 FPS")
		EndIf
		
	
		; die Grafikelemente erstellen
		CreateImage(#Image_Buffer, 800, 400)													; Bild, auf dem gezeichnet wird
		ImageGadget(#Image_Zeichenflaeche, 0, 0, 800, 400, ImageID(#Image_Buffer))				; Gadget, auf dem das Bild angezeigt werden kann
		StartDrawing(ImageOutput(#Image_Buffer))												; startet den Zeichenvorgang
		
		;Hintergrund leeren
		Box(0, 0, 800, 400, RGB(255,255,255))
	
		StopDrawing()																			; stoppt den Zeichenvorgang
		SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))							; zeichnet das Bild in die GUI
		StartDrawing(ImageOutput(#Image_Buffer))												; startet den Zeichenvorgang
		
	
		Delay(2000)

		
		Repeat
			
			; Test 1: in den Frontbuffer zeichnen (10 sek)
			If (aktueller_Test = 1)
				
				; Test wird gestartet
				If (bearbeite_Test = 0)
					
					; Graph in die GUI zeichnen
					StopDrawing()													
					SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))	
					StartDrawing(ImageOutput(#Image_Buffer))
					ConsoleLocate ( 2, 7):	ConsoleColor(10, 0):	Print("->")
			
					;Hintergrund leeren
					Box(0, 0, 800, 400, RGB(255,255,255))	
					
					StopDrawing()	
					StartDrawing(WindowOutput(#GUI))
	
					StatusBarText		(#Statusleiste, 0, "Test 1: direkt in die GUI zeichnen (10 sek)")
					StatusBarProgress	(#Statusleiste, 1, 0)
					StatusBarText		(#Statusleiste, 2, "0 Werte/sek")
					StatusBarText		(#Statusleiste, 3, "0 FPS")			
					
					bearbeite_Test	= 1
					Counter_FPS		= 0
					Counter_Messung	= 0
					
					Zeit_Messung 	= ElapsedMilliseconds()
					Zeit_FPS		= ElapsedMilliseconds()
	
				EndIf
				
				
				
				; FPS berechnen
				If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_FPS / 800) + " FPS")
					Zeit_FPS		= ElapsedMilliseconds()
					Counter_FPS		= 0
				Else
					Counter_FPS 	+ 1
				EndIf
				
				
				
				If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_Messung / (800*10)) + " FPS")
					Test_1_Werte		= Counter_Messung / 10
					Test_1_FPS			= Counter_Messung / (800*10)
					ConsoleLocate ( 2, 7):	ConsoleColor(10, 0):	Print("ok")
					ConsoleLocate (59 - Len(StrU(Test_1_FPS)), 7):		ConsoleColor(14, 0):	Print(StrU(Test_1_FPS) + " FPS")
					ConsoleLocate (73 - Len(StrU(Test_1_Werte)), 7):	ConsoleColor(14, 0):	Print(StrU(Test_1_Werte) + " W/s")
					aktueller_Test		= 2
					bearbeite_Test		= 0
					
					
				Else
					Counter_Messung + 1
					
					Counter_Sin + 0.007847
					Y_aktueller_Wert = 200 + Sin(Counter_Sin)*180
			
					; Graph plotten
					LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, $FF0000)
					Y_letzer_Wert = Y_aktueller_Wert
					
					; X-Position weiterrücken, wenn der Graph noch nicht voll ist
					If X_aktueller_Wert < 800
						X_aktueller_Wert 	+ 1
					Else	
						X_aktueller_Wert 	= 0
						Box(0, 0, 800, 400, RGB(255,255,255))	
					EndIf
				
				EndIf			
	
			ElseIf (aktueller_Test = 2)
				
				; Test wird gestartet
				If (bearbeite_Test = 0)
					
					; Graph in die GUI zeichnen
					StopDrawing()													
					SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))	
					StartDrawing(ImageOutput(#Image_Buffer))
					ConsoleLocate ( 2, 8):	ConsoleColor(10, 0):	Print("->")
			
					;Hintergrund leeren
					Box(0, 0, 800, 400, RGB(255,255,255))	
	
					StatusBarText		(#Statusleiste, 0, "Test 2: in den Backbuffer zeichnen (10 sek)")
					StatusBarProgress	(#Statusleiste, 1, 0)
					StatusBarText		(#Statusleiste, 2, "0 Werte/sek")
					StatusBarText		(#Statusleiste, 3, "0 FPS")			
					
					bearbeite_Test	= 1
					Counter_FPS		= 0
					Counter_Messung	= 0
					
					Zeit_Messung 	= ElapsedMilliseconds()
					Zeit_FPS		= ElapsedMilliseconds()
	
				EndIf
				
				
				
				; FPS berechnen
				If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_FPS / 800) + " FPS")
					Zeit_FPS		= ElapsedMilliseconds()
					Counter_FPS		= 0
				Else
					Counter_FPS 	+ 1
				EndIf
				
				
				
				If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_Messung / (800*10)) + " FPS")
					Test_2_Werte		= Counter_Messung / 10
					Test_2_FPS			= Counter_Messung / (800*10)
					ConsoleLocate ( 2, 8):	ConsoleColor(10, 0):	Print("ok")
					ConsoleLocate (59 - Len(StrU(Test_2_FPS)), 8):		ConsoleColor(14, 0):	Print(StrU(Test_2_FPS) + " FPS")
					ConsoleLocate (73 - Len(StrU(Test_2_Werte)), 8):	ConsoleColor(14, 0):	Print(StrU(Test_2_Werte) + " W/s")
					aktueller_Test		= 3
					bearbeite_Test		= 0
					
					
				Else
					Counter_Messung + 1
					
					Counter_Sin + 0.007847
					Y_aktueller_Wert = 200 + Sin(Counter_Sin)*180
			
					; Graph plotten
					LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, $FF0000)
					Y_letzer_Wert = Y_aktueller_Wert
					
					; X-Position weiterrücken, wenn der Graph noch nicht voll ist
					If X_aktueller_Wert < 800
						X_aktueller_Wert 	+ 1
					Else	
						X_aktueller_Wert 	= 0
						
						; Graph in die GUI zeichnen
						StopDrawing()													
						SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))	
						StartDrawing(ImageOutput(#Image_Buffer))
				
						;Hintergrund leeren
						Box(0, 0, 800, 400, RGB(255,255,255))	
					EndIf
				
				EndIf			
	
			ElseIf (aktueller_Test = 3)
				
				; Test wird gestartet
				If (bearbeite_Test = 0)
					
					; Graph in die GUI zeichnen
					StopDrawing()													
					SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))	
					StartDrawing(ImageOutput(#Image_Buffer))
					ConsoleLocate ( 2, 9):	ConsoleColor(10, 0):	Print("->")
			
					;Hintergrund leeren
					Box(0, 0, 800, 400, RGB(255,255,255))	
	
					StatusBarText		(#Statusleiste, 0, "Test 3: in den Backbuffer zeichnen; skaliert mit Faktor 10")
					StatusBarProgress	(#Statusleiste, 1, 0)
					StatusBarText		(#Statusleiste, 2, "0 Werte/sek")
					StatusBarText		(#Statusleiste, 3, "0 FPS")			
					
					bearbeite_Test	= 1
					Counter_FPS		= 0
					Counter_Messung	= 0
					
					Zeit_Messung 	= ElapsedMilliseconds()
					Zeit_FPS		= ElapsedMilliseconds()
	
				EndIf
				
				
				
				; FPS berechnen
				If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_FPS / (800*10)) + " FPS")
					Zeit_FPS		= ElapsedMilliseconds()
					Counter_FPS		= 0
				Else
					Counter_FPS 	+ 1
				EndIf
				

				If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_Messung / (800*10*10)) + " FPS")
					Test_3_Werte		= Counter_Messung / 10
					Test_3_FPS			= Counter_Messung / (800*10*10)
					ConsoleLocate ( 2, 9):	ConsoleColor(10, 0):	Print("ok")
					ConsoleLocate (59 - Len(StrU(Test_3_FPS)), 9):		ConsoleColor(14, 0):	Print(StrU(Test_3_FPS) + " FPS")
					ConsoleLocate (73 - Len(StrU(Test_3_Werte)), 9):	ConsoleColor(14, 0):	Print(StrU(Test_3_Werte) + " W/s")
					aktueller_Test		= 4
					bearbeite_Test		= 0
					
					
				Else
					Counter_Messung + 1
					
					Counter_Sin + 0.007847
					Y_aktueller_Wert = 200 + Sin(Counter_Sin)*180
			
					; Graph plotten
					LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, $FF0000)
					Y_letzer_Wert = Y_aktueller_Wert
					
					; X-Position weiterrücken, wenn der Graph noch nicht voll ist
					If X_aktueller_Wert < 800
						X_aktueller_Wert 	+ 0.1
					Else	
						X_aktueller_Wert 	= 0
						
						; Graph in die GUI zeichnen
						StopDrawing()													
						SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))	
						StartDrawing(ImageOutput(#Image_Buffer))
				
						;Hintergrund leeren
						Box(0, 0, 800, 400, RGB(255,255,255))	
					EndIf
				
				EndIf			
	
			ElseIf (aktueller_Test = 4)
				
				; Test wird gestartet
				If (bearbeite_Test = 0)
					
					; Graph in die GUI zeichnen
					StopDrawing()													
					SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))	
					StartDrawing(ImageOutput(#Image_Buffer))
					ConsoleLocate ( 2,10):	ConsoleColor(10, 0):	Print("->")
			
					;Hintergrund leeren
					Box(0, 0, 800, 400, RGB(255,255,255))	
	
					StatusBarText		(#Statusleiste, 0, "Test 4: mit Backbuffer, Sinus mit Rauschen")
					StatusBarProgress	(#Statusleiste, 1, 0)
					StatusBarText		(#Statusleiste, 2, "0 Werte/sek")
					StatusBarText		(#Statusleiste, 3, "0 FPS")			
					
					bearbeite_Test	= 1
					Counter_FPS		= 0
					Counter_Messung	= 0
					
					Zeit_Messung 	= ElapsedMilliseconds()
					Zeit_FPS		= ElapsedMilliseconds()
	
				EndIf
				
			
				; FPS berechnen
				If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_FPS / 800) + " FPS")
					Zeit_FPS		= ElapsedMilliseconds()
					Counter_FPS		= 0
				Else
					Counter_FPS 	+ 1
				EndIf
	
				
				If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
					StatusBarProgress	(#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
					StatusBarText		(#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
					StatusBarText		(#Statusleiste, 3, StrU(Counter_Messung / (800*10)) + " FPS")
					Test_4_Werte		= Counter_Messung / 10
					Test_4_FPS			= Counter_Messung / (800*10)
					ConsoleLocate ( 2,10):	ConsoleColor(10, 0):	Print("ok")
					ConsoleLocate (59 - Len(StrU(Test_4_FPS)),10):		ConsoleColor(14, 0):	Print(StrU(Test_4_FPS) + " FPS")
					ConsoleLocate (73 - Len(StrU(Test_4_Werte)),10):	ConsoleColor(14, 0):	Print(StrU(Test_4_Werte) + " W/s")
					aktueller_Test		= 0
					bearbeite_Test		= 0
					
					
				Else
					Counter_Messung + 1
					
					Counter_Sin + 0.007847
					Y_aktueller_Wert = 200 + Sin(Counter_Sin)*10*Random(19,5) 
			
					; Graph plotten
					LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, RGB(Random(255), Random(255), Random(255)))
					Y_letzer_Wert = Y_aktueller_Wert
					
					; X-Position weiterrücken, wenn der Graph noch nicht voll ist
					If X_aktueller_Wert < 800
						X_aktueller_Wert 	+ 1
					Else	
						X_aktueller_Wert 	= 0
						
						; Graph in die GUI zeichnen
						StopDrawing()													
						SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))	
						StartDrawing(ImageOutput(#Image_Buffer))
				
						;Hintergrund leeren
						Box(0, 0, 800, 400, RGB(Random(255), Random(255), Random(255)))	
					EndIf
				
				EndIf			
	
			EndIf
			
			
			If (aktueller_Test = 0)
				CloseWindow(#GUI)
				Break
			EndIf

			; Programm beenden
			Select WindowEvent()
				
			Case #PB_Event_CloseWindow
				End
				
			EndSelect
			
		ForEver
		
	EndIf

	ConsoleLocate ( 9, 12):	ConsoleColor(10, 0):	Print("Abgeschlossen!   ---Beenden mit Return-Taste---");
	ConsoleColor  ( 0, 0): 	Input()
	
EndIf
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: enormer performance Einbruch bei PB v5.21

Beitrag von STARGÅTE »

Wie hast du die Ausführungsgeschwindigkeit gemessen?
Oder anders gefragt, wie macht sich dieser Einbruch der Geschwindigkeit bemerkbar?
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
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: enormer performance Einbruch bei PB v5.21

Beitrag von Chimorin »

Meinst du einen Einbruch der Framerate?
Außer dem Lösen von Bugs hat sich ja nichts geändert. Erst recht nichts im 3D-Sektor.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: enormer performance Einbruch bei PB v5.21

Beitrag von PMV »

PB optimiert nichts wirklich im Sinne dessen, was man als
Compiler-Optimierungen bezeichnen würde. :wink:

Aber die Performance ist bei meinem Projekt von v5.11 auf
v5.21 ohne merkliche Veränderung.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: enormer performance Einbruch bei PB v5.21

Beitrag von captain_hesse »

@SBond
Bisher habe ich den Auslöser noch nicht finden können leider konnte mir auch dein Tool nicht weiterhelfen die Werte sind alle ziemlich gleich aber danke das du dir die Mühe gemacht hast dieses Tool zu schreiben :allright: .

@Stargate
Es gibt zwei Möglichkeiten erstens zählt das Programm mit wie viele Stellungen es pro Sekunde bewertet und zweitens braucht das Programm bei der selben Figurenstellung in Version 5.21 ca. doppelt so lange um ein Matt zu finden als z.B. mit der Version 5.20 oder früher. Bei Möglichkeit eins zeigt es auch an das nur etwa halb so viele Züge berechnet wurden. Ich habe es mit mehreren Diversen Teststellungen versucht immer das gleiche Ergebnis.

@Bananenfreak
Nein es hat nichts mit der Grafik zu tun.


@PMV
Also kann es daran ja schon mal nicht liegen.

@alle
Leider kann ich im Moment keine weiteren Angaben dazu machen höchstens noch dass das Programm ohne Kommazahlen arbeitet also nur ganze Zahlen verwendet und hauptsächlich nur diverse Zahlen durch diverse Arrays und Structuren schiebt und das nach Möglichkeit so schnell wie es nur geht. Irgendwo muss es wohl in PB 5.21 eine Veränderung gegeben haben die den Geschwindigkeitsunterschied bewirkt. Wenn man irgendwo nachlesen könnte was genau alles in v5.21 geändert wurde, hätte man vielleicht einen Anhaltspunkt aber so weiß ich derzeit garnicht mal genau wonach ich suchen soll.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: enormer performance Einbruch bei PB v5.21

Beitrag von STARGÅTE »

Ich weiß natürlich nicht genau, was für Berechnungen du machst, aber es gab bei einigen Versionen hin und wieder Probleme mit Rechenoperationen in Verbindung mit Typenkonversion.
Es kann also durchaus sein, dass mit PB 5.21 einer dieser Bugs behoben wurde, mit dem Resultat, dass hier und da einige ASM-Zeilen hinzu kamen, was nun den Code etwas langsammer macht.

Beispiele für diese Probleme waren vorallem Doubles und Quads
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
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: enormer performance Einbruch bei PB v5.21

Beitrag von captain_hesse »

STARGÅTE hat geschrieben: ... was nun den Code etwas langsammer macht.
Na ja wenn es nur ETWAS langsamer wäre hätte ich ja nix gesagt aber nur noch halb so schnell, ist schon ganz schön krass, das wirft mich ja wieder um Jahre zurück da bin ich geschwindigkeitstechnisch wieder auf dem stand wie vor 2-3 Jahren. Das ist für mich nicht akzeptabel da werde ich wohl oder übel vorerst mal bei Version 5.20 bleiben müssen vielleicht ändert sich das ja in den nächsten PB-Versionen wieder. In der Zwischenzeit werde ich das Programm mal von Grund auf neu überarbeiten und wenn ich herausfinden sollte was für den geschwindigkeitsunterschied verantwortlich ist werde ich es hier Posten. Bis dahin aber erst mal danke für eure Hilfe.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: enormer performance Einbruch bei PB v5.21

Beitrag von STARGÅTE »

Aber wenn du so viel Wert auf Geschwindigkeit legst, dann würde ich den Berechnugs-Kern sowieso direkt in ASM schreiben.
Allein das würde mit sicherheit noch mal 3 bis 5 mal schneller werden.
captain_hesse hat geschrieben:Na ja wenn es nur ETWAS langsamer wäre hätte ich ja nix gesagt aber nur noch halb so schnell, ist schon ganz schön krass
Naja, wenn in einer Schleife nur ein PB-Befehl stand, der früher 2 ASM-Zeichen erzeugt hat und nun (wegen kA was) 4 Zeilen erzeugt, wäre das schon mal an dieser Stelle doppelt so viel zeit (in etwa).

[Leicht OT]
Die kompilierte PB-Code ist nicht optimiert, was in den meisten Fällen auch nicht schlimm ist, dafür ist der Kompiler schon schnell in der Ausführung.
Ich selbst, konnte meinen Augen kaum glauben, als ich mein Include für Vektoren mit ASM und SSE optimiert habe, und die Berechnungen 10 mal schneller waren. (dafür ist die Include datei nun 10 mal länger ^^)
[/OT]

Du kannst ja mal deinen Kern hier posten, muss ja in igrndeiner Schleife sein, die zimlich tief verschachtelt ist, damit es diese Auswirkungen hat.
Außdem kannst du ja mal den erzeugten ASM Code von 5.20 und 5.21 vergleichen.
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
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: enormer performance Einbruch bei PB v5.21

Beitrag von PMV »

Da mich auch ziemlich interessiert, was den Unterschied aus macht:
Es ist nun wirklich kein Akt, die entsprechende Stelle raus zu finden.
Schreib dir ne kleine Include die die Zeit zwischen zwei Aufrufen misst.
Das Ergebnis schreibst jeweils in eine LinkedListElement und am Ende
schreibst alle Einträge in eine Datei. Das machst mit beiden PB Versionen
und dann kannst ziemlich gut vergleichen. :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten