Структурные конфликты

 

Структурные конфликты возникают в том случае, когда аппаратные средства ядра процессора не могут поддерживать все возможные комбинации команд в режиме одновременного выполнения с совмещением.

Причины структурных конфликтов:

1. Не полностью конвейерная структура ядра процессора, при которой некоторые ступени отдельных команд выполняются более одного такта.

Пусть этап выполнения (i+1)-й команды занимает 3 такта. Тогда диаграмма работы конвейера будет иметь вид, представленный в табл. 30.2.

Таблица 30.2. Конвейерная обработка при задержке (i+1)-й команды на этапе ВП

 

Команда Такт
i ВК ДК ЧО ВП ЗР        
i+1   ВК ДК ЧО ВП ВП ВП ЗР  
i+2     ВК ДК ЧО     ВП ЗР
i+3       ВК ДК ЧО     ВП
i+4         ВК ДК ЧО    

 

В этом случае в работе конвейера возникают так называемые "пузыри" (пустые клетки в таблице) в обработке (i+2)-й команды и следующих за ней начиная с такта 6, которые снижают производительность ядра процессора.

Если какой-то блок конвейера вносит задержку, то тормозится работа всего конвейера. Образуемый при этом "пузырь" должен пройти от места своего возникновения до самого конца конвейера (если, например, возникла задержка на ступени считывания команды, то в следующем такте блок декодирования от него ничего не получит, а через 3 такта, соответственно, блок сохранения результатов ничего не получит от блока выполнения). Таким образом, скорость конвейера определяется скоростью самой медленной его ступени.

Этой ситуации можно было бы избежать двумя способами.

Первый предполагает увеличение времени такта до такой величины, которая позволила бы все этапы любой команды выполнять за один такт. Однако при этом существенно снижается эффект конвейерной обработки, так как все этапы всех команд будут выполняться значительно дольше, в то время как обычно нескольких тактов требует выполнение лишь отдельных этапов очень небольшого количества команд.

Второй способ предполагает использование таких аппаратных решений, которые позволили бы значительно снизить затраты времени на выполнение действия, приводящего к появлению "пузырей" (например, использовать матричные схемы умножения). Но это приведет к усложнению схемы ядра процессора и сокращению на кристалле места для реализации других, функционально более важных узлов. Так как представленная в табл. 30.2 ситуация возникает при реализации команд, относительно редко встречающихся в программе, то обычно разработчики ядер процессоров ищут компромисс между увеличением длительности такта и усложнением того или иного устройства ядра процессора.