ocperf.py
- это оболочка для perf
с символическими именами для конкретных событий uarch, таких как load_hit_pre.sw_pf
(засчитывается, когда загрузка по запросу, отправленная на порт загрузки, попадает в буфер заполнения L1D (FB), выделенный для программной предварительной выборки). ocperf.py list
имеет описания, а также имена.
Это, вероятно, полезно для просмотра, но я сам не использовал его, поэтому IDK, если он действительно работает, чтобы быть именно тем, что вам нужно. Обязательно посмотрите список событий (ocperf.py list | less
).
Вам также следует посмотреть на коэффициент промахов L1D; при успешной предварительной выборке, которая опережает нагрузку по запросу, фактические инструкции загрузки должны попасть в L1D. (И простой perf
может отследить это с помощью L1-dcache-load-misses
.)
Для линий измерения, которые были предварительно загружены, но удалены перед использованием, есть l2_lines_out.useless_hwpf
. "Подсчитывает количество строк, которые были предварительно загружены на аппаратном уровне, но не использовались и теперь удалены из кэша L2". l2_lines_out.useless_pref
- это псевдоним для этого; не похоже, что есть подобное событие, которое включает предварительную выборку SW.
Возможно, вам просто нужно посмотреть на частоту промахов L1D; это должно сказать вам, где находится диапазон наилучших точек для расстояния предварительной выборки. Если load_hit_pre.sw_pf
работает так, как я надеюсь, то промахи L1D с низкими счетами для load_hit_pre.sw_pf
означают, что расстояние предварительной выборки слишком велико. (Или то, что запросы предварительной выборки SW отбрасываются по какой-то другой причине, но я думаю, что только запросы предварительной выборки HW отбрасываются, когда существует большая загрузка по запросу).
Аппаратные события perf-counter для хранилищ гораздо более ограничены, чем для загрузок, поэтому, если вы пытаетесь выполнить предварительную выборку для потока только для записи, это будет сложнее измерить. Устройство предварительной выборки HW в L1D может вообще не выполнять предварительную выборку для магазинов, поэтому разные шаблоны доступа для потоков только для записи могут сильно пострадать. См. Также комментарий @ BeeonRope к этому ответу: Предварительная выборка SW для магазинов может помочь, если они попадают в L2, но не в L1D. prefetchw
идеально, но простой prefetcht0
по-прежнему полезен. (prefetchw
работает как NOP на Haswell и ранее.)
См. Также другие ссылки в вики-странице по тегам x86
person
Peter Cordes
schedule
28.12.2017