Предварительная выборка программного обеспечения через границу страницы на x86

Насколько я понимаю, аппаратная предварительная выборка никогда не пересекает границы страницы. Мне интересно, имеет ли программная предварительная выборка такое же ограничение, т.е. могу ли я использовать программную предварительную выборку, чтобы избежать будущей ошибки TLB. От поиска вокруг, это кажется возможным, но я не мог найти ничего определенного в документации, поэтому ссылка была бы хорошей.

Я особенно интересуюсь Nehalem, Sandy Bridge и Westmere.

2 ответа

Согласно справочному руководству Intel по оптимизации, оно зависит от процессора. Из раздела 7.4.3:

Есть случаи, когда PREFETCH не будет выполнять предварительную выборку данных. Они включают:

  • PREFETCH вызывает промах DTLB (Lookaside Buffer для трансляции данных). Это относится к процессорам Pentium 4 с сигнатурой CPUID, соответствующей семейству 15, модели 0, 1 или 2. PREFETCH разрешает пропуски DTLB и извлекает данные на процессорах Pentium 4 с сигнатурой CPUID, соответствующей семейству 15, модели 3.
  • Доступ к указанному адресу, который вызывает ошибку / исключение.

Предварительная выборка программного обеспечения может или не может избежать пропусков TLB, в зависимости от процессора. Он не будет извлекать данные, если это приведет к ошибке страницы.

Если вы хотите избежать ошибок TLB, вы можете выполнить фиктивное чтение для загрузки данных вместо инструкции предварительной выборки. Это может привести к обмену ошибкой на странице, что может быть как хорошим, так и плохим, в зависимости от вашего варианта использования.

В современных процессорах (Nehalem, Sandy Bridge и Westmere) предварительная выборка программного обеспечения действительно запускает поиск TLB.

Из руководства по оптимизации Intel: (раздел 7.3.3)

В более старых микроархитектурах PREFETCH, вызывающий промах Data Transfer Lookaside Buffer (DTLB), будет отброшен. В процессорах, основанных на Nehalem, Westmere, Sandy Bridge и более новых микроархитектурах, процессорах Intel Core 2 и процессорах Intel Atom, PREFETCH, вызывающий пропадание DTLB, может быть получен через границы страницы.

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