group-telegram.com/reverse13/743
Create:
Last Update:
Last Update:
Наткнулся на забавную штуку.
Есть большой класс — кусок query execution
, в некотором смысле state machine
. Соответственно, в нём есть мембер переменная enum State : int
, по которой делают switch
и в которую делают store
в этом же switch
.
А ещё код был примерно такой, и я заметил, что _unused
не используется — и удалил:
void* ...;
int _unused = 0;
State _state = 0;
void* ...;
Прогнал тесты, все такое. Тесты запускаются в релизе с дебажными ассертами, но на физически известной мне машине (которую я мог зафиксировать).
И тут, собственно, причина, почему я пишу: я заметил, что тесты стали проходить медленнее — процентов на 5-10 от обычного времени (42 vs 46 минут). Ну, подумал, может, совпадение, но решил запустить ещё раз с/без патча. Результаты повторились (к сожалению, это было не единственное изменение в PR).
Пошёл смотреть, какие именно тесты стали медленнее, и заметил, что в половине из них разница в пределах погрешности, но многие тесты кверинга стали заметно медленее.
В общем, методом пристального взгляда я нашёл это место и позапускал с
_unused
и без. И действительно оказалось, что на ryzen 4 (по крайней мере, 7950X) код с чтением и записью 4 байт по адресу с alignment 4 работает лучше, чем с alignment 8.Есть у кого идеи, почему?
Возможно, это какой-то затуп store-to-load forwarding-a, но как-то неочевидно, почему это происходит именно в таком сетапе.
Если что, store-to-load forwarding — это оптимизация в процессорах, когда ты пишешь в память
x
(<= 16
?) байт, а потом читаешь <= x
байт из того же места — можно не ждать завершения записи.Неудивительно, что, как и многие другие оптимизации процессора, она работает не всегда. Например, чтение меньшего числа байт (по крайне мере с ненулевого оффсета) обычно работает медленнее.
Но в данном случае, казалось бы, разницы быть не должно: пишут и читают одинаковое число байт, по одинаковому оффсету.
BY Loser story
Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260
Share with your friend now:
group-telegram.com/reverse13/743