CPU 乱序执行代码,是 CPU 硬件级别的机制吗?

2021-03-28 23:57:08 +08:00
 LeeReamond

如题,java 学习过程中的问题。

CPU 乱序执行,是那个级别的优化,CPU 硬件级,还是操作系统如此设计,还是 java 虚拟机如此设计?

如果是 cpu 硬件级别的话,那说明不论什么代码丢进去,cpu 有自动优化执行的能力?

5780 次点击
所在节点    Java
29 条回复
Artbox
2021-03-29 11:45:41 +08:00
1.
CPU 乱序执行 [指令] ,是 CPU 硬件级别的机制吗?
是。
乱序执行 [代码] ,是 CPU 硬件级别的机制吗?
否,由编译器( Java 虚拟机),CPU,共同完成。
2.
编译器 /虚拟机的贡献:
代码产生指令的过程,诸如拆循环,块优化之等因素的影响代码顺序。
得到的指令序列未必能一一对应原代码段落。
CPU 的贡献:
指令序列被 CPU 执行的过程,诸如多发射,乱序执行等因素影响指令的顺序。
CPU 只保证最终提交的执行结果安全即可,取指序列&&提交序列未必能一一对应指令序列。
crackhopper
2021-03-29 14:26:43 +08:00
有内存栅栏,可以做指令执行的同步。不过一般也不用关心乱序的问题。如果到这种级别的关心,编译器各种功能开关,手动拆循环,CPU 扩展指令这些都需要深入研究,还挺复杂的。一般我感觉加速方面,工程上从缓存命中,以及 SIMD 上入手能有不少的优化;算法上,能做的更多一点。
XuanFei990
2021-03-29 14:40:25 +08:00
硬件可以实现
以前看过一些 CPU 芯片的 datasheet,开发手册之类的,有这类的介绍,
Brentwans
2021-03-29 16:47:50 +08:00
CPU 自己控制取指令,当然可以优化了。CPU 不会乱序执行,这个是编译器做的事情。CPU 通常是顺序执行,但是流水线的存在,有指令多发和分支预测等手段来充分利用 CPU 各个部件。
gyf304
2021-03-29 17:50:28 +08:00
@yolee599 不是的
sariya
2021-03-29 19:08:41 +08:00
是硬件级的。CPU 有能力对指令进行并行执行来提高效率(流水线)。但是这个能力的真实效果受实际执行指令排列的不同而不同,所以编译器在编译时就会对尽可能其进行优化,以便 CPU 发挥出它的实力
newmlp
2021-03-29 19:20:32 +08:00
编译器以及 CPU 都可能会对指令进行重排
VYSE
2021-03-29 20:21:40 +08:00
了解下 Intel CPU 之前 Spectre Meltdown 漏洞原理, 能比较好理解这个机制
narutow
2021-05-17 23:43:48 +08:00
编译器和 CPU 都会对没有依赖的指令进行分析后决定是否重排。
1. 当编译器的优化(指令重排,缓存变量)可能会对程序的正确性产生影响时,使用 volatile 阻止优化。
2. 当 CPU 乱序执行无依赖的微指令可能会对程序的正确性产生影响时,使用 barrier 阻止乱序执行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX