
enormer performance Einbruch bei PB v5.21
- 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
Also zunächst mal würde ich es gerne vermeiden teile des Quellcodes hier zu posten da ich diesen eventuell noch kommerziell nutzen möchte, das hängt halt davon ab wie gut es mir gelingt die Spielstärke des Programms noch zu verbessern. Allerdings kommt PB in der aktuellen Version mir da ganz und garnicht entgegen ich habe in den letzten Tagen etliche Tests gemacht und was interessantes herausgefunden. Die Anzahl der Züge die das Programm untersuchen kann ist sehr stark davon abhängig wieviele Figuren auf dem Brett stehen, ist das Brett voll müssen auch viele Züge generiert und sortiert werden, stehen aber nur noch zwei Könige auf dem Brett sind nur noch wenige Züge zu generieren und garnichts mehr zu sortieren folglich müsste das Programm wenn nur noch zwei Könige auf dem Brett stehen viel schneller sein. Bei allen früheren PB Versionen ist das auch so nur bei v5.21 nicht da läuft das Programm immer gleich schnell es berechnet im schnitt ca. 600000 Stellungen pro Sekunde egal welche Stellung auf dem Brett steht während alle anderen Versionen 900000 - 1200000 Stellungen erreichen und wenn nur noch zwei Könige auf dem Brett stehen sind es sogar knappe 3 Millionen Züge die es schafft außer bei v 5.21 da sind es immer ca. 600000. Ich konnte bisher auch nirgendwo einen speziellen Programmteil finden der dafür verantwortlich ist. Es kommt mir fast so vor als ob ein delay mit drinn wäre der das ganze auf eine einheitliche Geschwindigkeit bringt. Ich glaube nicht das dafür nur ein par zusätzlich ASM Zeilen verantwortlich sind die der Compiler jetzt mehr generiert der fertige Code hat inetwa die gleiche Größe sondern eher das hier wohl ein neuer Bug in PB5.21 entstanden ist. Ich werde weiter nach der Ursache suchen allerdings habe ich immer noch keinen Schimmer wo ich den Hebel ansetzen soll 

Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
- 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
Ok ich hab was gefunden der Zugriff ElapsedMilliseconds() dauert bei v5.21 extrem lange
hier ein Beispiel:einfach mal die angegebene Zeile zum Kommentar machen dann sieht man den Unterschied
hier ein Beispiel:
Code: Alles auswählen
OpenConsole()
Declare rec()
Global ti
time=ElapsedMilliseconds()
rec()
PrintN("fertig "+Str(ElapsedMilliseconds()-time))
Input()
Procedure rec()
ti+1
If ti<5
For x=1 To 50
rec()
; diese zeile bremst ohne ende
tt=ElapsedMilliseconds()
; ****************************
Next
EndIf
ti-1
EndProcedure
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: enormer performance Einbruch bei PB v5.21
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: enormer performance Einbruch bei PB v5.21
Du kannst Dir ja ein Macro an den Kopf setzen:
Dann hast Du wieder das vorherige Verhalten.
Aber es kommt mir schon etwas komisch vor, dass dieser Befehl für Deine Probleme verantwortlich sein soll.
Ich meine, wie oft ruft man das wohl in einer zeitkritischen Schleife auf?
Code: Alles auswählen
Macro ElapsedMilliseconds()
GetTickCount_()
EndMacro
Aber es kommt mir schon etwas komisch vor, dass dieser Befehl für Deine Probleme verantwortlich sein soll.
Ich meine, wie oft ruft man das wohl in einer zeitkritischen Schleife auf?
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- 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
Hab ich bereits gemacht allerdings habe ich alle ElapsedMilliseconds() durch GetTickCount_() ersetzt jetzt läuft es auch wieder so wie es soll
eigentlich genau so wie es hier in diesem Beispiel zu sehen ist aber du hast recht es bremst und ich muß mein Timerproblem anders lösen bin gerade dabei das ganze Programm zu überarbeiten.HeX0R hat geschrieben:Ich meine, wie oft ruft man das wohl in einer zeitkritischen Schleife auf?
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Re: enormer performance Einbruch bei PB v5.21
Der Overhead für QueryPerformanceCounter, welcher nun verwendet wird, ist tatsächlich größer als bei GetTickCount, was früher verwendet wurde. Allerdings befindet der sich dennoch im Nanosekundenbereich. Du verlierst die Performance also weil du unnötig oft ElapsedMilliseconds() aufrufst. Das gibt dir unter 5.20 sowieso keine millisekundengenauen Werte zurück.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
