Основные особенности МК. Понятие микроконтроллера. Классификация микропроцессоров. 8-разрядные МК, страница 10

Согласно статистическим данным, длина линейного участка программы составляет 5-8 машинных команд.

В реальных условиях производительность конвейера команд оказывается намного ниже по сравнению с идеальным случаем.

Основные причины снижения производительности конвейеров команд

Конфликтные ситуации, имеющие место в конвейерах команд, в англоязычной литературе именуются «hazard» (риск, сбой).

В современной литературе в основном описываются три вида конфликтов (рисков), приводящих к снижению производительности конвейеров команд:

1. конфликты по ресурсам (структурный риск);

2. конфликты по данным;

3. конфликты по управлению.

Конфликты по ресурсам имеют место, когда несколько блоков конвейера пытаются одновременно использовать один и тот же ресурс. Обычно таким ресурсом является память. Действительно, сразу трем блокам классического конвейера команд (IF, OF, S) может понадобиться одновременное обращение к памяти, что приведет к приостановке конвейера.

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

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

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

Конфликты по данным являются следствием наличия так называемой зависимости по данным, присущей программам. Эта зависимость имеет место между соседними или близкорасположенными командами и состоит в том, что результат выполнения предыдущей команды программы является операндом или его адресом для последующей команды. Если не учитывать зависимости по данным, то может оказаться, что последующая команда программы использует необновленное (неверное) значение операнда или его адреса, так как произведет выборку из некоторой ячейки памяти или регистра до того момента, как предыдущая команда запишет туда верное значение.

Для устранения подобного конфликта необходима приостановка зависящей по данным команды в конвейере до момента завершения записи результата предыдущей командой.

Конфликты по управлению обусловлены наличием в программах зависимостей по управлению, которые связаны с командами, изменяющими естественный порядок следования машинных команд программы (по порядку возрастания их адресов). К таким командам относятся команды безусловных и условных переходов, вызовов процедур и возвратов из них, команды циклов и программных прерываний.

Конвейер команд осуществляет выборку команд, расположенных по последовательным адресам памяти. Когда в конвейер попадает одна из перечисленных выше команд, факт наличия перехода распознается только на фазе ЕХ. Если переход действительно имеет место, то все предыдущие наработки конвейера команд, связанные с последующими за переходом командами, оказываются неактуальными. Простейшей реакцией на подобную ситуацию является сброс конвейера и его реинициализация, начиная с выборки команды по адресу перехода (это не очень хороший подход, так как сброс конвейера осуществляется через каждые 5-8 команд).

Для уменьшения влияния зависимостей по управлению используются различные методы, основными из которых являются методы предсказания переходов. Эти методы разделяются на статические и динамические. В статических методах предсказание перехода  - однонаправленное. Так, например, наиболее вероятным направлением перехода для команды LOOP cycle является адрес команды, отмеченной именем cycle, то есть продолжение цикла. В свою очередь, переход к следующей команде программы имеет гораздо меньшую вероятность.