[PureBasic] Wie die CPU am besten voll auslasten?

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

[PureBasic] Wie die CPU am besten voll auslasten?

Beitrag von Mok »

Servus.

Ich will mit meinem FPS-Programm testen, wie stark sich die FPS verschlechtern können, wenn man die ach so liebe CPU mal richtig unter Druck setzt. Schön wär ein PureBasic-Code. Ich hab's bereits mit AllocateMemory(1073741824) probiert (das macht genau 1 GB aus). Allerdings war die CPU nicht bis garnicht ausgelastet, außerdem sollte das Programm auf alten Rechnern mit 512 MB RAM auch lauffähig sein...
Vorschläge?

MfG, Mok
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Der Arbeitsspeicher hat ja nichts mit der CPU zu tun.
Und wenn du 1 GB Speicher anforderst, ist er noch lange nicht belegt. Und wenn Windows
merkt, dass mit dem Speicher nichts gemacht wird, dann wird er sowieso ausgelagert,
sodass du für dein anderes Programm wieder mehr Arbeitsspeicher zur Verfügung hast.

Einfacher wäre eine Schleife zu machen, die nur im Kreis läuft.

Code: Alles auswählen

Define i.i
While #True
  i + 1
Wend
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

NicTheQuick hat geschrieben: Einfacher wäre eine Schleife zu machen, die nur im Kreis läuft.

Code: Alles auswählen

Define i.i
While #True
  i + 1
Wend
Whoa, 5 fps wegen (beinahe) Endlosschleife :o
Hab nicht gedacht, dass die CPU soviel zur Grafikdarstellung beiträgt.
Danke ;)
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Mok hat geschrieben: Hab nicht gedacht, dass die CPU soviel zur Grafikdarstellung beiträgt.
Die CPU ist alles...

http://www.golem.de/showhigh2.php?file=/0908/69099.html
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Beitrag von kswb73 »

Nunja, es kommt auch die Technik an. Rendest du deine Spielwelt sperat in einem Threat, kannst du recht ungetrost die CPU belasten, ohne das die Framerate einbricht. Berechnest du jetzt allerdings mitten in deiner Renderschleife Sachen, wartet dein Programm bis der CPU fertig ist.

@cxAlex
Für manche Sachen ist die CPU sicher besser. Aber für Physikberechnungen und Realtimerendering (in etwa Anzeigen bewegter Animiation) ist die GPU (Prozessor der Grafikkarte) deutlich besser, einfach weil sie entsprechend dafür konstruiert ist. Außerdem kommen heutzutage immer mehr Prozessoren gleichzeitg zum Einsatz. Selbst vier Graphikkarten + Quad Prozessoren (4 Stück), welche alle zusammenarbeiten sind heute realistisch. Mit DirectX 10 ist es außerdem möglich Berechnungen auf die GPU zu verlegen. Meiner Meinung nach sind die GPU's noch nicht am Ende.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Dazu braucht man noch nicht mal DirectX, sondern einfach nur CUDA von nVidia oder das
ATI-Äquivalent. Außerdem kommt jetzt durch OpenCL eine offene Schnittstelle zu Karten
beider Hersteller hinzu, die auch nVidias PhysX unterstützt.

Ohne paralleles Rechnen geht bei uns in der Bioinformatik gar nichts mehr. Die rechnen da
auch mit Verbünden von 4 Grafikkarten mit jeweils 128 Cores oder mehr. Dazu ein oder
mehrere Quadcores, die die Arbeit verteilen. Raus kommt dann sowas: BALLView
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: [PureBasic] Wie die CPU am besten voll auslasten?

Beitrag von AND51 »

Mok hat geschrieben:wenn man die ach so liebe CPU mal richtig unter Druck setzt. Schön wär ein PureBasic-Code.
Einfach geht's nicht:

Code: Alles auswählen

Repeat : ForEver
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Das lastet die CPU VOLL aus:

(Benutzung auf eigene Gefahr!)

Code: Alles auswählen

Procedure KillCPU_Thread(Core)
  Protected Thread = GetCurrentThread_() ; Aktuellen Thread ermitteln
  SetThreadPriority_(Thread, #THREAD_PRIORITY_TIME_CRITICAL) ; Zeitkritisch oOOO
  SetThreadAffinityMask_(Thread, Core) ; Auf einen Kern festlegen
  
  ; Und ab gehts endlos
  !@@:
  !JMP @b
EndProcedure

Procedure KillCPU()
  Protected Thread, Core, SI.SYSTEM_INFO
  GetSystemInfo_(@SI)
  For Core = 0 To SI\dwNumberOfProcessors-1
    Thread = CreateThread(@KillCPU_Thread(), Core)
  Next
  WaitThread(Thread)
EndProcedure

KillCPU()
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Hallo Alex,

ich kenn mich damit nicht aus, aber könntest du mir sagen, was die zwei Zeilen genau machen?

Code: Alles auswählen

!@@:
!JMP @b
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Eine Endlosschleife. JMP @b springt zu @@: zurück.

Wollts halt in ASM machen.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Antworten