Perfil de nivel de instrucción: ¿El significado del indicador de instrucción?

Cuando se crea un perfil de código en el nivel de instrucción de ensamblaje, ¿qué significa realmente la posición del puntero de instrucción dado que las CPU modernas no ejecutan las instrucciones en serie o en orden? Por ejemplo, suponga el siguiente código de ensamblaje x64:

mov RAX, [RBX];         // Assume a cache miss here.
mov RSI, [RBX + RCX];   // Another cache miss.             
xor R8, R8;        
add RDX, RAX;           // Dependent on the load into RAX.
add RDI, RSI;           // Dependent on the load into RSI.

¿En qué instrucción pasará la mayor parte del tiempo el puntero de instrucción? Puedo pensar en buenos argumentos para todos ellos:

mov RAX, [RBX] está tomando probablemente 100s de ciclos porque es una falta de caché.mov RSI, [RBX + RCX] También toma 100s de ciclos, pero probablemente se ejecuta en paralelo con la instrucción anterior. ¿Qué significa incluso que el indicador de instrucción esté en uno u otro de estos?xor R8, R8 probablemente se ejecuta fuera de orden y finaliza antes de que finalice la carga de memoria, pero el puntero de instrucción puede permanecer aquí hasta que todas las instrucciones anteriores también estén terminadas.add RDX, RAX genera un bloqueo de tubería porque es la instrucción donde el valor deRAX en realidad se utiliza después de una carga lenta de falta de caché en él.add RDI, RSI También se detiene porque depende de la carga enRSI.

Respuestas a la pregunta(1)

Su respuesta a la pregunta