我可以强制 Windows 11 将负载分散到非超线程核心吗?

我可以强制 Windows 11 将负载分散到非超线程核心吗?

我使用的是具有 16 个内核的 AMD Ryzen 7950X。借助同步多线程 (SMT),Windows 11 将其识别为具有 32 个虚拟内核。我的应用程序是一个国际象棋引擎,它受益于多个内核,但无法有效利用虚拟内核。它在 16 个独立的物理内核上运行速度比在 32 个虚拟内核上运行速度更快,因为后者会导致每个虚拟内核由于共享资源而变慢。

以前,在其他 CPU 上,当我运行线程数等于或小于 CPU 核心数的应用程序时,负载会均匀分布在所有物理核心上。但是,使用我的新 7950X,我注意到了不同的行为。当我运行 16 个线程时,Windows 似乎将它们分配给虚拟核心 0-16,这些虚拟核心对应于物理核心 0-7,而核心 8-15 则处于空闲状态。这似乎是 Windows 试图将进程保留在单个核心复合芯片 (CCD) 中,这可能对某些应用程序有益,但对我的应用程序无益。

仅使用一半处理器

结果,我的应用程序的执行速度慢了约 40%,因为它的 16 个线程仅使用 8 个物理核心。

我曾考虑过将进程亲和性设置为在偶数或奇数核心之间交替,但我宁愿不这样做。我的应用程序的其他部分可以从 SMT 中受益,而且每次启动应用程序时都必须更改亲和性是一件很繁琐的事情。

有没有办法修改或禁用此行为,以便更好地利用我的 Ryzen 7950X 的物理核心来满足我的特定用例?

相关内容