Профилирование на уровне инструкций: значение указателя инструкций?

При профилировании кода на уровне инструкций на ассемблере, что на самом деле означает положение указателя инструкций, учитывая, что современные процессоры не выполняют команды последовательно или по порядку? Например, предположим следующий код сборки 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.

На какую инструкцию будет тратить указатель инструкций большую часть своего времени? Я могу придумать хорошие аргументы для всех них:

mov RAX, [RBX] занимает, вероятно, 100 с циклов, потому что это промах кеша.mov RSI, [RBX + RCX] также занимает 100 с циклов, но, вероятно, выполняется параллельно с предыдущей инструкцией. Что вообще означает, что указатель инструкции находится на одном или другом из них?xor R8, R8 возможно, выполняется не по порядку и завершается до завершения загрузки памяти, но указатель инструкций может оставаться здесь до тех пор, пока все предыдущие инструкции также не будут завершены.add RDX, RAX генерирует остановку конвейера, потому что это инструкция, где значениеRAX фактически используется после медленной загрузки кэша в него.add RDI, RSI также глохнет, потому что это зависит от нагрузки вRSI.

Ответы на вопрос(1)

Ваш ответ на вопрос