Algunas preguntas sobre _mm_clflush y _mm_clflushout.
- ¿Cuáles son las principales diferencias entre mmclflush y mmclflushout ?
- ¿Es seguro para hilos realizar el vaciado de páginas inválidas en la caché del CPU, dado que cada hilo vacía diferentes regiones de memoria (que pueden ser originadas desde diferentes núcleos de CPU)?
- Solo para estar seguro, ¿estos comandos son sincrónicos? Es decir, ¿retornan solo después de que la página de caché se haya vaciado en la memoria (si es una página invalidada)?
davy.ai
_mm_clflush y _mm_clflushout
La diferencia principal entre
_mm_clflush
y_mm_clflushout
es que_mm_clflush
limpia una sola línea de caché (es decir, 64 bytes en procesadores x86-64), mientras que_mm_clflushout
limpia todas las líneas de caché asociadas a una página (es decir, 4096 bytes en procesadores x86-64) que incluye la dirección de memoria objetivo. Por lo tanto,_mm_clflushout
es más agresivo y puede causar un tráfico de memoria adicional en comparación con_mm_clflush
.Generalmente, limpiar páginas invalidadas en la caché de la CPU es seguro para hilos, siempre y cuando cada hilo limpie diferentes regiones de memoria que no se superpongan. Sin embargo, si varios hilos limpian la misma región de memoria al mismo tiempo, puede causar problemas de coherencia de caché y afectar negativamente el rendimiento.
Sí, tanto
_mm_clflush
como_mm_clflushout
son comandos síncronos, y solo regresan después de que la página de caché haya sido limpiada en la memoria. Sin embargo, dependiendo de la configuración y carga de trabajo del sistema, el tiempo real de limpieza puede variar y afectar el rendimiento general del programa.