Да, я мог бы рассказать вам историю, но вы будете ненавидеть это, и я буду ненавидеть писать это :-)
Короткая версия - Win10 испортил все, что мог, и находится в постоянном состоянии голодающих ядер из-за системной проблемы, известной как переподписка процессора (слишком много потоков, никто не может их обслуживать, что-то задыхается в любой точке, навсегда). Вот почему они отчаянно нуждаются в этих поддельных процессорах, сокращают базовый таймер планировщика до 1 мс и не могут позволить вам парковаться. Это просто опалило бы систему. Откройте Process Explorer и добавьте количество потоков, теперь сделайте математику :-)
API CPU Sets был введен для того, чтобы дать хоть какой-то шанс для борьбы тем, кто знает и имеет время написать код для борьбы со зверем. Вы можете де-факто парковать поддельные процессоры, помещая их в набор процессоров, который вы никому не дадите, и создав набор по умолчанию для передачи его пираньям. Но вы не можете сделать это на клиентских sku-s (технически это может быть просто невозможно), так как ядро перейдет в состояние паники и либо полностью проигнорирует наборы процессоров, либо некоторые другие вещи начнут падать. Он должен защищать целостность системы любой ценой.
Все положение вещей в целом является табу, так как для этого потребуются серьезные переписки, и каждый выберет несерьезные темы и признает, что они все испортили. Гиперпотоки на самом деле должны быть постоянно отключены (они нагревают ядра при реальной нагрузке, ухудшают производительность и дестабилизируют HTM - основная причина, по которой он никогда не стал массовым). Большие магазины SQL Server делают это в качестве первого шага установки, как и Azure. Нет, они запускают серверы с де-факто настройкой клиента, так как им нужно было бы гораздо больше ядер, чтобы осмелиться переключиться. Проблема просочилась в Server 2016.
SQL Server является единственным реальным пользователем наборов ЦП (как обычно :-), 99% продвинутых возможностей Win всегда выполнялись только для SQL Server, начиная с суперэффективной обработки файлов с отображением в памяти, которая убивает людей, пришедших из Linux с тех пор они предполагают различную семантику).
Чтобы безопасно играть с этим, вам понадобится минимум 16 ядер для клиентского компьютера, 32 для сервера (что на самом деле делает что-то реальное :-) Вы должны установить как минимум 4 ядра по умолчанию, чтобы ядро и системные службы едва дышали. но это все равно только двухъядерный эквивалент ноутбука (у вас все еще есть постоянный удушье), что означает 6-8, чтобы позволить системе дышать правильно.
Win10 нужно 4 ядра и 16 ГБ, чтобы едва дышать. Ноутбуки обходятся без 2-х ядерных и 2-х фальшивых «процессоров», если не нужно ничего делать, так как их обычное распределение работы таково, что всегда есть достаточно вещей, которые все равно нужно ждать (длинная очередь на memaloc «очень помогает» :-) ,
Это все равно не поможет вам с OpenMP (или каким-либо автоматическим распараллеливанием), если у вас нет способа явно указать ему использовать ваш набор ЦП (отдельные потоки должны быть назначены для набора ЦП) и ничего больше. Вам все еще нужно установить соответствие процессов, это предварительное условие для наборов процессоров.
Сервер 2k8 был последним хорошим (да, это также означает и Win7 :-). Люди массово загружали ТБ за 10 минут им и SQL Server. Теперь люди хвастаются, что могут загрузить его за один час - под Linux :-) Так что, скорее всего, положение "не там" тоже намного лучше. У Linux были CPU Sets задолго до Win.