【发布时间】:2019-05-23 10:22:27
【问题描述】:
在玩一些jcstress 代码时,我注意到两个对我来说非常新的参数:StressLCM 和StressGCM。
我要做的第一件事就是在源代码本身中搜索这些内容,虽然我找到了一些东西,但仍不清楚它们实际上做了什么。我真的很希望能在源代码中看到一些能够带来启发的 cmets,但没有运气。
我还找到了添加这些的bug description,但解释对我来说毫无意义:
在 LCM/GCM 中随机化指令调度。
如果可能的话,有人可以用简单的英语解释他们的工作吗?
【问题讨论】:
-
我想 LCM / GCM 代表本地代码运动 / 全局代码运动。编译器可以重新排序独立指令(不改变代码的语义)以优化 CPU 利用率。为了测试更多指令交错组合,给定的“压力”选项使这种重新排序变得不确定。
-
@apangin 默认情况下 重新排序独立指令 不是打开的吗?另外,当您说它们是“不确定的”时-您的意思是代码的语义已更改(可能是错误的)?有点迷茫……
-
是的,指令重新排序(调度)默认开启。这就是 LCM/GCM 所做的。他们试图选择最优化的时间表。 StressLCM/GCM 不会选择最佳调度 - 相反,它们会在允许的约束范围内随机化调度,因此从程序员的角度来看,代码仍然有效。
-
@apangin 太棒了!为什么不让它成为答案?
标签: java jvm jvm-hotspot java-12