我在一定程度上了解多线程和任务,但知道在操作系统之外,大多数 Windows 应用程序仅限于使用平均最大值的 1/N CPU。利用率。
这是双核的 50%,4 个 CPU 的 25% 和所有 8 个 CPU 的 12.5%。如果使用 Procexp.exe 取消分配 CPU 或选择偶数或奇数 CPU,这不会改变结果。
我的问题
有什么方法可以将利用率提高到超出此操作系统限制的限制。我理解如果一个人对一个应用程序施加 100% 的压力。操作系统可能会在预期或要求的超时期限内从无响应的硬件 I/O 蓝屏,但即使是 50% 或 75% 也会改善我的结果。
然而,在执行大型任务时,操作系统中的 explorer.exe 等有时可以执行 50% 或更多(?)。
- 通常 CPU 98~99.5% 空闲,只需打开浏览器和 10 个标签(勇敢)
我在 LibreOffice SCALC.exe 上使用带有 16GB RAM 的 Win7 i7-4770S Haswell 3.1GHz 和一个包含 150 万个 CV19 美国数据单元格的电子表格,并进行了搜索/替换 ' 文本前缀以尝试将文本转换为每天的单元格编号日期(从文本到值的一些选项)并且它仍在运行(是的)并且显然我使用了错误的方法。
如果无法更改操作系统利用率,那么我是否应该重写这个问题,将 400 个文本条目转换为日期 '1\20\2020 的值以重新格式化为我的偏好。
- 此文本文件是从 JHU CV19 美国县每日死亡率累积总数的 GitHub 存储库下载的,并使用文本到列的转换导入 SCALC。
SCALC 仍在运行!” ,根据使用 11 个线程的 PERFMON,为 12.5%。
问题始于在 150 万个单元格电子表格中搜索和替换 1 个字符。我选择了“相似性选项”,这是一个错误,但问题不在于 Excel 或 Open Office Apps,许多应用程序是多线程的,但平均限制为 1/N CPU,无法更改。我可以用图像证明这一点,但你们中的一些人会知道这是真的。
其他人不明白这个问题。是的,可以编写或让 Windows 来执行此操作,但不是罐装应用程序。
示例 1 大文件进程的简单启动恢复仅需几秒钟,并达到 20% 以上的峰值。它可以在一秒钟内达到平均超过 12.5% 的峰值,但我认为在内存吞吐量限制时不会持续。(所以我想没有什么可以改善这一点?)
在这里,在 150 万个单元格上搜索将 0 替换为 0 在我截取屏幕截图之前,平均准确率为 12.5%。
这里几乎正好有 1/N 或 12.5% 的 CPU 工作负载专用于具有许多线程的 1 个应用程序。
我可以使用这种架构在 Windows 下的许多其他应用程序上复制这个测试。那么它是架构 - 内存缓存总线有限和任何修复吗?
正如其他人在此论坛上所写,1/N CPU 的有限或 12.50 %
这就是证明。
更多关于多线程 MS App i=仅使用 1/N CPU % 平均 MAX 的证明
更新
使用 QUAttro Pro 安装 WordPerfect 2020 并运行完全相同的多线程进程并在所有 8 个 CPU 上获得完全相同的结果 MAX CPU USE = 1/8 = 12.5%
示例 #4
- Mark Russinovich 的进程资源管理器(又名 PROCMON.exe)再次使用了所有 CPU 但总共只有 1/N 个 CPU 或 12.5% 的多线程进程。它独立于使用少量资源的所有其他进程。
我怀疑这是马克在这里编写多线程的能力。:)(MS研究员)
并非所有任务天生就能够被拆分为能够同时在 CPU 的每个内核上运行的任务。
CPU 中的每个内核都是一个成熟的处理器。它能够维护一个硬件“线程”的执行状态信息。每个核心都有自己的缓存和数据处理,独立于其他所有核心。它们可能共享高速缓存和内存总线,但在其他方面它们是完全独立的。
该线程大致转换为软件中所谓的线程。
您看到的问题是在该软件中执行工作的特定任务本质上是单线程的。
单个线程一次只能在一个内核上执行。在 8 核处理器上,这意味着单个线程最多可以使用处理器的 1/8,或者根据任务管理器的 12.5%。在 1/4 或 25% 的 4 核处理器上。
一个程序可以有很多线程,但这些线程只能处理彼此完全不相关的事情。一个线程可能正在处理更新场景数据,另一个线程可能正在更新 GUI 等等。
线程不能做的是在不相互通信的情况下同时处理完全相同的数据,这就是您所看到的限制。
为了使用多个 CPU 内核,必须将正在完成的任务拆分并分配给多个线程。这种拆分是一个编程问题,由软件工程师来实施。任何给定任务是否是多线程的取决于该任务的复杂性以及它是否可以首先拆分
如果数据完全依赖于以特定方式处理,那么它永远不会使用多个核心。
如果数据可以拆分,但需要更多的工作来拆分和重新合并,那么软件工程师可能会认为这不值得,而是坚持使用一个线程/核心。
如果可以拆分数据并且软件设计为这样做,那么您将看到超过 1 个内核在使用中。
我知道 Excel 支持多核计算的许多任务,但它完全取决于彼此完全不依赖的数据。