Partilhar via


Vários processadores

Computadores com vários processadores são normalmente projetados para uma de duas arquiteturas: acesso não uniforme à memória (NUMA) ou multiprocessamento simétrico (SMP).

Em um computador NUMA, cada processador está mais próximo de algumas partes da memória do que outras, tornando o acesso à memória mais rápido para algumas partes da memória do que outras partes. No modelo NUMA, o sistema tenta agendar threads em processadores próximos à memória que está sendo usada. Para obter mais informações sobre o NUMA, consulte de suporte do NUMA .

Em um computador SMP, dois ou mais processadores ou núcleos idênticos se conectam a uma única memória principal compartilhada. No modelo SMP, qualquer thread pode ser atribuído a qualquer processador. Portanto, o agendamento de threads em um computador SMP é semelhante ao agendamento de threads em um computador com um único processador. No entanto, o agendador tem um pool de processadores, para que ele possa agendar threads para serem executados simultaneamente. O agendamento ainda é determinado pela prioridade do thread, mas pode ser influenciado pela definição da afinidade do thread e do processador ideal do thread, conforme discutido neste tópico.

Afinidade de Thread

de afinidade de thread força um thread a ser executado em um subconjunto específico de processadores. A definição de afinidade de threads geralmente deve ser evitada, pois pode interferir na capacidade do agendador de agendar threads de forma eficaz entre processadores. Isso pode diminuir os ganhos de desempenho produzidos pelo processamento paralelo. Um uso apropriado de afinidade de thread é testar cada processador.

O sistema representa afinidade com uma máscara de bits chamada máscara de afinidade do processador. A máscara de afinidade é o tamanho do número máximo de processadores no sistema, com bits definidos para identificar um subconjunto de processadores. Inicialmente, o sistema determina o subconjunto de processadores na máscara.

Você pode obter a afinidade de thread atual para todos os threads do processo chamando a funçãoGetProcessAffinityMask. Use o função SetProcessAffinityMask para especificar a afinidade de thread para todos os threads do processo. Para definir a afinidade de thread para um único thread, use a funçãoSetThreadAffinityMask. A afinidade de thread deve ser um subconjunto da afinidade do processo.

Em sistemas com mais de 64 processadores, a máscara de afinidade representa inicialmente os processadores em um único grupo de processadores. No entanto, a afinidade de thread pode ser definida como um processador em um grupo diferente, o que altera a máscara de afinidade para o processo. Para obter mais informações, consulte Grupos de processadores.

Processador Thread Ideal

Quando você especifica um processador ideal de thread , o agendador executa o thread no processador especificado quando possível. Use a funçãoSetThreadIdealProcessor para especificar um processador preferencial para um thread. Isso não garante que o processador ideal será escolhido, mas fornece uma dica útil para o agendador. Em sistemas com mais de 64 processadores, você pode usar o função SetThreadIdealProcessorEx para especificar um processador preferencial em um grupo de processadores específico.

Suporte NUMA

Grupos de processadores