cpu - 如果 CPU 一直在执行指令,我们如何衡量它的工作量?

标签 cpu cpu-usage cpu-architecture

假设我们有一个虚拟的单核 CPU,带有程序计数器和基本指令集,例如加载、存储、比较、分支、加法、乘法和一些 ROM 和 RAM。开机后,它会执行 ROM 中的程序。

如果说 CPU 的工作是基于它正在执行的指令类型,这是否公平?例如,与 Branch 相比,MUL 操作可能涉及更多的晶体管启动。

但是从外部角度来看,如果时钟速度保持不变,那么可以说 CPU 一直以 100% 的速度运行。

我们究竟如何建立衡量 CPU 工作的范例?是否有某种标准指标可能基于执行的指令类型、CPU 的功耗、要完成的时钟周期数,甚至是访问 RAM 还是 ROM。

相关的第二个问题是程序“停止”意味着什么。通常它只是在无限循环中分支还是 PC 停止并且 CPU 等待中断?

最佳答案

首先,如今 CPU 总是在执行一些代码只是一个近似值。计算机系统具有所谓的 sleep 状态,可以在没有太多工作要做时节省能源。现代 CPU 还可以降低速度以延长电池生命周期。

除此之外,执行“一些工作”和“有用工作”的 CPU 之间存在差异。 CPU 本身无法分辨,但操作系统通常可以。除了一些嵌入式软件,CPU 永远不会运行一个单一的作业,而是一个包含不同进程的操作系统。如果没有有用的进程运行,操作系统将安排“空闲任务”,这主要意味着让 CPU 休眠一段时间(见上文)或只是在一个无用的循环中燃烧 CPU 周期。计算空闲任务花费的时间与常规任务花费的时间的比率给出了 CPU 的业务因子。

因此,在过去的 DOS 时代,当计算机(几乎)只运行一个任务时,它确实总是在做某事。许多应用程序使用所谓的忙等待,如果它们只是想延迟执行一段时间,而不做任何有用的事情。但今天几乎总会有一个智能操作系统可以运行空闲进程,而不是让 CPU 进入休眠状态、降低其速度等。

关于cpu - 如果 CPU 一直在执行指令,我们如何衡量它的工作量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28882690/

相关文章:

c# - CPU使用率在执行过程中变得非常高

java - java应用程序中的高CPU利用率-为什么?

Windows 上的 Python - conhost.exe CPU 使用率

android - 如何在android设备上读取cpu频率

cpu - 普通的 x86 或 AMD PC 是直接从 ROM 运行启动/BIOS 代码,还是先将其复制到 RAM?

javascript - 如何避免 JavaScript VM 被 CPU 绑定(bind)任务阻塞

assembly - 汇编仅在软件中实现吗?

cpu-architecture - 如何确定 SSE 预取指令大小?

x86 - CPU如何处理异步中断?

c - 如何知道 x264 是否使用多处理器 Windows