Huh, ich könnte dir die Geschichte erzählen, aber du wirst es hassen und ich hasse es, sie zu schreiben :-)
Kurze Version - Win10 hat alles vermasselt, was es könnte und ist im ständigen Zustand verhungernder Kerne aufgrund von Systemproblemen, die als CPU-Überbelegung bekannt sind (viel zu viele Threads, niemand kann sie jemals bedienen, irgendetwas verschluckt sich irgendwann für immer). Aus diesem Grund werden diese gefälschten CPU-Prozessoren dringend benötigt, der Timer für den Basis-Scheduler wird auf 1 ms verkürzt und Sie können nichts parken. Es würde nur das System verbrennen. Öffnen Sie den Process Explorer und addieren Sie die Anzahl der Threads. Jetzt müssen Sie rechnen :-)
Die CPU-Sets-API wurde eingeführt, um denjenigen, die wissen und Zeit haben, den Code zu schreiben, um das Tier zu ringen, zumindest eine gewisse Chance zu geben. Sie können fake CPU-s faktisch parken, indem Sie sie in ein CPU-Set legen, das Sie nicht an Dritte weitergeben, und ein Standardset erstellen, um es in Piranhas zu werfen. Auf Client-Sku-s ist dies jedoch nicht möglich (technisch gesehen ist das einfach nicht zu rechtfertigen), da der Kernel in Panikzustand gerät und entweder CPU-Sets vollständig ignoriert oder andere Dinge zum Absturz bringen werden. Es muss die Integrität des Systems um jeden Preis verteidigen.
Der gesamte Stand der Dinge ist im Großen und Ganzen ein Tabu, da dafür umfangreiche Umschreibungen erforderlich wären und jeder das frivole Fad entließ und zugab, dass sie durcheinander geraten. Hyperthreads müssen tatsächlich dauerhaft deaktiviert werden (sie heizen die Kerne unter realer Last auf, verringern die Leistung und destabilisieren HTM - der Hauptgrund, warum es nie zum Mainstream wurde). Große SQL Server-Shops tun dies als ersten Einrichtungsschritt, ebenso Azure. Bing ist es nicht, sie betreiben Server mit De-facto-Client-Setup, da sie viel mehr Kerne benötigen, um den Wechsel zu wagen. Das Problem trat in Server 2016 ein.
SQL Server ist der einzige echte Benutzer von CPU-Sets (wie üblich :-), 99% der fortschrittlichsten Dinge in Win wurden immer nur für SQL Server ausgeführt, angefangen mit einem äußerst effizienten, mit Speicher verknüpften Dateibehandlungsprozess, durch den Linuxbenutzer seither getötet werden sie nehmen unterschiedliche Semantiken an).
Um sicher damit zu spielen, müssten Sie mindestens 16 Kerne für eine Client-Box, 32 für einen Server (das hat tatsächlich etwas Reales :-). Sie müssen mindestens 4 Kerne in die Standardeinstellung setzen, damit Kernel- und Systemdienste kaum atmen können Aber das ist immer noch ein Dual-Core-Laptop-Äquivalent (Sie haben immer noch Würgen), dh 6-8, damit das System richtig atmen kann.
Win10 benötigt 4 Kerne und 16 GB, um kaum zu atmen. Laptops kommen mit 2 Kernen und 2 falschen "CPU-s" davon, wenn nichts zu fordern ist, da ihre übliche Arbeitsverteilung so ist, dass es immer genug Dinge gibt, die sowieso warten müssen (lange Warteschlange auf Memaloc "hilft" viel :-) .
Dies wird Ihnen bei OpenMP (oder jeder automatischen Parallelisierung) immer noch nicht helfen, es sei denn, Sie haben die Möglichkeit, es explizit zur Verwendung Ihres CPU-Sets (einzelne Threads müssen dem CPU-Set zugewiesen werden) und sonst nichts zu sagen. Sie müssen auch noch die Prozessaffinität einstellen, dies ist die Voraussetzung für CPU-Sätze.
Server 2k8 war der letzte gute (ja, das bedeutet auch Win7 :-). Die Leute luden ein TB innerhalb von 10 Minuten mit SQL Server. Jetzt prahlen die Leute, wenn sie es in einer Stunde laden können - unter Linux :-) Es besteht also die Möglichkeit, dass der Zustand "da drüben" auch nicht viel besser ist. Linux hatte CPU-Sets schon lange vor Win.