Delen via


Meerdere processors

Computers met meerdere processors zijn doorgaans ontworpen voor een van de twee architecturen: niet-uniforme geheugentoegang (NUMA) of symmetrische multiprocessing (SMP).

In een NUMA-computer bevindt elke processor zich dichter bij sommige delen van het geheugen dan andere, waardoor geheugentoegang sneller verloopt voor sommige delen van het geheugen dan andere onderdelen. Onder het NUMA-model probeert het systeem threads te plannen op processors die dicht bij het gebruikte geheugen liggen. Zie NUMA-ondersteuningvoor meer informatie over NUMA.

Op een SMP-computer maken twee of meer identieke processors of kernen verbinding met één gedeeld hoofdgeheugen. Onder het SMP-model kan elke thread worden toegewezen aan elke processor. Daarom is het plannen van threads op een SMP-computer vergelijkbaar met het plannen van threads op een computer met één processor. De scheduler heeft echter een groep processors, zodat threads gelijktijdig kunnen worden uitgevoerd. Planning wordt nog steeds bepaald door threadprioriteit, maar kan worden beïnvloed door het instellen van threadaffiniteit en ideale threadprocessor, zoals beschreven in dit onderwerp.

Threadaffiniteit

threadaffiniteit dwingt een thread uit te voeren op een specifieke subset van processors. Het instellen van threadaffiniteit moet over het algemeen worden vermeden, omdat dit de mogelijkheid van de planner kan verstoren om threads effectief te plannen tussen processors. Dit kan de prestatieverbeteringen verminderen die worden geproduceerd door parallelle verwerking. Een geschikt gebruik van threadaffiniteit is het testen van elke processor.

Het systeem vertegenwoordigt affiniteit met een bitmasker dat een processoraffiniteitsmasker wordt genoemd. Het affiniteitsmasker is de grootte van het maximum aantal processors in het systeem, waarbij bits zijn ingesteld om een subset van processors te identificeren. In eerste instantie bepaalt het systeem de subset van processors in het masker.

U kunt de huidige threadaffiniteit verkrijgen voor alle threads van het proces door de functie GetProcessAffinityMask aan te roepen. Gebruik de functie SetProcessAffinityMask om threadaffiniteit op te geven voor alle threads van het proces. Als u de threadaffiniteit voor één thread wilt instellen, gebruikt u de functie SetThreadAffinityMask. De threadaffiniteit moet een subset van de procesaffiniteit zijn.

Op systemen met meer dan 64 processors vertegenwoordigt het affiniteitsmasker in eerste instantie processors in één processorgroep. Threadaffiniteit kan echter worden ingesteld op een processor in een andere groep, waardoor het affiniteitsmasker voor het proces wordt gewijzigd. Zie processorgroepenvoor meer informatie.

Ideale threadprocessor

Wanneer u een ideale processoropgeeft, voert de scheduler de thread uit op de opgegeven processor, indien mogelijk. Gebruik de functie SetThreadIdealProcessor om een voorkeursprocessor voor een thread op te geven. Dit garandeert niet dat de ideale processor wordt gekozen, maar biedt een nuttige hint aan de planner. Op systemen met meer dan 64 processors kunt u de functie SetThreadIdealProcessorEx gebruiken om een voorkeursprocessor in een specifieke processorgroep op te geven.

NUMA-ondersteuning

processorgroepen