CPU Leistung einstellen ??

Für allgemeine Fragen zur Programmierung mit PureBasic.
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

CPU Leistung einstellen ??

Beitrag 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:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: CPU Leistung einstellen ??

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: CPU Leistung einstellen ??

Beitrag von 3dhubiflieger »

Das sieht schon mal sehr gut aus werd ich gleich mal ne kleine Procedur draus basteln ! Danke !
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: CPU Leistung einstellen ??

Beitrag von 3dhubiflieger »

..noch ne Frage kann ich eigentlich auch die Mhz Zahl eines einzelnen Kerns irgendwie beeinflussen ohne eine "Lastschleife" zu programmieren ?
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: CPU Leistung einstellen ??

Beitrag 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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
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

Re: CPU Leistung einstellen ??

Beitrag 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.
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: CPU Leistung einstellen ??

Beitrag 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....
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: CPU Leistung einstellen ??

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: CPU Leistung einstellen ??

Beitrag von Rudi »

Guck Dir mal http://www.dosbox.com/ an! Eine bessere Lösung wirste kaum finden.
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: CPU Leistung einstellen ??

Beitrag 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.
Antworten