![指令,操作和微操作(uop)之间的区别](https://linux22.com/image/1422226/%E6%8C%87%E4%BB%A4%EF%BC%8C%E6%93%8D%E4%BD%9C%E5%92%8C%E5%BE%AE%E6%93%8D%E4%BD%9C%EF%BC%88uop%EF%BC%89%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB.png)
我正在尝试理解与处理器性能相关的复杂术语。
计算机性能的衡量标准FLOPS
是每秒浮点运算次数.FLOPs
本身代表浮点运算。
那么,为什么浮点运算会影响计算机的性能呢?整数运算呢?网上有没有任何资料(官方引用)可以解释这种趋势?我在 Google 上搜索后没有找到任何结果。
MUL
那么,FLOP 中的操作到底是什么意思呢?它是指诸如、ADD
等数学运算吗DIV
?
在这种情况下,操作说明? 如果操作说明类似于ADDPD
,ADDSD
等等,正如我在这里看到的(http://docs.oracle.com/cd/E26502_01/html/E28388/epmpv.html),那么一条指令就可能引发许多内部操作。微操作或者微操作?
我发现维基百科上对微操作的解释没什么帮助。在这里解释清楚这一点的人可能也需要改进维基百科文章 :)
根据 Hennessy/Patterson 的《计算机架构》一书(第 5 版,第 233 页),ARM Cortex-A8(RISC)每个时钟能够执行两条指令。这是否意味着处理器可以在一个周期内执行一条ADDPD
和一条ADDSD
(总共 2 条指令)?
此来源(http://en.community.dell.com/techcenter/high-performance-computing/w/wiki/2329) 规定如下:
当今大多数微处理器每个时钟周期可以执行四 (4) 次 FLOP,即每 Hz 4 次 FLOP。
我认为作者错了。他可能暗示了 4每周期指令数,将自己限制在基于CISC(例如英特尔)的处理器上。这是因为 Haswell 上的某些指令(如 FMA)可以提高性能,从而使处理器可以在每个周期处理更多操作。换句话说,1FMA
操作说明可以翻译为运营。 我对吗?
IPC 代表每周期指令。这里指的是什么指令?处理器退出的指令?使用硬件计数器,我可以计算 CPU 周期数和 的数量INST_RETIRED.ANY
。这是计算 IPC 的正确方法吗?
非常感谢您的回答和评论。希望我的问题能帮助到其他困惑的人 :)
答案1
那么,为什么浮点运算会影响计算机的性能呢?整数运算又如何呢?
浮点运算只是多年来用来衡量计算机性能的几个指标之一。测量浮点运算被认为比整数运算更适用于某些实际应用(例如天气模拟)。如果您正在评估用于数据库应用程序的计算机,您可能会忽略 FLOPS 规范,而关注 IPS(每秒指令数)和 I/O 性能。
那么,FLOP 中的运算到底是什么意思呢?它是指 MUL、ADD、DIV 等数学运算吗?
“操作”是“指令”的执行,该指令是机器代码(即二进制值),或由 FPU(浮点单元)进行的一次计算。(较旧的)FPU 通常与 CPU 和 ALU 异步运行,以免妨碍不依赖于 FP 结果的程序执行。
请注意,没有 FPU 的计算机(大约 1980 年)可以通过 FPU 外设进行升级。实现基本 FP 操作(加、减、乘、除、平方根等)的软件例程 FP 库将被替换为调用 I/O 指令来访问 FPU 外设的库。来自 FPU 的中断将通知 CPU FP 操作已完成。
早期的 PC 结构类似。最初的 IBM PC 使用 Intel 8088 微处理器,该处理器不具备 HW FP 功能。但可以安装 8087 数学协处理器,这样 FP 指令就可以由硬件执行,而不是重定向到软件例程。最终,英特尔将数学协处理器集成到 i486 的 CPU 封装中
在这种情况下,指令是什么?
“指令”不应该是一个模糊的实体。它是一个机器代码或一个处理器的助记符。
那么一条指令可以导致许多内部操作。那是微操作还是 uops?
显然你指的是微编程。
(曾经有一家电脑公司微编程降低一次迭代:纳米编程级别。产品用于 CPU 仿真。)
微编程与应用程序性能实际上无关。也就是说,您通常无法像在纳米程序处理器上那样重写/改进微编程。
这是否意味着处理器可以在一个周期内执行例如 ADDPD 和 ADDSD(总共 2 条指令)?
有点。每个时钟周期执行多条指令需要管道“执行单元”。想象一下(汽车)制造装配线。每个站点都会执行一项特定任务。在装配线(管道)的末端,每次只能完成一辆汽车(指令)。并发是交错的,而不是同步的。
这里提到了哪些说明?
每条指令都是一个机器代码。
换句话说,1 条 FMA 指令可转换为几个操作。我说得对吗?
不,一条指令对应一个操作。