Несколько процессоров

Компьютеры с несколькими процессорами обычно предназначены для одной из двух архитектур: неоднородного доступа к памяти (NUMA) или симметричной многопроцессорной обработки (SMP).

На компьютере NUMA каждый процессор ближе к некоторым частям памяти, чем другие, что ускоряет доступ к памяти для некоторых частей памяти, чем для других частей. В модели NUMA система пытается запланировать потоки на процессорах, близких к используемой памяти. Дополнительные сведения о NUMA см. в разделе Поддержка NUMA.

На компьютере SMP два или более идентичных процессора или ядер подключаются к одному общему main памяти. В модели SMP любой поток может быть назначен любому процессору. Таким образом, планирование потоков на компьютере SMP аналогично планированию потоков на компьютере с одним процессором. Однако планировщик имеет пул процессоров, что позволяет планировать параллельное выполнение потоков. Планирование по-прежнему определяется приоритетом потока, но на него можно повлиять, установив сходство потоков и идеальный процессор потоков, как описано в этом разделе.

Сходство потоков

Сходство потоков заставляет поток выполняться в определенном подмножестве процессоров. Как правило, следует избегать настройки сходства потоков, так как это может помешать планировщику эффективно планировать потоки между процессорами. Это может снизить повышение производительности, вызванное параллельной обработкой. Подходящее использование сходства потоков заключается в тестировании каждого процессора.

Система представляет сходство с битовой маской, называемой маской сходства процессора. Маска сходства — это размер максимального числа процессоров в системе, с битами, заданными для идентификации подмножества процессоров. Изначально система определяет подмножество процессоров в маске.

Текущее сходство потоков для всех потоков процесса можно получить, вызвав функцию GetProcessAffinityMask . Используйте функцию SetProcessAffinityMask , чтобы указать сходство потоков для всех потоков процесса. Чтобы задать сходство потоков для одного потока, используйте функцию SetThreadAffinityMask . Сходство потоков должно быть подмножеством сопоставления процессов.

В системах с более чем 64 процессорами маска сходства изначально представляет процессоры в одной группе процессоров. Однако сходство потоков можно задать для процессора в другой группе, что изменяет маску сходства для процесса. Дополнительные сведения см. в разделе Группы процессоров.

Обработчик, идеальный для потока

При указании обработчика, идеального для потока, планировщик запускает поток на указанном процессоре, когда это возможно. Используйте функцию SetThreadIdealProcessor , чтобы указать предпочтительный процессор для потока. Это не гарантирует, что будет выбран идеальный процессор, но дает полезное указание планировщику. В системах с более чем 64 процессорами можно использовать функцию SetThreadIdealProcessorEx , чтобы указать предпочтительный процессор в определенной группе процессоров.

Поддержка NUMA

Группы процессоров