Конфликты по управлению возникают при выполнении команд переходов и других команд, изменяющих значение счетчика команд (регистра номера команды).
Суть конфликтов этой группы наиболее удобно проиллюстрировать на примере команд условного перехода. Пусть в программе, представленной в табл. 30.1 (i+1)-я команда является командой условного перехода, формирующей адрес следующей команды в зависимости от результата выполнения i-й команды.
Команда с номером i завершит свое выполнение в такте 5. В то же время команда условного перехода уже в такте 3 должна прочитать необходимые ей признаки, чтобы правильно сформировать адрес следующей команды. Если конвейер имеет большую длину (например, 20 ступеней), то промежуток времени между формированием признака результата и тактом, где он анализируется, может быть еще больше.
Простейший способ разрешения этой ситуации - использование так называемого метода выжидания. Он заключается в блокировке (замораживании) операций в конвейере путем блокировки выполнения любой команды, следующей за командой условного перехода, до тех пор, пока не станет известным направление перехода. Привлекательность такого решения заключается в его простоте. Главный недостаток - резкое уменьшение преимуществ конвейерной обработки. В инженерных задачах примерно каждая шестая команда является командой условного перехода, поэтому приостановки конвейера при выполнении команд переходов до определения истинного направления перехода существенно скажутся на производительности процессора.
Можно несколько улучшить эту ситуацию, используя схему "задержанных переходов". При этом на стадии компиляции компилятор таким образом создает получаемую объектную программу, чтобы сделать команды, следующие за командой перехода, действительными и полезными (рис. 30.1).
Рис. 30.1. Организация задержанного перехода
Слот задержки (временной интервал) заполняется независимой командой, находящейся перед командой условного перехода. Эта команда выполняется за то время, пока ядро процессора формирует истинное условие, по которому должно быть определено направление выполнения программы. Одной из основных трудностей в этом подходе является определение точного времени выполнения команды, вносимой в слот задержки. Аппаратура должна гарантировать реальное выполнение этих команд перед выполнением собственно перехода.