Seite 1 von 2

CPU Leistung einstellen ??

Verfasst: 15.12.2013 13:30
von 3dhubiflieger
Hallo, ich suche einen Code mit dem man die CPU Auslastung prozentual einstellen kann um
z.b alte Spiele zu spielen zu können. Wenn ich dem Prozesser über eine Schleife beschäftige ist eines. Besser wäre es natürlich dem Prozessor direkt irgendwie mitzzuteilen wieviel Kerne er benutzen soll und mit welcher Spannung oder sowas in der Art. Für eure Hilfe wäre ich dankbar ! :roll:

Re: CPU Leistung einstellen ??

Verfasst: 15.12.2013 13:35
von RSBasic
3dhubiflieger hat geschrieben:Besser wäre es natürlich dem Prozessor direkt irgendwie mitzzuteilen wieviel Kerne er benutzen soll
http://www.rsbasic.de/aktualisierung/wi ... stellen.pb

Re: CPU Leistung einstellen ??

Verfasst: 15.12.2013 13:44
von 3dhubiflieger
Das sieht schon mal sehr gut aus werd ich gleich mal ne kleine Procedur draus basteln ! Danke !

Re: CPU Leistung einstellen ??

Verfasst: 15.12.2013 16:23
von 3dhubiflieger
..noch ne Frage kann ich eigentlich auch die Mhz Zahl eines einzelnen Kerns irgendwie beeinflussen ohne eine "Lastschleife" zu programmieren ?

Re: CPU Leistung einstellen ??

Verfasst: 17.12.2013 07:31
von 3dhubiflieger
So hab mir mal die kleine Procedur zum setzen der Kernanzahl eines Prozesses zusammengebastelt. Vielleicht kann diese ja jemand gebrauchen. Allerdings würd ich auch noch gern die mhz Zahl oder die Spannung eines Kerns setzen, bzw den Prozess gezielt ausbremsen.
Vielleicht hat noch jemand ne Idee. :wink:

Code: Alles auswählen

Procedure setzeCPUKerne(PID,benutzteKerne)

 #PROCESS_ALL_ACCESS=$1F0FFF 

 ;affinity Mask berechnen
 CPUs = 1 
 For x = 1 To benutzteKerne
  CPUNr = CPUNr + CPUs
  Cpus = CpuNr
  CustomAffinity =  CustomAffinity + Cpus
 Next 
 
 ;Anzahl der Kerne setzen
 pH = OpenProcess_(#PROCESS_ALL_ACCESS, #False, PID)
 SetProcessAffinityMask_ (ph,CustomAffinity)

 CloseHandle_(ph) 
EndProcedure
Edit by NicTheQuick: Code-Tags gesetzt

Re: CPU Leistung einstellen ??

Verfasst: 17.12.2013 10:25
von NicTheQuick
Ich habe das Gefühl du bist durch Herumprobieren auf diese Schleife gekommen, die dir CustomAffinity berechnet. :wink:

Hier mal eine einfachere Version davon, die auch bis 64 Bit arbeitet und auch nur die benötigten Rechte nutzt.

Code: Alles auswählen

EnableExplicit

#PROCESS_SET_INFORMATION = $0200

Procedure setzeCPUKerne(PID.i, benutzeKerne.i)
	Protected customAffinity.q = (1 << benutzeKerne) - 1
	
	If (benutzeKerne = 64)
		customAffinity = -1
	EndIf
	
	;Anzahl der Kerne setzen
	pH = OpenProcess_(#PROCESS_SET_INFORMATION, #False, PID)
	SetProcessAffinityMask_(ph, customAffinity)
	
	CloseHandle_(ph)
EndProcedure
Leider achtet der Code aber noch nicht darauf welche Prozessoren wirklich gesetzt werden dürfen. Eine Auflistung möglicher Prozessoren gibt die Funktion GetProcessAffinityMask_() zurück. Deswegen immer besser mal die Anleitung auf der MSDN lesen.

Und wegen deiner MHz-Frage: Das ist wohl kaum möglich, da üblicherweise Prozessoren nur bestimmte festgelegte Taktfrequenzen besitzen und nicht darunter gehen können. Die möglichen Taktfrequenzen für meinen Laptop sind zum Beispiel: 2.70 GHz, 2.60 GHz, 2.50 GHz, 2.40 GHz, 2.30 GHz, 2.20 GHz, 2.10 GHz, 1.90 GHz, 1.80 GHz, 1.70 GHz, 1.60 GHz, 1.50 GHz, 1.40 GHz, 1.30 GHz und 1.20 GHz. Ich kann also auf minimal 1200 MHz herunter takten, was momentan sowieso der Fall ist, weil ich nur im Netz surfe. Aber wenn es weniger werden soll, braucht man entweder eine Lastschleife, oder man installiert sich für alte Anwendungen entsprechende virtuelle Maschinen, die man dann herunter takten kann und die das eventuell eleganter machen als mit einer Lastschleife.

Re: CPU Leistung einstellen ??

Verfasst: 17.12.2013 18:03
von 3dhubiflieger
Ok, danke, hab die Prozedur in meinem Programm übernommen. Weis zwar nich was.... customAffinity.q = (1 << benutzeKerne) - 1 genau bedeutet bzw wie ich zu dem Ergebnis komme, aber egal es funktioniert :D ...Aso, ja die Schleife hab ich durch probiern heraus bekommen. Um einen Prozess gezielt auszubremsen habe ich mir überlegt, wenn es denn nich anders geht gezielt die Schleife in den zu verlangsamenden Prozess einzufügen, welcher gerade aktiv ist. Ich habe aber keine Ahnunung ob das geht. Wenn ich mein Programm öfters aufrufen lasse (weniger Delay), dann bekommt zwar der zu verlangsamende Prozess weniger Leistung ab, aber das gilt dann auch für alle anderen Prozesse und ich hab dann ausserdem Probleme mit dem Timing, da mein Projekt doch etwas grösser ist. Vielleicht hat ja jemand noch ne Idee wie ich da in nen aktiven Prozess was einpflanzen kann, wodurch dieser ausgebremst wird....

Re: CPU Leistung einstellen ??

Verfasst: 20.12.2013 21:21
von Thorium
http://www.purebasic.fr/german/viewtopi ... 11&t=15901

Code kann ich posten aber es hat nie wirklich gut funktioniert.
Mhz einstellen ist unter bestimmten CPU's möglich, nicht unter allen und viel Aufwand und benötigt entsprechende Rechte. Von der Spannung solltest du die Finger weg lassen.

Re: CPU Leistung einstellen ??

Verfasst: 21.12.2013 18:49
von Rudi
Guck Dir mal http://www.dosbox.com/ an! Eine bessere Lösung wirste kaum finden.

Re: CPU Leistung einstellen ??

Verfasst: 24.12.2013 10:08
von 3dhubiflieger
@Thorium Deine Idee geht schon mal in die richtige Richtung. Ich brauch allerdings ne Lösung die mit allen Programmen / Prozessen klar kommt. Ausserdem passt mir das mit der dll nicht ganz. Mir sind Programme ohne Zusatzdateien lieber.

@Rudi DOSBOX bringt mir nichts. Der Code soll in ein allumfassendes Tool für die Prozesssteuerung und Bedienung/Zuweisung mittels Gamepad eingebaut werden.
Das Tool ist zu 90% fertig. Aber das mit der Programmverlangsamung ist halt nochn schönes Feature. Wenns fertig is kann ichs ja mal posten.