Dela via


Flera processorer

Datorer med flera processorer är vanligtvis utformade för en av två arkitekturer: icke-enhetlig minnesåtkomst (NUMA) eller symmetrisk multiprocessing (SMP).

På en NUMA-dator ligger varje processor närmare vissa delar av minnet än andra, vilket gör minnesåtkomsten snabbare för vissa delar av minnet än andra delar. Under NUMA-modellen försöker systemet schemalägga trådar på processorer som ligger nära det minne som används. Mer information om NUMA finns i NUMA Support.

På en SMP-dator ansluter två eller flera identiska processorer eller kärnor till ett enda delat huvudminne. Under SMP-modellen kan alla trådar tilldelas till valfri processor. Schemaläggning av trådar på en SMP-dator liknar därför schemaläggning av trådar på en dator med en enda processor. Schemaläggaren har dock en pool med processorer, så att den kan schemalägga trådar att köras samtidigt. Schemaläggning bestäms fortfarande av trådprioritet, men det kan påverkas av inställningen trådtillhörighet och trådens idealprocessor, enligt beskrivningen i det här avsnittet.

Trådtillhörighet

trådtillhörighet tvingar en tråd att köras på en specifik delmängd processorer. Det bör vanligtvis undvikas att ange trådtillhörighet eftersom det kan störa schemaläggarens möjlighet att schemalägga trådar effektivt mellan processorer. Detta kan minska prestandaökningarna som uppstår vid parallell bearbetning. En lämplig användning av trådtillhörighet är att testa varje processor.

Systemet representerar tillhörighet med en bitmask som kallas för en processortillhörighetsmask. Tillhörighetsmasken är storleken på det maximala antalet processorer i systemet, med bitar inställda för att identifiera en delmängd processorer. Till en början avgör systemet delmängden av processorer i masken.

Du kan hämta den aktuella trådtillhörigheten för alla trådar i processen genom att anropa funktionen GetProcessAffinityMask. Använd funktionen SetProcessAffinityMask för att ange trådtillhörighet för alla trådar i processen. Om du vill ange trådtillhörighet för en enda tråd använder du funktionen SetThreadAffinityMask. Trådtillhörigheten måste vara en delmängd av processtillhörigheten.

På system med fler än 64 processorer representerar tillhörighetsmasken ursprungligen processorer i en enda processorgrupp. Trådtillhörighet kan dock ställas in på en processor i en annan grupp, vilket ändrar tillhörighetsmasken för processen. Mer information finns i processorgrupper.

Trådens idealprocessor

När du anger en trådens ideala processorkör schemaläggaren tråden på den angivna processorn när det är möjligt. Använd funktionen SetThreadIdealProcessor för att ange en önskad processor för en tråd. Detta garanterar inte att den perfekta processorn väljs, men ger en användbar ledtråd till schemaläggaren. På system med fler än 64 processorer kan du använda funktionen SetThreadIdealProcessorEx för att ange en önskad processor i en specifik processorgrupp.

NUMA-support

processorgrupper