Wie kann man Kernen (Prozessorkerne) gewisse Prozesse zuweisen, genauere erklärung folgt weiter unten?

2 Antworten

Du kannst die Prozessoraffinität des Prozesses im Taskmanager manuell verändern. Weist du den Prozess einer (oder mehreren) Kernen zu werden die Threads des Prozesses nur auf den gewählten Kernen verteilt. Das ist sozusagen ein manueller Eingriff in das sonst automatisch vollzogene Thread-Scheduling des Betriebssystem-Kernels. Diese Einstellung merkt sich aber das Betriebssystem nicht. Da musst du dann in die Trickkiste greifen und was programmieren: http://stackoverflow.com/questions/19187241/change-affinity-of-process-with-windows-script

Das kann in manchen Fällen von Nachteil sein. Ein Spiel das auf 4-Kern-CPUs ausgelegt ist wird seine Aufgaben auf Threads verteilen wenn sie am besten auf 4 physikalischen Kernen laufen. Zwingst du dann die Verteilung auf 2 Kerne kann das die Performance beeinträchtigen. Im Fall Prime95 würde das z.B. auch keinen Sinn machen. Prime soll ja alle Kerne auslasten. Änderst du während des Tests die Affinität auf Core 3, verschiebt sich die Ausführung aller Threads auf diesen einen Kern. Aber es ist interessant mal zu machen um zu sehen was passiert ;-)

Eine Software kann seine Affinität aber auch selber festlegen wenn sie das will. Das wird aber nur gemacht wenn es einen Grund dafür gibt. Bei Mobilprozessoren kann das öfter mal der Fall sein. Die Quad/Hex/Octacores in Smarthpones sind nicht wie Desktop-CPU-Kerne identisch sondern unterschiedlich (z.B. 4 Kerne die volle Leistung bringen und einen deutlich niedriger getakteten Companion Core wie beim NVidia Tegra). Das dient dazu den Stromverbrauch so stark wie möglich zu senken wenn das Handy in der Hose ist, da läuft dann nur der Ultra-Low-End Core der für Benachrichtigungen, Uhr, etc. da ist oder das System bei einem Anruf / Entsperren aufweckt. Ein Dienstprozess der sagen wir die Uhr zeichnet sollte dann affin zu diesem Kern sein, damit die anderen, leistungsfähigen/-hungrigen Kerne schlafen können


sotnu 
Beitragsersteller
 17.04.2016, 22:31

Danke für die Antwort erstmal.

Habe es heute Mittag mal ausprobiert. Also ein bisschen was getestet. z.B The Witcher 2 mit nur einem Kern gespielt. Das hat dann nur noch 10 Bps gegeben, mit 2 Kernen dann mehr als doppelt so viel. Mit 4 dann allerdings nicht mehr als mit 2, obwohl ganz klar 4 genutzt wurden. Die 2 Kerne wurden eben auch nicht ganz ausgelastet. Nehme mal an, es liegt daran.

Aber ich dachte mir, ob es einen Nutzen von sich ziehen kann, wenn man z.B einen i7 hat und eben dann 4 Kerne (bzw. 2 kerne mit je 2 Threads) dem Spiel zuweist und nebenbei mit den anderen 4 noch z.B ein Video rendert.

Dann könnte es schon ein nutzen haben. Sofern das das Betriebssystem nicht besser macht.

Aber das mit dem Programmieren kommt auf meine Liste. Dicht neben den Hot-Keys :)

"verschiebt sich die Ausführung aller Threads auf diesen einen Kern"

Ja, also du meinst zuzusehen wie er fast krepiert :) Aber das werde ich mal machen, wenn ich mal eine CPU rumliegen habe, die kaputt gehen darf.

sotnu 
Beitragsersteller
 17.04.2016, 22:40
@sotnu

Edit: "Ein Spiel das auf 4-Kern-CPUs ausgelegt ist wird seine Aufgaben auf Threads verteilen wenn sie am besten auf 4 physikalischen Kernen laufen."

Was mir gerade dazu einfällt: Sind 4 Kerne mit je einem Thread besser als 2 Kerne mit je 2 Threads ? Oder gibt es zumindest gewisse Spiele/Programme, die mit Physikalischen Kernen besser "laufen" ? EIn echter 8 Kerner sollte doch eigentlich besser sein, als ein 4 Kerner mit 8 Threads. Mal angenommen die Kerne an sich wären gleich stark in beiden Fällen.

FaronWeissAlles  17.04.2016, 23:41
@sotnu

Moment mal. Ich rede hier von Software-Threads. Sowas wie Unterprozesse Lite. Mehrere Sequenzen von Code die von der Logik her parallel ausgeführt werden könnten, genau dafür auch vorgesehen und dann auf der Hardware parallel ausgeführt werden sofern das möglich ist (eben physikalische Kerne da sind auf die sie verteilt werden können).

Du redest hingegen von der Hardware und Intels Bedeutung von der Bezeichnung "Thread". Hyperthreading, bei dem scheinbar 2x so viele Kerne existieren obwohl es die eigentlich gar nicht gibt ist ein Trick um die physikalischen Kerne besser auslasten zu können. Das ist mehr wie eine optimiertere Variante eines echten 4-Kerners, der aber nicht an einen echten 8-Kerner heranreicht. Also ja, 8/8 > 4/8 > 4/4 im großen und ganzen.

Ich geb zu das ist verwirrend wenn einem Programmierkenntnisse fehlen. Ums vereinfacht auszudrücken: Die Software sieht nur Prozessorkerne, dessen Anzahl gleich der Anzahl der "Threads" ist. Und die eigentlichen Threads werden dann auf den Kernen ausgeführt.

Und nein, selbst wenn du alle laufenden Prozesse auf den einen selben Kern beschränkst zerstört das nicht deine CPU, sondern nur dein Nutzererlebnis, weil sich alle entsprechenden Programme um CPU-Zeit kloppen müssen - als hättest du einen Singlecore. Das geht aber effizienter zu simulieren wenn man im BIOS direkt bestimmte Cores deaktiviert. Bzw. man müsste auch irgendwie Windows anweisen können dass die Systemprozesse nur auf eine bestimmte Anzahl von Kernen beschränkt wird, aber ich weiß nicht mehr wie und wo (wahrscheinlich in der Registry irgendwo)

sotnu 
Beitragsersteller
 18.04.2016, 12:31
@FaronWeissAlles

Ach so. Ich muss mich mal ein bisschen in Prozesse,Dienste und Threads einlesen. Am besten auch, wie dieses Hyperthreading funktioniert.

Und ich dachte, wenn alle Aufgaben auf einen Kern geschoben werden, hat er mehr zu tun und wird heisser. Aber wenn einfach die "Warteschlange" länger wird, geht meine Denkweise nicht ganz auf.

Danke nochmals für die Hilfe :)

Gar nicht. Das regelt das Betriebssystem (und dessen Kernel) im wesentlichen ganz allein. Selbst wenn es wirkliche Einzelprozessoren wären, wäre eine Aufteilung nur dann trivial, wenn man ganze Programme auf Prozessoren verteilen würde. Hier haben wir aber nur Kerne - und die können nicht ohne die darüberliegende (Hardware-)Schicht arbeiten, die wiederum gemeinsam benutzt werden muss.


sotnu 
Beitragsersteller
 17.04.2016, 12:58

Hmm ok, schade.

Und ja, ich meinte ganze Programme zuweisen. Aber geht in dem Fall nicht.

Aber danke für die Antwort.

Edit: Aber wenn man jetzt im Taskmanager die Zugehörigkeit auf die jeweiligen Kerne verteilt, sollte das schon wenigstens ein bisschen in meine Richtung gehen, oder ? Zumindest den "Schwerpunkt" könnte ich damit verteilen, oder ?

sotnu 
Beitragsersteller
 17.04.2016, 22:35
@sotnu

Die Frage hat sich geklärt, da ja das in Faron's Antwort erklärt wurde.

DrErika  18.04.2016, 09:04
@sotnu

Edit: Aber wenn man jetzt im Taskmanager die Zugehörigkeit auf die jeweiligen Kerne verteilt, sollte das schon wenigstens ein bisschen in meine Richtung gehen, oder ? Zumindest den "Schwerpunkt" könnte ich damit verteilen, oder ?

Naja, was soll das denn bringen? Angenommen, du hast ein Spiel für 4 Kerne und sagst dem, der soll eine "Affinität für 2" haben. Was soll das denn dann geben? Besser werden? Was soll denn das Betriebssystem damit machen? Ich glaub nicht dran, dass das irgendwas sinnvolles bewirkt. Der Denkfehler besteht darin, dass es keine eigenständigen Prozessoren sind, sondern "nur" Kerne. Damit kann ich Vorlieben vergeben wie ich will, da ändert sich m.E. nicht so viel in eine positive Richtung, gerade auch wenn du mit dem Gedanken spielst, nebenher Videorendering (also ganz was anderes) zu machen.

sotnu 
Beitragsersteller
 18.04.2016, 12:34
@DrErika

Ach so, ich habe mir gedacht, ich kann dann aus einem 8 Kerner 2 4 Kerner machen. Also eben aufteilen, aber schade das das nicht funktioniert. Dachte die Kerne können mehr oder weniger eigenständig für sich Arbeiten.

Aber danke für die Aufklärung.