В контексте конвейера ЦП потенциально может читать и запускать инструкцию на каждом цикле. Таким образом, поскольку CPI связан с пропускной способностью выполнения, без каких-либо данных или опасности управления, создающей задержку, мы бы посчитали, что каждая инструкция занимает цикл.
Это, очевидно, неправильно, поскольку для выполнения инструкции требуется несколько циклов, но программа с N >> 1 инструкциями займет N циклов, и мы можем считать, что количество циклов на инструкцию равно 1.
Теперь, что происходит, когда у нас происходит остановка из-за задержки доступа к памяти, задержки перехода или чего-то еще? Из-за этого срыва у нас больше не будет 1 инструкции за цикл. Во время остановки конвейер будет заморожен или будет получена неправильная инструкция, и общий результат - потеря процессора для процессора.
По этой причине мы считаем, что инструкция, которая создает 1 цикл, останавливается за последние 2 цикла, что касается вычисления CPI. Точно так же, если есть остановка с двумя циклами, мы считаем, что инструкция - это 3 цикла и так далее.
Предположим, что 50% инструкций ld создают срыв, ld без опасности будет иметь «длительность» 1 цикла, а при срыве «duration» - 2 цикла, поэтому у нас в среднем 1,5 цикла для лд.
Предположим также, что из-за задержки ветвления ветвления составляют 2 цикла.
Если другие инструкции состоят из 1 цикла, 20% команд являются ld, а другие 20% являются ветвями, у нас есть
ИПЦ = 0,20 * 1,5 + 0,20 * 2 + 0,6 * 1 = 1,3 цикла на инструкцию.