Я работаю над оптимизацией многопоточного приложения в системе Windows с более чем 64 ядрами. Обычно я бы использовал функцию SetProcessAffinityMask, чтобы установить привязку ядер ЦП для всего процесса, но этот подход ограничен системами с числом ядер до 64 из-за ограничения 64-битной маски.
Хотя я знаю о функции SetThreadGroupAffinity, она требует ручной настройки привязки для каждого потока, включая настройку новых потоков после первоначальной настройки. Я ищу метод установки привязки, который можно было бы применять к процессу извне, влияя на все текущие и будущие потоки без необходимости изменять внутренний код процесса для управления этой привязкой.
Вопрос: Существуют ли какие-либо методы или инструменты, которые позволяют настраивать и управлять привязкой ядер ЦП извне к процессу Windows, особенно подходящим для систем с более чем 64 ядрами? Как эти методы могут гарантировать, что настройки сходства применяются ко всем потокам в процессе?
К сожалению, не существует однократного вызова API, который мог бы применить привязку ЦП к многогрупповому процессу.
Многогрупповой процесс — это процесс, который охватывает более 64 логических ядер ЦП и, следовательно, имеет потоки, запланированные для более чем одной группы процессоров . Вы правы в том, что SetProcessAffinityMask и другие старые API Win32 не предназначены для этого. Ядро и более новые API-интерфейсы Win32 предоставляют переменную группы процессоров через GROUP_AFFINITY, чтобы указать, к какой группе процессоров относится битовая маска.
Наборы ЦП, более слабая форма привязки ЦП, являются жизнеспособной альтернативой и также поддерживаются Process Lasso. Однако их поведение менее четко определено, поэтому они могут не достичь вашей цели.