Einen Thread auf eine bestimmte Core legen
-
Servus, ist es eigentlich möglich einen Thread auf einer bestimmten Core laufen zu lassen?
Ich würde gerne einen Thred auf dem ersten Core und einen zweiten Thread auf einem anderen Core setzen, vorausgesetzt die CPU ist eine Multi-Core-Architektur.
Ist das überhaupt irgendwie möglich? Hat da schon einer Erfahrung? Ob Windows oder Linux ist mir relativ egal, lieber wär mir allerdings windows.heimschmiede
-
SetThreadAffinityMask
-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ein thread kann nicht auf einem anderen Prozessor als auf dem der main Prozess läuft.
A thread affinity mask is a bit vector in which each bit represents the processors that a thread is allowed to run on. A thread affinity mask must be a subset of the process affinity mask for the containing process of a thread. A thread can only run on the processors its process can run on.
-
Firefly, ich denke da hast du was falsch verstanden.
Der "main thread" selbst hat eine "thread affinity mask", jeder andere thread hat eine, und dann hat der Prozess nochmal eine eigene "process affinity mask".
Das heisst aber nicht dass du den Thread in dem main() ausgeführt wird nicht auf Core 1 festbügeln könntest während ein anderer Thread des selben Prozesses auf Core 2 festgebügelt ist.
Du kannst bloss nicht als "proccess affinity mask" 1 angeben und dann für einen Thread eine "thread affinity mask" von 2. Wenn du die
"proccess affinity mask" aber auf "alle" lässt kannst du die einzelnen threads setzen wie du lustig bist.
-
ah, wunderbar. danke für die schnellen antworten.
aber wie setzt man denn nun die process affinity mask ?
und wisst ihr grad zufällig auch, wie man einfach herausfindet, wie viele cores überhaupt existieren? wenn nich, is auch egal, dann schreib ichs in assembler (cpuid lässt grüßen).
-
Heimschmiede schrieb:
und wisst ihr grad zufällig auch, wie man einfach herausfindet, wie viele cores überhaupt existieren?
SYSTEM_INFO si; GetSystemInfo(&si); // jetzt enthält si.dwNumberOfProcessors die Anzahl der virtuellen Prozessoren (also Kerne).
-
Nur als kleine Anmerkung: Du kannst unter Windows nicht einen Thread auf einen Core festlegen!!!!!
Du kannst Ihn nur beschränken!Es macht also IMHO in den seltensten Fällen Sinn dies zu machen. Du nimmst Deinem Thread nur Zeit weg!
-
aber wie setzt man denn nun die process affinity mask
tu dir selbst und uns einen gefallen und schlag solche dinge in der MSDN nach.
du hast in diesem thread leicht genug informationen um die entsprechende funktion in der MSDN in weniger als 5 minuten zu finden.