我注意到,对于任何长时间运行的单线程任务,我的家用 PC 将全部使用分配给整个进程的单个逻辑核心。但是,对于完全相同的进程,我的工作 PC 在所有内核之间共享负载(每个内核轮流运行单线程进程)。
两台电脑都运行 Windows 10。我的家用电脑有不同的 CPU 和不同的主板(华硕 ROG 第 11 版)。
这似乎适用于任何进程,但我刚刚测试的示例是我编写的 R 脚本。两台运行完全相同的 R 脚本、相同版本的 R 的 PC 具有不同的 CPU 负载共享方法。更糟糕的是,我的家用 PC 似乎总是将 CPU0 用于此类事情。
我希望有一个 BIOS 设置可以应用到我的家用 PC 上,让它均匀地分担负载。在那儿?
Eug*_*eck 26
将线程调度到内核是一门艺术,而且非常困难。这与现代多核 CPU 管理其热分布的方式有关。根据具体型号,CPU 可能会或多或少地执行以下一项或多项操作:
这意味着,对于单线程工作负载(如R
脚本),最佳策略变化很大:
无论调度程序选择什么,您都应该相信它比任何人都做得更好。
Kel*_*ari 13
不能。计算机的 BIOS 可能能够控制启用或禁用哪些 CPU 内核以及内核的速度,但它无法控制在其上执行的内容。程序及其线程的执行由操作系统控制。
现在至于为什么您的两台计算机的行为不同,这是一个完全不同的问题。它可能是您的操作系统设置或 R 配置。这需要在不同的问题中提出,并且需要有关您的硬件和软件配置的更多详细信息。
我还想指出,它仅在一个内核上运行没有任何问题。运行程序就是它的设计目的。也许,您的工作计算机正在运行更多的并发任务并且必须处理 CPU 使用情况。可能是您的家用计算机具有更快的内核,并且无需将线程交换到其他内核。
Cor*_*ias 11
我认为最有可能的罪魁祸首是您的家用计算机正在利用 Windows 10 调度程序中的一项功能,即众所周知的“首选核心”支持,该功能将高性能核心优先于低性能核心。在 2018 年之前,通常可以信任桌面 CPU 以相同的速度运行线程,无论您将其放在哪个核心上。即使一个内核理论上能够在给定电压下以比另一个内核更高的频率运行,CPU 的设计也不允许这样做。
直到 2018 年 AMD Zen+ Ryzen CPU 的出现,这种情况的改变才变得普遍。有了这些模型,AMD 开始允许具有混合质量内核的 CPU 提升到不同的时钟频率,具体取决于哪些内核处于负载状态。当调度程序将线程交换到每个内核时,无论性能配置如何,这在很大程度上变得无效。AMD 的架构将内核分成称为“CCX”的组,从而加剧了性能损失;在 CCX 中将线程从一个内核传输到另一个内核比在不同的 CCX 之间传播线程要快。
Intel 的“Extreme Edition”CPU 也有这种明确的混合性能支持。他们将其称为Intel Turbo Boost Max Technology 3.0。英特尔表示,支持此功能的最早版本的 Windows 10 是“RS5”,似乎是 1809。
借助英特尔® Turbo Boost Max 技术 3.0,通过识别处理器最快的内核并将最关键的工作负载分配给它们,优化了轻线程性能。
直到 2019 年,所有版本的 Windows 都不知道这些事实,并且在 AMD CPU 的所有物理内核上均等地调度线程。Windows 10 版本 1903 包含一个更新的调度程序,它知道 AMD 的 CCX 单元并尝试将线程保持在同一单元内。关联
这些改进旨在对仅使用几个内核的任务产生特殊影响。线程现在将更少地在单个 CCX 之间来回切换。
Windows 10 版本 1909 对调度程序进行了进一步改进,现在使其能够在一项称为“首选 CPU 核心优化”的功能中了解混合性能核心情况。关联
在最近的 Windows Insider 博客文章中,微软表示 Windows 10 19H2 将包括关于如何将指令分发到这些受欢迎的内核的优化。
我承认,我对这个时间线的理解不是 100% 确定的,并且可能在早期版本中使用了偏爱的核心,但要找到关于此的具体信息却出奇地困难。大多数新闻帖子似乎都同意“首选核心”支持对 1909 年来说是全新的,尽管该语言暗示它存在于早期版本中。
自2011 年以来,ARM 体系结构实际上明确支持这种称为“big.LITTLE”的混合性能配置。在 ARM 上运行的 Windows 10 版本于2017年发布,并且从一开始或至少到2018 年就包含了对 big.LITTLE 的支持。这似乎与添加对我们现代 Intel 和 AMD 情况的支持非常吻合。
顺便说一句,逻辑核心仅在需要时才会被排除,因为它们被停放,而不是因为调度程序本身了解它们。关联
Core Parking 仅在 Windows Server 2008 R2 上受支持。但是,Core Parking 算法和基础架构还用于平衡 Windows 7 客户端系统上的逻辑处理器与包含英特尔超线程技术的处理器之间的处理器性能。
归档时间: |
|
查看次数: |
4948 次 |
最近记录: |