Afortunadamente, hay más de una manera para eliminar de manera explícita los cachés.
La instrucción "wbinvd" escribe de nuevo el contenido de caché modificado y marca las cachés vacías. Ejecuta un ciclo de bus para hacer que los cachés externos limpien sus datos. Desafortunadamente, es una instrucción privilegiada. Pero si es posible ejecutar el programa de prueba en algo parecido a DOS, este es el camino a seguir. Esto tiene la ventaja de mantener la huella de caché del "SO" muy pequeña.
Además, existe la instrucción "invd", que invalida las memorias caché sin volviendo a enjuagarlas a la memoria principal. Esto viola la coherencia de la memoria principal y el caché, por lo que debes encargarte de eso. No realmente recomendado.
Para la evaluación comparativa, la solución más simple es probablemente copiar un bloque de memoria grande en una región marcada con WC (combinación de escritura) en lugar de WB. La región de memoria asignada de la tarjeta gráfica es un buen candidato, o puede marcar una región como WC por usted mismo a través de los registros MTRR.
se pueden encontrar algunos recursos sobre la evaluación comparativa de las rutinas cortas en Test programs for measuring clock cycles and performance monitoring.
Ohh, estoy en lo correcto, limpio. No sabía acerca de esta instrucción. – Falaina
¡La instrucción wbinvd toma del orden de 2000-5000 ciclos de reloj para completarse! La mayoría de las instrucciones toman 2-5, en promedio. – unixman83