Huh, eu poderia contar a história, mas você vai odiá-la e eu vou odiar escrever: -)
Versão curta - O Win10 estragou tudo o que podia e está em estado perpétuo de núcleos famintos devido a um problema sistêmico conhecido como excesso de assinatura de CPU (muitos segmentos, ninguém pode atendê-los, algo está sufocando a qualquer momento, para sempre) . É por isso que ele precisa desesperadamente dessas falsas CPUs, encurta o temporizador do agendador básico para 1 ms e não pode deixar que você estacione nada. Seria apenas queimar o sistema. Abra o Process Explorer e adicione o número de threads, agora faça as contas: -)
AAPI dos conjuntos de CPU foi introduzida para dar pelo menos alguma chance de aqueles que sabem e têm tempo para escrever o código para lutar contra a besta. Você pode de fato estacionar CPU-s colocando-os em um CPU-Set que você não vai dar a ninguém e criar um padrão para jogá-lo em piranhas. Mas você não pode fazê-lo em skus do cliente (você poderia tecnicamente, ele simplesmente não seria honrado) já que o kernel faria um estado de pânico e ou ignora totalmente os Conjuntos de CPU ou algumas outras coisas vão começar a travar. Tem que defender a integridade do sistema a qualquer custo.
Todo o estado de coisas é em grande parte um tabu, uma vez que exigiria grandes reescritas e todo mundo abatendo o não de fios frívolos e admitindo que eles estragaram tudo. Na verdade, os hyperthreads precisam ser permanentemente desativados (eles aquecem os núcleos sob carga real, degradam o desempenho e desestabilizam o HTM - a principal razão pela qual ele nunca se tornou mainstream). As grandes lojas do SQL Server estão fazendo isso como uma primeira etapa de configuração e o Azure também. O Bing não é, eles executam servidores com a configuração de cliente de fato, já que precisariam de muito mais núcleos para se atrever a mudar. O problema foi filtrado para o Server 2016.O SQL Server é o único usuário real dos Conjuntos de CPU (como de costume :-), 99% dos recursos avançados no Win sempre foram feitos apenas para o SQL Server, começando com manipulação de arquivos mapeada de memória super eficiente que mata as pessoas que chegam do Linux, uma vez que assumem uma semântica diferente).
Para jogar com segurança, você precisaria de 16 núcleos min para uma caixa de cliente, 32 para um servidor (que realmente faz algo real :-) Você precisa colocar pelo menos 4 núcleos no conjunto padrão para que os serviços do kernel e do sistema mal consegue respirar, mas ainda é apenas um equivalente de laptop de dois núcleos (você ainda tem asfixia perpétua), o que significa 6-8 para permitir que o sistema respire corretamente.
O Win10 precisa de 4 núcleos e 16 GB para respirar mal. Laptops se safam com 2 núcleos e 2 "CPU-s" falsos, se não há nada exigente a fazer, já que a distribuição de trabalho é tão grande que sempre há coisas suficientes para esperar (fila longa no memaloc "ajuda muito" :-) .
Isto ainda não irá ajudá-lo com o OpenMP (ou qualquer paralelização automática) a menos que você tenha uma maneira de explicitamente usar o seu CPU Set (encadeamentos individuais tenham que ser atribuídos ao CPU Set) e nada mais. Você ainda precisa definir o conjunto de afinidades do processo, é pré-condição para os Conjuntos de CPU.
O servidor 2k8 foi o último bom (sim, isso significa Win7 também :-). As pessoas estavam carregando um TB em 10 minutos com ele e com o SQL Server. Agora as pessoas se gabam se podem carregá-lo em uma hora - no Linux :-) Então, as chances são de que o estado das coisas não seja muito melhor "lá" também. O Linux tinha o CPU Sets antes do Win.