PREFETCHW - Изберете линия с данни от паметта в CACHE с възможност за последваща промяна

Влияние на командата върху командните флагове и формати:

Извлечете низ от данни от m8 (най-малко 32 байта) в кеша за данни на процесора

Изберете линия за данни от m8 (поне 32 байта) към кеша за данни на процесора, позволете промяна на данните в кеша

Инструкцията PREFETCH/PREFETCHW извлича предварително ред от данни в кеша за данни на процесора. Адресът на избрания ред се определя от стойността на m8.

За процесора AMD-K6-2 избраният размер на низ е 32 байта. Гарантирано е, че при всички бъдещи модификации на процесора размерът на низа, зареден от командата PREFETCH/PREFETCHW, ще бъде поне 32 байта.

Ако даденият ред вече присъства в кеша за данни или се открие повреда в паметта, не се инициализира цикъл на шината и инструкцията се обработва като NOP.

В приложения, където трябва да се обработват големи набори от данни, инструкцията PREFETCH/PREFETCHW може предварително да зареди следващия блок от данни в кеша, докато процесорът обработва предишния блок. Тази команда позволява висок паралелизъм на изпълнение на код (когато обработката на текущия блок от данни приключи, следващият блок вече е наличен в кеша на данни на процесора). Пример за такъв код е обработката на върхове по време на 3D трансформации, където наборът от данни за следващия връх може да бъде предварително зареден в кеша за данни с командата PREFETCH, докато информацията за предишния връх се обработва.

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

Разликата в работата на командите PREFETCH и PREFETCHW е в какво състояние ще бъде дадено на запълнения ред на кеша, след като данните бъдат поставени в него. Командата PREFETCH дефинира състоянието на реда на кеша като "изключително". Командата PREFETCHW дефинира състоянието на реда на кеша като "променимо". Ако данните, които се зареждат в кеша, трябва да се променят, тогава се използва PREFETCHW, в противен случай PREFETCH. Използването на PREFETCHW записва цикъла, който е необходим за промяна на състоянието на кеша за данни, преди да актуализирате реда.