PREFETCHh

Prefetch Data Into Caches

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
0F 18 /1PREFETCHT0 m8MValidoValidoMover los datos de m8 más cerca del procesador utilizando la pista T0.
0F 18 /2PREFETCHT1 m8MValidoValidoMover los datos de m8 más cerca del procesador utilizando la pista T1.
0F 18 /3PREFETCHT2 m8MValidoValidoMover los datos de m8 más cerca del procesador utilizando la pista T2.
0F 18 /0PREFETCHNTA m8MValidoValidoMover los datos de m8 más cerca del procesador utilizando la pista NTA.
0F 18 /7PREFETCHIT0 m8MValidoNo validoMover el código de la dirección relativa más cerca del procesador usando la pista IT0.
0F 18 /6PREFETCHIT1 m8MValidoNo validoMover el código de la dirección relativa más cerca del procesador usando la pista IT1.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

M

  1. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Coste medido

Sin medir: no se ejecuta en procesadores de 64 bits.

Descripción

Señala la línea de datos o código (tetos de instrucciones) de la memoria que contiene el byte especificado con el operando de origen a una ubicación en la jerarquía de caché especificada por una pista de localización:

una elección específica para la aplicación.

en un lugar cercano al procesador, minimizando la contaminación de caché.

jerarquía de caché.

El operando de origen es un byte ubicación de memoria. (Las pistas de la localidad se codifican en la instrucción del nivel de la máquina utilizando bits 3 a 5 del byte ModR/M.) Algunas pistas de localidad pueden prefetch sólo para direcciones de memoria relacionadas con RIP; ver detalles adicionales a continuación. La dirección a prefetch es NextRIP + desplazamiento de 32 bits, donde NextRIP es el primer byte de la instrucción que sigue la instrucción prefetch en sí.

Si la línea seleccionada ya está presente en la jerarquía de caché a un nivel más cercano al procesador, no se produce movimiento de datos. Se ignoran las prefetches de memoria incacheable o WC.

La instrucción PREFETCHh es simplemente una pista y no afecta el comportamiento del programa. Si se ejecuta, esta instrucción mueve los datos más cerca del procesador en previsión del uso futuro.

La aplicación de consejos locales prefetch depende de la implementación y puede ser sobrecargada o ignorada por una implementación del procesador. La cantidad de datos o líneas de código prefetched también depende de la implementación del procesador. Sin embargo, será un mínimo de 32 bytes. En la sección 7.4 de Intel(R) 64 y el manual de referencia de optimización de arquitecturas IA-32 se describen detalles adicionales de los consejos de localización dependientes de la implementación.

Cabe señalar que los procesadores son libres de buscar y guardar datos especulativos de las regiones de memoria del sistema que se asignan un tipo de memoria que permite lecturas especulativas (es decir, los tipos de memoria WB, WC y WT). A

La instrucción PREFETCHh se considera un indicio de este comportamiento especulativo. Debido a que esta captura especulativa puede ocurrir en cualquier momento y no está vinculada a la ejecución de la instrucción, una instrucción PREFETCHh no se ordena con respecto a las instrucciones de la cerca (MFENCE, SFENCE y LFENCE) o referencias de memoria bloqueadas. Una instrucción de PREFETCHh también no está ordenada con respecto a las instrucciones de CLFLUSH y CLFLUSHOPT, otras instrucciones de PREFETCHh, o cualquier otra instrucción general. Se ordena con respecto a instrucciones de serialización como CPUID, WRMSR, OUT y MOV CR.

PREFETCHIT0/1 se puede utilizar en modo de 64 bits con abordaje relacionado con RIP; permanecen NOPs de otra manera. Para un rendimiento óptimo, las direcciones utilizadas con estas instrucciones deben ser el byte inicial de una instrucción real.

PREFETCHIT0/1 instrucciones son enumeradas por CPUID.07H.01H:EDX.PREFETCHI[14].Las codificaciones permanecen NOP en procesadores que no enumeran estas instrucciones.

Operación

FETCH (m8);

Intel C/C++ compilador intrínseco

void _mm_prefetch(char *p, int i) The argument "*p" gives the address of the byte (and corresponding cache line) to be prefetched. The value "i" gives a constant (_MM_HINT_T0, _MM_HINT_T1, _MM_HINT_T2, _MM_HINT_NTA, _MM_HINT_IT0, or _MM_HINT_IT1) that specifies the type of prefetch operation to be performed.;

Excepciones numéricas

None.

Excepciones

Modo real
#UDSi se utiliza el prefijo LOCK.
Modo protegido
#UDSi se utiliza el prefijo LOCK.
Modo virtual-8086
#UDSi se utiliza el prefijo LOCK.
Modo de compatibilidad
#UDSi se utiliza el prefijo LOCK.
Modo de 64 bits
#UDSi se utiliza el prefijo LOCK.

Fuentes