다중 프로세서

여러 프로세서가 있는 컴퓨터는 일반적으로 NUMA(비균형 메모리 액세스) 또는 SMP(대칭 다중 처리)의 두 아키텍처 중 하나를 위해 설계되었습니다.

NUMA 컴퓨터에서 각 프로세서는 다른 프로세서보다 메모리의 일부 부분에 더 가깝기 때문에 메모리의 일부 부분에 대한 메모리 액세스 속도가 다른 부분보다 빨라집니다. NUMA 모델에서 시스템은 사용 중인 메모리에 가까운 프로세서에서 스레드를 예약하려고 시도합니다. NUMA에 대한 자세한 내용은 NUMA 지원을 참조하세요.

SMP 컴퓨터에서 둘 이상의 동일한 프로세서 또는 코어가 단일 공유 기본 메모리에 연결됩니다. SMP 모델에서 모든 스레드를 모든 프로세서에 할당할 수 있습니다. 따라서 SMP 컴퓨터에서 스레드를 예약하는 것은 단일 프로세서가 있는 컴퓨터에서 스레드를 예약하는 것과 비슷합니다. 그러나 스케줄러에는 동시에 실행되도록 스레드를 예약할 수 있도록 프로세서 풀이 있습니다. 일정은 여전히 스레드 우선 순위에 따라 결정되지만 이 항목에서 설명한 대로 스레드 선호도 및 스레드 이상적인 프로세서를 설정하여 영향을 받을 수 있습니다.

스레드 선호도

스레드 선호도 는 특정 프로세서 하위 집합에서 스레드를 강제로 실행합니다. 스레드 선호도 설정은 일반적으로 프로세서 간에 스레드를 효과적으로 예약하는 스케줄러의 기능을 방해할 수 있으므로 방지해야 합니다. 이렇게 하면 병렬 처리로 인해 발생하는 성능 향상이 감소할 수 있습니다. 스레드 선호도의 적절한 사용은 각 프로세서를 테스트하는 것입니다.

시스템은 프로세서 선호도 마스크라는 비트 마스크를 사용하여 선호도를 나타냅니다. 선호도 마스크는 시스템의 최대 프로세서 수 크기이며 비트는 프로세서의 하위 집합을 식별하도록 설정됩니다. 처음에 시스템은 마스크의 프로세서 하위 집합을 결정합니다.

GetProcessAffinityMask 함수를 호출하여 프로세스의 모든 스레드에 대한 현재 스레드 선호도를 가져올 수 있습니다. SetProcessAffinityMask 함수를 사용하여 프로세스의 모든 스레드에 대한 스레드 선호도를 지정합니다. 단일 스레드에 대한 스레드 선호도를 설정하려면 SetThreadAffinityMask 함수를 사용합니다. 스레드 선호도는 프로세스 선호도의 하위 집합이어야 합니다.

프로세서가 64개 이상인 시스템에서 선호도 마스크는 처음에 단일 프로세서 그룹의 프로세서를 나타냅니다. 그러나 스레드 선호도는 프로세스의 선호도 마스크를 변경하는 다른 그룹의 프로세서로 설정할 수 있습니다. 자세한 내용은 프로세서 그룹을 참조하세요.

스레드 이상적인 프로세서

스레드 이상적인 프로세서를 지정하면 스케줄러는 가능한 경우 지정된 프로세서에서 스레드를 실행합니다. SetThreadIdealProcessor 함수를 사용하여 스레드에 대한 기본 프로세서를 지정합니다. 따라서 이상적인 프로세서가 선택된다는 보장은 없지만 스케줄러에 유용한 힌트를 제공합니다. 프로세서가 64개 이상인 시스템에서 는 SetThreadIdealProcessorEx 함수를 사용하여 특정 프로세서 그룹에서 기본 프로세서를 지정할 수 있습니다.

NUMA 지원

프로세서 그룹