11

在玩一些jcstress代码时,我注意到两个对我来说非常新的参数:StressLCMStressGCM.

对我来说要做的第一件事就是在源代码本身中搜索这些,虽然我找到了一些东西,但仍然不清楚它们实际上做了什么。我真的很希望在源代码中看到一些能够说明问题的注释,但没有运气。

我还发现了添加这些的错误描述,但解释对我来说毫无意义:

在 LCM/GCM 中随机化指令调度。

如果可能的话,有人可以用简单的英语解释他们的工作吗?

4

1 回答 1

16

LCM / GCM 代表本地代码运动/全局代码运动。为了优化 CPU 利用率,编译器可以在不改变代码语义的情况下重新排序独立指令。编译器试图找到最佳(从性能角度)指令顺序。这称为指令调度,这就是 LCM / GCM 所做的。

使用-XX:+StressLCM/-XX:+StressGCM选项,指令调度的工作方式略有不同。它不再试图找到最佳调度,而是在允许的约束内选择随机指令顺序,仍然保持原始语义不变。这种不确定的行为有助于测试更多的指令交错组合,这对于发现微妙的并发问题至关重要。

于 2019-05-23T13:15:45.133 回答