PREFETCHW - Вибрати з пам’яті в КЕШ рядок даних з можливістю їхньої подальшої зміни

Вплив команди на прапори та формати команди:

Вибрати з m8 рядок даних (не менше 32 байт) у КЕШ даних процесора

Вибрати з m8 рядок даних (не менше 32 байт) в КЕШ даних процесора, дозволити зміну даних в КЕШ

Команда PREFETCH/PREFETCHW здійснює попередню вибірку рядка даних КЕШ даних процесора. Адреса рядка визначається значенням m8.

Для процесора AMD-K6-2 розмір рядка, що вибирається, становить 32 байти. Гарантується, що у всіх майбутніх модифікаціях процесорів розмір завантажуваної командою PREFETCH/PREFETCHW рядка буде принаймні 32-байтним.

Якщо вказаний рядок вже присутній в КЕШ даних або виявлено несправність пам'яті, жодного циклу шини не ініціалізується, і команда обробляється як NOP.

У додатках, де мають оброблятися великі набори даних, команда PREFETCH/PREFETCHW може забезпечити попереднє завантаження чергового блоку даних КЕШ під час обробки процесором попереднього блоку. Ця команда дозволяє забезпечити високий паралелізм виконання коду (коли обробка поточного блоку даних завершується, черговий блок доступний в КЕШ даних процесора). Прикладом такого коду може бути обробка вершин при тривимірних перетвореннях, де набір даних про чергову вершину може бути попередньо завантажений в КЕШ даних командою PREFETCH, в той час як обробляється інформація про попередню вершину.

Формат команди PREFETCH/PREFETCHW для процесора AMD-K6-2 визначено так, щоб врахувати можливість його розширення у майбутньому. Повний код команди включає ModR/M-байт. Однак допустиме використання тільки операндів у пам'яті (спроби використання регістрів призводять до створення особливої ​​ситуації #UD). Поле reg байтаModR/M використовується для завдання типу вибірки, яку виконує команда PREFETCH/PREFETCHW. Код 000b у цьому полі ідентифікує команду PREFETCH, код 001b - команду PREFETCHW. Будь-які інші коди зарезервовані і не викликають створення особливої ​​ситуації #UD.

Відмінність команд PREFETCH і PREFETCHW полягає в тому, який стан буде заданий заповненому рядку КЕШ після розміщення в ній даних. Команда PREFETCH визначає стан лінії КЕШ як "виключний" (exclusive). Команда PREFETCHW визначає стан лінії КЕШ як "модифікується". Якщо дані, які завантажуються в КЕШ, повинні змінюватися, то використовується PREFETCHW, інакше PREFETCH. Використання PREFETCHW заощаджує цикл, який потрібно змінити стану КЕШ даних перед модифікацією рядка.