Windows® 上的 CPU 核心计数检测

最初发布时间:
Ken Mitchell's avatar
Ken Mitchell

由于 Zen 架构与我们之前的处理器架构 Bulldozer 之间存在架构差异,开发人员在使用 Windows® API 进行处理器和核心枚举时需要格外小心。尤其是在使用这些信息来做出游戏代码中的线程数和调度决策时。因此,正确区分物理核心和逻辑核心至关重要,因为它可能会对性能产生重大影响。

为了帮助您的多线程游戏和应用程序实现最佳性能,我们强烈建议 CPU 核心检测逻辑考虑 CPU 系列 ID,以便单独且适当地处理 Ryzen™ (家族 17h) 和 Bulldozer (家族 15h)。根据您的代码运行的 AMD 处理器家族,我们为希望充分利用可用处理器资源的游戏开发人员提供了不同的建议。

对于当今启用了 SMT 的 Ryzen 处理器,我们发现绝大多数多线程游戏和应用程序在管理多达处理器支持的*逻辑*核心数量的活动线程池时,都能正常运行并实现良好的扩展。然而,我们对少量游戏的经验表明,驱动一个比*物理*核心数量更多的硬件线程池可能会降低性能,这主要是由于多个运行的硬件线程对可用核心资源造成的争用。

但是,对于我们自己上一代的基于 Bulldozer 的处理器设计,我们建议默认线程数等于逻辑处理器核心的数量。我们鼓励其他处理器供应商为软件开发人员提供自己的指导。AMD 不为其他处理器供应商提供指导。

因此,无论处理器或处理器供应商如何,**我们强烈建议您对您的游戏进行广泛的性能分析**,以决定如何为您游戏代码将运行的处理器设计管理线程池。我们提供的示例代码(链接如下)在 Ryzen 处理器方面采取了谨慎的态度,并鼓励您进行性能分析:getDefaultThreadCount() 函数就是为了强调这一点,它返回一个等于 Ryzen 上*物理*处理器核心数量的起始默认计数。

我们提供了代码示例,演示如何在当今的现代处理器上计算推荐的起始默认线程数,以及物理和逻辑核心的数量。该示例代码目前适用于 Windows XP 和 Windows 7,Windows 10 版本即将推出。Windows 10 示例将考虑 CPU 集合如何在游戏模式中使用,这是今年早些时候随 Windows 10 Creators Update 发布的一项新功能。

示例代码和反馈

请前往我们的 CPU 核心数 页面,了解更多信息和 GitHub 上的示例代码链接。

如果您有任何问题或疑问,尤其是关于如何在您的游戏中充分利用我们最新的 Ryzen 和 Threadripper 处理器,请告知我们。

资源

Ken Mitchell's avatar

Ken Mitchell

Ken Mitchell 是 Radeon Technologies Group/AMD ISV Game Engineering 团队的技术员工,他专注于帮助游戏开发人员高效地利用 AMD CPU 核心。此前,他负责自动化和分析 PC 应用程序,以预测未来 AMD 产品的性能。他曾在德克萨斯大学奥斯汀分校学习计算机科学。第三方网站链接仅为方便起见提供,除非明确说明,AMD 对此类链接网站的内容概不负责,且不暗示任何认可。

相关新闻和技术文章

© . This site is unofficial and not affiliated with AMD.