Задержки в конвейереВыше была описана последовательность выполнения команд программы в идеальном случае. Однако в действительности при выполнении некоторых команд может происходить нарушение нормального функционирования конвейера. Наиболее ярким примером команд, вызывающих подобное нарушение, являются команды условного перехода, а также команды типа Test & Skip (проверка и пропуск следующей команды, если результат проверки положительный). В первом случае, если условие, проверяемое командой условного перехода, истинно, выполнение программы будет продолжено с некоторого адреса.А поскольку в конвейере уже произошла выборка команды, расположенной за командой перехода, время выполнения команды перехода увеличивается на один машинный цикл, во время которого происходит выборка команды, расположенной по требуемому адресу. Во втором случае при выполнении команд типа Test & Skip следующая команда не выполняется в случае истинности проверяемого условия. Однако выборка пропускаемой команды уже произошла. Вследствие того что команда не выполняется, в конвейере образуется «дырка», которая заключается в пропуске одного или двух (в зависимости от пропускаемой команды) машинных циклов. Соответственно команды типа Test & Skip выполняются за один машинный цикл, если результат проверки условия отрицателен, и за два или три цикла, если результат проверки положителен. Аналогично команды безусловного перехода RJMP (Relative JuMP) и IJMP (Index JuMP), команды вызова подпрограммы RCALL (Relative CALL) и ICALL (Index CALL) и команды возврата из подпрограмм RET (RETurn) и RETI (RETurn Interrupt) также изменяют содержимое счетчика команд PC (Program Counter), вызывая тем самым переход в памяти программ. В результате выполнения этих команд происходит «разрыв» в работе конвейера, а вследствие этого происходит задержка выполнения программы на несколько (2…4) машинных циклов. Для получения более подробной информации обратитесь к описанию команд, приведенному в 3-й части книги. По той же причине нарушение нормального функционирования конвейера происходит и при возникновении прерывания. Минимальная задержка при этом составляет 4 машинных цикла.
|