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

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

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

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