-XX: + StressLCM, -XX: + StressGCM Опции для JVM - PullRequest
9 голосов
/ 23 мая 2019

Играя с некоторым кодом jcstress, я заметил два совершенно новых для меня параметра: StressLCM и StressGCM.

Самым первым, что я сделал для меня, был поиск их в самом исходном коде, и хотя я нашел некоторые вещи, все еще неясно, что они на самом деле делают.Я действительно надеялся увидеть некоторые комментарии в исходном коде, которые пролили бы свет, но не повезло.

Я также нашел описание ошибки , где они были добавлены, но объяснение сделалодля меня нет смысла:

Рандомизировать планирование команд в LCM / GCM.

Может кто-нибудь объяснить, что он делает, если это возможно, на простом английском языке?

1 Ответ

12 голосов
/ 23 мая 2019

LCM / GCM расшифровывается как Local Code Motion / Global Code Motion.Чтобы оптимизировать использование ЦП, компилятор может переупорядочивать независимые инструкции без изменения семантики кода.Компилятор пытается найти наиболее оптимальный (с точки зрения производительности) порядок инструкций.Это называется планированием инструкций, и это то, что делают LCM / GCM.

С опциями -XX:+StressLCM / -XX:+StressGCM планирование инструкций работает немного по-другому.Он больше не пытается найти наилучшее расписание, а вместо этого выбирает случайный порядок команд в пределах разрешенных ограничений, сохраняя при этом исходную семантику без изменений.Такое недетерминированное поведение помогает протестировать больше комбинаций перемежения команд, что важно при обнаружении скрытых проблем параллелизма.

...