-XX:+StressLCM, -XX:+StressGCM Опции для JVM

Играя с некоторыми jcstress код, я заметил два параметра, которые являются очень новыми для меня: StressLCM а также StressGCM,

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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам