vpro procesador e8400 e7500 duo caracteristicas bueno c assembly x86 benchmarking microbenchmark

procesador - ¿Vaciar la tubería de instrucciones de Intel Core 2 Duo?



intel core 2 vpro (1)

Que yo sepa, no hay instrucciones que específicamente "drenen" la tubería. Esto se puede lograr fácilmente usando una instrucción de serialización.

CPUID es una instrucción de serialización, lo que significa exactamente lo que está buscando. Cada problema de instrucción antes de que se garantice su ejecución antes de la instrucción CPUID.

Entonces, hacer lo siguiente debería tener el efecto deseado:

cpuid rdtsc # stuff cpuid rdtsc

Pero, aparte, no te recomiendo que hagas esto. Sus "cosas" aún pueden verse afectadas por muchas otras cosas fuera de su control (como cachés de CPU, otros procesos que se ejecutan en el sistema, etc.) y nunca podrá eliminarlas todas. La mejor forma de obtener estadísticas de rendimiento precisas es realizar la (s) operación (es) que desea medir al menos varias millones de veces y promediar el tiempo de ejecución del lote.

Editar: la mayoría de las referencias de instrucciones para CPUID mencionarán sus propiedades de serialización, como el apéndice B manual de NASM .

Edición 2 : También podría querer echarle un vistazo a esta pregunta relacionada .

Estoy escribiendo un código de micro-benchmarking para algunas operaciones muy cortas en C. Por ejemplo, una cosa que estoy midiendo es cuántos ciclos se necesitan para llamar a una función vacía dependiendo de la cantidad de argumentos pasados.

Actualmente, estoy utilizando el tiempo de una instrucción RDTSC antes y después de cada operación para obtener el conteo cíclico de la CPU. Sin embargo, me preocupa que las instrucciones emitidas antes del primer RDTSC puedan ralentizar las instrucciones reales que estoy midiendo. También me preocupa que la operación completa no esté completa antes de que se emita el segundo RDTSC.

¿Alguien sabe de una instrucción x86 que obliga a todas las instrucciones en vuelo a cometer antes de que se emitan nuevas instrucciones? Me han dicho que CPUID podría hacer esto, pero no he podido encontrar ninguna documentación que lo diga.