Шинные циклы и конвейерная обработка команд, страница 3

Приостановка конвейера может вызываться также вследствие задержки поступления очередной команды из памяти. Возможная причина такой задержки – промах при попытке выборки команды из кэш памяти. Конфликты этого типа называются конфликтами по управлению. Рис.VIII.3 иллюстрирует функционирование конвейера в случае промаха при выборке команды из кэш памяти.

Команда К1 выбирается из кэш памяти в первом такте и обрабатывается обычным образом, проходя последовательно через все ступени конвейера без задержки. В соответствии с логикой работы конвейера, на втором такте производится выборка из кэш памяти команды К2. Но при этом произошел промах обращения к кэш L1, т.е. в кэш L1 требуемой команды не оказалось и необходимо произвести подкачку строки с этой командой из кэш L2, или из основной памяти. В связи с этим, работа блока выборки команд приостанавливается, в конкретном случае на три такта, пока требуемая команда не зафиксируется в буферной памяти на выходе этого блока. Следовательно, команда К2 появляется в буфере Б1 в конце пятого такта. С этого момента возобновляется нормальная работа конвейера.

Рис.VIII.3   Иллюстрация простоя конвейера, вызванного промахом

               при обращении к кэш памяти на этапе (ступени) выборки

               второй команды.

а) Этапы выполнения команды на последовательных тактах.

б) Действия, выполняемые на ступенях конвейера во время

     последовательных тактов.

На рис.VIII.3 б) иллюстрируется происходящий в конвейере процесс, в случае промаха при обращении к кэш памяти и показано, какие операции выполняются во время каждого такта на ступенях конвейера. Из рисунка видно, что во время тактов 3…5 простаивает блок декодирования, во время тактов 4…6 – блок исполнения команды, а во время тактов 5…7 – блок записи (сохранения).

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

К конфликтам по управлению относятся также приостановки конвейера, возникающие при появлении команд безусловных и условных переходов. Временные потери, понесенные из-за команды перехода, называют накладными расходами перехода.

 Рассмотрим случай приостановки конвейера при появлении команды безусловного перехода. Иллюстрация поведения 4-х ступенчатого конвейера в случае, когда адрес перехода вычисляется на ступени исполнения – И2, изображена на рис.VIII.4. После вычисления адреса перехода, необходимо осуществить удаление команд К3 и К4, а так же выбор команды  Кi  на такте 5. Поэтому, в рассматриваемом случае, накладные расходы перехода составляют два такта.

Для сокращения времени простоя конвейера, у современных процессоров, в блоке выборки команд имеется специальная подсистема, предназначенная для быстрого выявления команд перехода и вычисления их целевых адресов. Эта подсистема позволяет, и выявлять команды переходов и вычислять адреса передачи управления на ступени декодирования - Д. Работа 4-х ступенчатого конвейера в случае, когда целевой адрес перехода определяется на ступени декодирования, иллюстрирована на рис.VIII.5.

Как следует из приведенной схемы рис.VIII.5, в этом случае, накладные расходы перехода составит один такт.

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

Рис.VIII.4.  Иллюстрация работы 4-х ступенчатого конвейера при

                 выполнении команды безусловного перехода, в случае, когда

                 адрес перехода  вычисляется на ступени исполнения.

Рис. VIII.5  Иллюстрация работы 4-х ступенчатого конвейера, при

                выполнении команды безусловного перехода, в случае, когда

                адрес перехода вычисляется на ступени декодирования.

А статистические исследования показывают, что команды переходов в типичных программах составляют около 20% общего количества команд.

Поэтому в современных процессорах, с блоком выборки в тесном контакте работает специальный блок предсказания ветвлений, который, используя специально разработанные алгоритмы, позволяет уже на этапе выборки команды условного перехода, с большой степенью вероятности (до 90 % и даже выше) предсказать адрес перехода.

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

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

Следует отметить, что «классическим» считается пятиступенчатый конвейер, в котором в отличие от рассмотренного, выделяется отдельно ступень выборки операндов. Однако в современных процессорах эти пять основных ступеней конвейера каждая включает несколько дополнительных  ступеней, на которых выполняются более мелкие  микрооперации, на которые можно разделить основные операции, реализуемые на основной ступени. Такая организация вычислений называется суперконвейерной.  Так, например, у современных процессоров длина конвейера составляет 12 - 16 ступеней (а у процессоров с архитектурой NetBurst достигала 31 ступени!) Это даёт возможность осуществлять более быстрый переход со ступени на ступень и,  следовательно, повысить тактовую частоту, что ведет к увеличению производительности процессора.