Программирование на JAVA

Пример структурного конфликта приведен на рис. 9.5. Показано, как на 4-ступенчатом конвейере выполняется команда

Load R2,X(R1)

На шаге Е2 такта 4 вычисляется адрес памяти X+[R1], по которому происхо­дит обращение к памяти на такте 5. Прочитанный из памяти операнд на такте 6 записывается в регистр R2. Это означает, что шаг выполнения этой команды за­нимает два такта (4 и 5). В результате конвейер приостанавливается на один такт, поскольку обеим командам, I2 и I3, на такте 6 требуется доступ к регистровому файлу. И хотя в наличии имеются и команды и данные, конвейер приостанавли­вается из-за того, что единственный аппаратный ресурс, регистровый файл, не способен одновременно обрабатывать две операции. Если бы у регистрового фай­ла было два входных порта, он смог бы обработать за один прием две операции за­писи, и конвейер бы не остановился. В общем случае для предотвращения струк­турных конфликтов нужно, чтобы в микросхеме процессора было достаточное количество аппаратных ресурсов.


Рис. 9.5. Воздействие команды загрузки на работу конвейера

Важно понимать, что конвейерная обработка команд не приводит к ускорению выполнения каждой отдельной команды


<< назад вперед >>