Perfil de Nível de Instrução: O Significado do Ponteiro de Instrução?

Ao criar o código no nível de instrução de montagem, o que a posição do ponteiro de instrução realmente significa, já que as CPUs modernas não executam as instruções em série ou em ordem? Por exemplo, suponha o seguinte código de assembly 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.

Em qual instrução o ponteiro de instrução passará a maior parte do tempo? Eu posso pensar em bons argumentos para todos eles:

mov RAX, [RBX] está tomando provavelmente 100s de ciclos porque é um erro de cache.mov RSI, [RBX + RCX] também leva 100s de ciclos, mas provavelmente executa em paralelo com a instrução anterior. O que significa até mesmo para o ponteiro de instrução estar em um ou outro destes?xor R8, R8 provavelmente executa fora de ordem e termina antes que as cargas de memória terminem, mas o ponteiro de instrução pode ficar aqui até que todas as instruções anteriores também sejam concluídas.add RDX, RAX gera uma tenda de oleoduto porque é a instrução onde o valor deRAX é realmente usado após uma carga lenta de cache-miss para ele.add RDI, RSI também empaca porque é dependente da carga emRSI.

questionAnswers(1)

yourAnswerToTheQuestion