Seite 1 von 2
[PureBasic] Wie die CPU am besten voll auslasten?
Verfasst: 20.08.2009 20:55
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
Verfasst: 20.08.2009 21:08
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.
Verfasst: 20.08.2009 21:37
von Mok
NicTheQuick hat geschrieben:
Einfacher wäre eine Schleife zu machen, die nur im Kreis läuft.
Whoa, 5 fps wegen (beinahe) Endlosschleife
Hab nicht gedacht, dass die CPU soviel zur Grafikdarstellung beiträgt.
Danke

Verfasst: 20.08.2009 22:35
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
Verfasst: 21.08.2009 14:13
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.
Verfasst: 21.08.2009 15:53
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
Re: [PureBasic] Wie die CPU am besten voll auslasten?
Verfasst: 21.08.2009 18:01
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:
Verfasst: 21.08.2009 19:51
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()
Verfasst: 21.08.2009 20:02
von RSBasic
Hallo Alex,
ich kenn mich damit nicht aus, aber könntest du mir sagen, was die zwei Zeilen genau machen?
Verfasst: 21.08.2009 20:03
von cxAlex
Eine Endlosschleife. JMP @b springt zu @@: zurück.
Wollts halt in ASM machen.