Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
PREFETCH
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
0F OD |
PREFETCH m8 |
Выбрать из m8 строку данных (не менее 32 байт) в КЭШ данных процессора |
prefetch [ebx] |
0F OD |
PREFETCHW m8 |
Выбрать из m8 строку данных (не менее 32 байт) в КЭШ данных процессора, разрешить изменение данных в КЭШ |
prefetchw [ebx] |
Описание:
Команда 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 экономит цикл, который требуется для изменения состояния КЭШ данных перед модификацией строки.
Операция:
PRELOAD_L1_DATA_CACHE_LINE(mem);
SET_LINE_STATE_TO_EXCLUSIVE; (MESI)
Особые ситуации защищенного режима:
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима реальной адресации:
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru