Fortunatamente, c'è più di un modo per svuotare le cache in modo esplicito.
L'istruzione "wbinvd" ripristina il contenuto della cache modificato e contrassegna le cache vuote. Esegue un ciclo di bus per far sì che le cache esterne scarichino i loro dati. Sfortunatamente, è un'istruzione privilegiata. Ma se è possibile eseguire il programma di test sotto qualcosa come DOS, questa è la strada da percorrere. Questo ha il vantaggio di mantenere l'ingombro della cache del "SO" molto piccolo.
Inoltre, vi è l'istruzione "invd", che invalida le cache senza scaricandole nella memoria principale. Ciò viola la coerenza della memoria principale e della cache, quindi devi prenderti cura di te da solo. Non proprio raccomandato.
Per scopi di analisi comparativa, la soluzione più semplice è probabilmente la copia di un grande blocco di memoria in una regione contrassegnata con WC (combinazione di scrittura) anziché in WB. La regione mappata in memoria della scheda grafica è un buon candidato, oppure puoi contrassegnare una regione come WC da solo tramite i registri MTRR.
Si possono trovare alcune risorse su analisi comparativa routine brevi a Test programs for measuring clock cycles and performance monitoring.
Ohh, sono corretto, pulito, non sapevo di questa istruzione. – Falaina
L'istruzione di wbinvd ha un ordine di 2000-5000 cicli di clock da completare! La maggior parte delle istruzioni richiede in media 2-5. – unixman83