Processori multipli

I computer con più processori sono in genere progettati per una di due architetture: accesso alla memoria non uniforme (NUMA) o multiprocesso simmetrico (SMP).

In un computer NUMA ogni processore è più vicino ad alcune parti della memoria rispetto ad altre, rendendo più veloce l'accesso alla memoria per alcune parti della memoria rispetto ad altre parti. Nel modello NUMA il sistema tenta di pianificare i thread nei processori vicini alla memoria in uso. Per altre informazioni su NUMA, vedere Supporto NUMA.

In un computer SMP due o più processori o core identici si connettono a una singola memoria principale condivisa. Nel modello SMP è possibile assegnare qualsiasi thread a qualsiasi processore. Pertanto, la pianificazione dei thread in un computer SMP è simile alla pianificazione dei thread in un computer con un singolo processore. Tuttavia, l'utilità di pianificazione dispone di un pool di processori, in modo che possa pianificare l'esecuzione simultanea dei thread. La pianificazione è ancora determinata dalla priorità del thread, ma può essere influenzata impostando l'affinità di thread e il processore ideale del thread, come descritto in questo argomento.

Affinità thread

L'affinità di thread forza l'esecuzione di un thread in un subset specifico di processori. L'impostazione dell'affinità di thread deve essere in genere evitata, perché può interferire con la capacità dell'utilità di pianificazione di pianificare in modo efficace i thread tra processori. Ciò può ridurre i miglioramenti delle prestazioni generati dall'elaborazione parallela. Un uso appropriato dell'affinità di thread consiste nel testare ogni processore.

Il sistema rappresenta l'affinità con una maschera di bit denominata maschera di affinità del processore. La maschera di affinità è la dimensione del numero massimo di processori nel sistema, con bit impostati per identificare un subset di processori. Inizialmente, il sistema determina il subset di processori nella maschera.

È possibile ottenere l'affinità di thread corrente per tutti i thread del processo chiamando la funzione GetProcessAffinityMask . Usare la funzione SetProcessAffinityMask per specificare l'affinità di thread per tutti i thread del processo. Per impostare l'affinità di thread per un singolo thread, usare la funzione SetThreadAffinityMask . L'affinità thread deve essere un subset dell'affinità del processo.

Nei sistemi con più di 64 processori, la maschera di affinità rappresenta inizialmente i processori in un singolo gruppo di processori. Tuttavia, l'affinità di thread può essere impostata su un processore in un gruppo diverso, che modifica la maschera di affinità per il processo. Per altre informazioni, vedere Gruppi di processori.

Processore ideale thread

Quando si specifica un processore ideale per il thread, l'utilità di pianificazione esegue il thread nel processore specificato, quando possibile. Usare la funzione SetThreadIdealProcessor per specificare un processore preferito per un thread. Ciò non garantisce che il processore ideale verrà scelto, ma fornisce un suggerimento utile per l'utilità di pianificazione. Nei sistemi con più di 64 processori, è possibile usare la funzione SetThreadIdealProcessorEx per specificare un processore preferito in un gruppo di processori specifico.

Supporto NUMA

Gruppi di processori