конвейер команд микропроцессора

элеватор суфле грязи

Со времен Генри Форда идея конвейера состоит в том, чтобы как можно меньше дать тем, кто трудится, но при этом получить как можно более эффективное производство. Сейчас мы рассмотрим это на примере конвейера команд в микропроцессоре. Вот одно, самое главное, замечание о пользе конвейера. Вспомните такую картину: расходящиеся круги на поверхности озера от брошенного в воду камня. Точно такая же «картина» имеет место и в кристалле, если схема не имеет регистров. Изменение счетчика команд действует подобно описанному выше камню.

Конвейер команд микропроцессора вакансии мастера элеватора

Конвейер команд микропроцессора

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

Чтобы избежать такую ситуацию, в современных процессорах имеется несколько конвейеров, предназначенных для разных типов команд. Параллельность на уровне команд ILP - Instruction Level Parallelism есть термин, который указывает на возможность выполнения нескольких команд в процессоре одновременно, если у них нет взаимной зависимости от результатов выполнения. Суперскалярной называют такую архитектуру, в которой используется более одного конвейера. В случае такой архитектуры функциональные блоки в конвейерах дублируются.

Во втором случае требуются дополнительные аппаратурные компоненты, которые предназначены для разрешения конфликтов, когда два или более конвейеров пытаются получить доступ к одному и тому же устройству одновременно. Intel Pentiumi процессор, например, имеет один конвейер, который может быть использован для любых операций ALU или FPU , а другой конвейер, который может быть использован только для простых операций над целыми числами.

Имеется две возможности увеличения ILP: Одновременное выполнение большего числа команд, которые при этом должны на различных стадиях выполнения. В этом случае мы имеем дело с ковейером. Возможность выполнения различных команд на одной и той же стадии. В этом случае требуется многократное дублирование аппаратуры.

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

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

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

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

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

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

Методы динамического прогнозирования учитывают направления переходов, реализовывавшиеся этой командой при выполнении программы. Например, подсчитывается количество переходов, выполненных ранее по тому или иному направлению, и на основании этого определяется направление перехода при следующем выполнении данной команды.

Конфликты по данным возникают в случаях, когда выполнение одной команды зависит от результата выполнения предыдущей команды. При обсуждении этих конфликтов будем предполагать, что команда i предшествует команде j. Конфликты типа RAW Read After Write : команда j пытается прочитать операнд прежде, чем команда i запишет на это место свой результат.

При этом команда j может получить некорректное старое значение операнда. Проиллюстрируем этот тип конфликта на примере выполнения команд, представленных в таблица Пусть выполняемые команды имеют следующий вид:. Команда i изменит состояние регистра R1 в такте 5. Если не приняты специальные меры, то из регистра R1 будет прочитано значение, которое было в нем до выполнения команды i. Уменьшение влияния конфликта типа RAW обеспечивается методом обхода продвижения данных.

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

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

Конфликты типа WAR Write After Read : команда j пытается записать результат в приемник, прежде чем он считается оттуда командой i , При этом команда i может получить некорректное новое значение операнда:. Этот конфликт возникнет в случае, если команда j вследствие неупорядоченного выполнения завершится раньше, чем команда i прочитает старое содержимое регистра R2.

Конфликты типа WAW Write After Write : команда j пытается записать результат в приемник, прежде чем в этот же приемник будет записан результат выполнения команды i , то есть запись заканчивается в неверном порядке, оставляя в приемнике результата значение, записанное командой i :. Устранение конфликтов по данным типов WAR и WAW достигается путем отказа от неупорядоченного исполнения команд, но чаще всего путем введения буфера восстановления последовательности команд.

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

Потери будут тем больше, чем более длинный конвейер используется в микропроцессоре. Такая ситуация явилась одной из причин сокращения числа ступеней в микропроцессорах последних моделей. Так, в микропроцессоре Itanium конвейер содержит всего 10 ступеней. При этом его тактовая частота составляет около 1 МГц [ [2] ]. Однако на каждой ступени выполняется больше функциональных действий, чем в Pentium Интернет-Университет Информационных Технологий.

Таблица Количество команд Время при последовательном выполнении при конвейерном выполнении 1 2 10 Архитектура и организация ЭВМ.

ТРАНСПОРТЕР КАРАВЕЛЛА Т6

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

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

Чтобы избежать такую ситуацию, в современных процессорах имеется несколько конвейеров, предназначенных для разных типов команд. Параллельность на уровне команд ILP - Instruction Level Parallelism есть термин, который указывает на возможность выполнения нескольких команд в процессоре одновременно, если у них нет взаимной зависимости от результатов выполнения. Суперскалярной называют такую архитектуру, в которой используется более одного конвейера. В случае такой архитектуры функциональные блоки в конвейерах дублируются.

Во втором случае требуются дополнительные аппаратурные компоненты, которые предназначены для разрешения конфликтов, когда два или более конвейеров пытаются получить доступ к одному и тому же устройству одновременно. Intel Pentiumi процессор, например, имеет один конвейер, который может быть использован для любых операций ALU или FPU , а другой конвейер, который может быть использован только для простых операций над целыми числами.

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

В этом рассмотрении говорилось об обработке информации от датчиков как об одной задаче, выполняемой микроконтроллером. Но ведь в реальной обстановке микроконтроллер выполняет одновременно несколько задач. При этом одни задачи могут добавляться, а другие задачи сниматься. Запуск новых или активация временно «законсервированных» задач требует определенных временных затрат.

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

Представим себе, что в микропроцессоре работает встроенная операционная система, которая имеет единый квант времени для выполнения задач. Например, вот такой алгоритм: «получил прерывание от часов, проверил расписание обхода и опросил». При таком алгоритме работы все задержки от переключения задачи имеют несколько составляющих. Начнем рассмотрение с того, как таймер выставил сигнал запроса прерывания. Этот сигнал поступает в контроллер прерываний. Здесь нам необходимо учитывать латентность задержку на выполнение контроллера прерываний.

Контроллер прерываний— статический автомат, шифрующий состояния приоритетов. На входе у него регистр маски прерываний, триггер глобального разрешения-запрета. На прохождение сигнала через эти цепи требуется некоторое время. Далее сигнал запроса приходит в АЛУ и… Но перед этим должна завершиться текущая выполняемая команда. И эта команда не всегда бывает однотактная. В самом худшем случае время ожидания для FIQ состоит из самого большого отрезка времени, которое может потребоваться для сигнала запроса, чтобы пройти через синхронизатор, плюс время для завершения самой длинной команды — LDM, которая загружает все регистры, включая PC, плюс время, необходимое для аварийного прекращения работы данных, плюс время для входа в FIQ.

Максимальное время — 50 циклов процессора— равно 1,2 мкс для системы, использующей для процессора синхрочастоту в 41,78 МГц. Максимальное вычисление времени ожидания запроса на прерывание IRQ подобно приведенному выше, но необходимо учесть тот факт, что FIQ имеет более высокий приоритет и может задержать вход в запрос на прерывание IRQ, поскольку обслуживание прерывания верхнего уровня может проводиться в течение произвольного отрезка времени.

Минимальное время ожидания может быть уменьшено до 42 циклов, если не используется команда LDM , поэтому некоторые компиляторы имеют такую опцию, позволяющую компилировать, не используя данную команду. Другая опция, позволяющая уменьшить латентность до 22 циклов, состоит в том, что программа должна выполниться в режиме THUMB. Минимальное время ожидания для FIQ или прерываний IRQ— всего пять циклов — состоит из времени, необходимого для того, чтобы запрос мог пройти через синхронизатор плюс время, требуемое для выполнения режима исключения.

Далее надо рассмотреть, как работает память — внутренняя или внешняя, да и много чего еще, связанного с аппаратной реализацией микроконтроллера. Но для данного этапа рассмотрения давайте пока ограничимся этим. Жизнь показывает нам, что внешний мир, находящийся вокруг микроконтроллера, с каждым годом становится все больше и сложнее. Что можно было получить от микроконтроллера с 1 К памяти и как можно было его использовать?

Пара прерываний и все. Главный цикл программы с вызовом подпрограмм обслуживания прерываний. Теперь, поскольку микроконтроллеры стали значительно мощнее, требований, а значит и задач, выполняемых ими, стало значительно больше. Больше внешних воздействий приходит на микроконтроллер. Значит ли это, что число запросов прерываний стало больше?

С одной стороны — да. Входов запросов прерываний действительно стало больше. Но как это число связано с количеством обслуживаемых задач? Известно, что в любом микроконтроллере, кроме блоков памяти, есть два самых больших узла, если судить по объему занимаемого ими оборудования. Это дешифратор команды и шифратор приоритета в контроллере прерываний. Поэтому невозможно значительно увеличить число запросов на прерывание и при этом получить быстрый шифратор.

Следовательно, нам будет необходимо принимать какие-то дополнительные меры. Сейчас мы просто зафиксируем факт того, что контроллер прерываний — узел, требующий дополнительного внимания. Как работало переключение контекста в первых 8-разрядных микроконтроллерах? Адрес возврата заносился в стек, а содержание регистров сохранялось и восстанавливалось программистом «вручную».

Стек был выполнен аппаратно и располагался в общем поле памяти данных. Теперь на смену 8-разрядным процессорам, приходят и битные процессоры. Например, процессоры с архитектурой ARM7. У процессора ARM7TDMI аппаратного стека как такового нет, кроме одного регистра, в котором производится сохранение только одного адреса возврата. А все манипуляции с остальными регистрами производятся также «вручную». И обработка вложенных прерываний точно так же поддерживается программным способом.

Основа процессора, выполненного на основе регистров, — это именно регистры общего назначения. И в большинстве случаев они задействуются при работе вполне определенным образом, определяемым компилятором или другим программным инструментом. А следовательно, при переключении контекста необходимо производить сохранение регистров и загружать их новыми значениями. Ну, что-то вроде лозунга: «поработал — убери за собой рабочее место»… А что же можно здесь сделать, кроме этого?

Давайте рассмотрим несколько примеров. Что мы хотим увидеть? Бывает ли так, чтобы не делать эту самую «уборку», а просто продолжить работу на другом «рабочем месте». Да, без сомнений, именно такой режим работы и позволяет делать переключение контекста очень быстрым. И признанный чемпион в этом деле — стековый процессор. Представьте себе, что вы имеете стек данных очень большой величины.

Далее вы разбиваете этот стек на несколько рабочих областей, так чтобы каждой задаче «досталась» своя область. Теперь, чтобы переключиться с задачи на задачу, вам не надо что-то сохранять или загружать. Надо просто перенаправить указатель вершины стека на другую область, соответствующую новой задаче. И еще один пример хочется привести в этом разделе. Так уж получилось, что всплеск числа проектов, выполненных с применением «самодельных» soft-процессоров, выпал на те годы, когда еще только-только появились FPGA достаточного объема, такого, чтобы в них мог поместиться проект со встроенным процессором.

Это было то время, когда еще не набрали полной силы soft-процессоры, предлагаемые фирмами — изготовителями микросхем. А дальше, примерно после — года число проектов «самодельных» soft-процессоров резко сократилось именно потому, что фирмы — изготовители микросхем учли потребность рынка в soft-процессорах и предложили пользователю полный комплект soft-процессоров вместе с программными инструментами.

Сама структура конвейера выбрана совершенно стандартной рис. Порядок работы конвейера стандартный — выборка, декодирование, выполнение, запись. В этом проекте очень удачно скомбинированы достоинства двух архитектур, выполненных на основе регистров и на основе стека.

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

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

Регистры общего назначения они обведены красной рамкой выполнены как вершина стека. Процессор Nios! В нем вместо регистров используется регистровый файл. Причем для работы этот файл доступен через окно, так что можно работать одновременно с 32 адресами так же, как с 32 регистрами.

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

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

В заключение раздела по переключению контекста необходимо отметить, что здесь были рассмотрены только аппаратные узлы. Они обычно скрыты от программиста. Но вместе с тем, можно сделать еще несколько шагов по ускорению работы soft-процессора. Правда, эти шаги уже будут «задевать» и программистов. Поэтому их описание будет приведено в разделах, описывающих кодировку команд. Переключение контекста — это мощный инструмент повышения скорости реакции процессора на внешние воздействия.

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

Далее накладывать маску, выделять требуемый бит и по состоянию регистра судить — равен искомый бит 0 или 1. Для очень бюджетных проектов может быть и неплохо. Но довольно долго. А давайте применим следующий формат команды. Сведем все флаги в битовое поле и направим их в аппаратный мультиплексор типа N бит в 1 бит. И, соответственно, в состав команд процессора введем команду чтения бита, находящегося по известному адресу в поле битовых переменных.

Теперь нам не нужно читать битовый массив и накладывать на него маску. Теперь все выполняется только одной командой: «прочитать бит по адресу N». Но вот в чем беда. Для адресации битового поля нам требуется занять определенное количество разрядов в поле команды. А как быть в том случае, когда это поле команды не позволяет адресовать все требуемые по проекту биты? Или, скажем так: если мультиплексор, требующийся для такой операции, получится довольно медленный. Вот тут давайте вспомним, что в отличие от процессора общего применения «самодельный» процессор всегда делается и оптимизируется под конкретную задачу.

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

Да нет, просто необходимо сгруппировать эти биты таким образом, чтобы они представляли собой одинаковые «сюжеты». Например, бит готовности на прием может находиться на той же позиции, что и бит готовности на передачу. Вошли в программу обработки передатчика, проверили бит и передали.

То же и для готовности на прием. То же может быть сделано и с битами ошибок. А как же медленный мультиплексор? Раньше у него был только один такт на то, чтобы промультиплексировать бит. Ну а если не успевает этот мультиплексор, то тогда ввести все сигналы за один такт RISC нельзя.

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

Но теперь уже процессор с такой командой работать будет. При этом просто надо будет учесть появившуюся задержку в один такт, или в несколько тактов, в зависимости от реализации мультиплексора. Простейший вариант в таком случае — это вставить команду NOP. Что делается после тестирования бита? Обычно выполняется условный переход или условный вызов подпрограммы. Как тестировать бит, мы уже «прошли». Теперь давайте рассмотрим, как можно несколько облегчить себе жизнь при обработке ветвлений.

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

Формируем команду, которая в зависимости от состояния бита флага, находящегося по адресу N, разрешает выполнение следующей за этой команды или блокирует ее, превращая ее код в NOP. Что мы выигрываем в таком случае? Если мы имеем процессор с конвейером в 5 ступеней, то при выполнении условного перехода мы потеряем 5 тактов конвейера.

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

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

Но описать все это в одной статье сложно. Как и что надо разрабатывать — определяется конкретной задачей. А привести рекомендации на все случаи просто невозможно. Посему на этом данную статью хочется закончить.

Этом что-то разборки транспортер т4 себе

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

Купить фольксваген транспортер в нижнем новгороде 541
Конвейер команд микропроцессора Это дешифратор команды и шифратор приоритета в контроллере прерываний. Комбинируя эти преимущества, швейцарские студенты сделали процессор, в котором регистры общего назначения выполнены в виде вершины стека. С «Записками инженера» читатели также смогут ознакомиться на сайте автора. Конвейер значения. Следовательно, нам будет необходимо принимать какие-то дополнительные меры. Сам термин «конвейер» пришёл из промышленности, где используется подобный принцип работы — материал автоматически подтягивается по ленте конвейера к рабочему, который осуществляет с ним необходимые действия, следующий за ним рабочий выполняет свои функции над получившейся заготовкой, следующий делает ещё что-то.
Авито калуга фольксваген транспортер Спекулятивная синхронизация Speculative Executionкогда при наличии свободных ресурсов выполняются коды, хотя и не известно потребуются ли выпуск транспортер т3 их выполнения т. Процессоры с конвейером команд микропроцессора внутри устроены так, что обработка инструкций разделена на последовательность стадий, предполагая одновременную обработку нескольких инструкций на разных стадиях. В процессоре для каждого этапа выполнения команды предназначена своя часть и, если бы выполнение команд происходило строго одна за другой, то приходилось бы для начала выполнения новой команды ожидать несколько тактов результатов выполнения предыдущей команды, и многие части процессора были бы быть не загружены находясь в состоянии ожидания. Пространства имён Статья Обсуждение. Пара прерываний и все.
Конвейер команд микропроцессора Конфликты по управлению возникают при конвейерном выполнении условных передач управления и других команд, которые изменяют значение программного счетчика. Диаграмма работы длина салона транспортера процессора VE2 Сначала поток команд проходит через 3 блока, которые на рис. Бесконвейерная архитектура значительно менее эффективна из-за меньшей загрузки функциональных модулей процессора в то время, пока один или небольшое число модулей выполняет свою функцию во время обработки инструкций. Цикл «Микропроцессор своими руками» и другие статьи этого же направления печатаются уже семь лет, поскольку первая статья на эту тему была напечатана в году. Затем приходит следующий сигнал от тактового генератора, триггеры принимают новые значения, и так далее. Конвейер отлично работает, если команды не зависимы одна от другой т.
Клуб любителей транспортер т3 Отправка зерна с элеватора
Конвейер ленточный купить б у Элеватор обогатительной фабрики
Вибрационный конвейер недостатки Горизонтальный ленточный конвейер курсовая
Конвейер команд микропроцессора Изготовление рольгангов для труб

ФОЛЬКСВАГЕН ТРАНСПОРТЕР ВИДЫ КУЗОВА

Например, простейший конвейер RISC -процессоров можно представить пятью стадиями с наборами триггеров между стадиями:. Ситуации, называемые конфликтами конвейера [en] англ. Конфликты уменьшают реальное ускорение в производительности конвейерной обработки и могут вызвать необходимость остановки конвейера.

Для разрешения конфликта нужно, чтобы некоторые команды в конвейере могли продолжать выполняться, в то время как другие были задержаны. Существует три класса конфликтов [6]. Структурные конфликты возникают из-за конфликтов ресурсов, когда аппаратура не может поддерживать все возможные комбинации одновременно выполняемых команд [7]. Если какая-то комбинация команд не может быть поддержана, то говорят, что процессор имеет структурный конфликт.

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

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

Существует метод устранения конфликта по данным: форвардинг англ. К сожалению, не все потенциальные конфликты по данным можно обработать с помощью байпаса, в этом случае конвейер приостанавливается до разрешения конфликта. Конфликты по управлению возникают при конвейерном выполнении условных передач управления и других команд, которые изменяют значение программного счетчика. Существует много способов обработки остановки конвейера , вызванных задержкой передачи управления, но для глубоких конвейеров в основном используются агрессивные средства [10] , такие как предсказания передач управления.

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

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

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

Если последовательность содержит инструкции, зависимые от выполняемых в данный момент, то управляющая логика простейшего конвейера приостанавливает несколько начальных стадий конвейера, помещая этим самым в конвейер пустую инструкцию «пузырёк» , иногда неоднократно, — до тех пор, пока зависимость не будет разрешена.

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

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

И средняя белая область является самим конвейером. Для разрешения конфликтов конвейера процессор вынужден задерживать обработку инструкции путём создания «пузырька» bubble в конвейере. Прохождение пузырька через исполнительные устройства не сопровождается никакой полезной работой.

Во втором такте обработка фиолетовой инструкции задерживается, и на стадии декодирования в третьем такте теперь находится пузырёк. Все инструкции, следующие «за» фиолетовой инструкцией, задерживаются на один такт, тогда как инструкции, находящиеся «перед» фиолетовой инструкцией, продолжают исполняться. Очевидно, что наличие пузырька в конвейере даёт суммарное время исполнения в 8 тактов вместо 7 на схеме исполнения, показанной выше.

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

Они могут быть выражены при помощи инструкции NOP [11] [12] [13] ассемблера. Эта инструкция суммирует значения, находящиеся в ячейках памяти A и B , а затем кладет результат в ячейку памяти C. В конвейерном процессоре контроллер может разбить эту операцию на последовательные задачи вида. Ячейки R1 , R2 и R3 являются регистрами процессора.

Значения, которые хранятся в ячейках памяти, которые мы называем A и B , загружаются то есть копируются в эти регистры, затем суммируются, и результат записывается в ячейку памяти C. В данном примере конвейер состоит из трех уровней — загрузки, исполнения и записи. Эти шаги называются, очевидно, уровнями или шагами конвейера. В бесконвейерном процессоре только один шаг может работать в один момент времени, поэтому инструкция должна полностью закончиться прежде, чем следующая инструкция, в принципе, начнется.

В конвейерном процессоре все эти шаги могут выполняться одновременно на разных инструкциях. Поэтому, когда первая инструкция находится на шаге исполнения, вторая инструкция будет на стадии раскодирования, а третья инструкция будет на стадии прочтения. Конвейер не уменьшает время, которое необходимо для того, чтобы выполнить инструкцию, но зато он увеличивает объём число инструкций, которые могут быть выполнены одновременно, и таким образом уменьшает задержку между выполненными инструкциями — увеличивая т.

Чем больше уровней имеет конвейер, тем больше инструкций могут выполняться одновременно и тем меньше задержка между завершенными инструкциями. Каждый микропроцессор, произведенный в наши дни, использует как минимум двухуровневый конвейер. И так далее. Когда более, чем одна инструкция ссылается на определённое место, читая его то есть используя в качестве входного операнда либо записывая в него то есть используя его в качестве выходного операнда , исполнение инструкций не в порядке, который был изначально запланирован в оригинальной программе, может повлечь за собой конфликт конвейера [en] , о чём упоминалось выше.

Существует несколько зарекомендовавших себя приёмов либо для предотвращения конфликтов, либо для их исправления, если они случились. Множество схем включают в себя конвейеры в 7, 10 или даже 20 уровней как, например, в процессоре Pentium 4. Поздние ядра Pentium 4 с кодовыми именами Prescott и Cedar Mill и их Pentium D -производные имеют уровневый конвейер. Процессор Xelerator X10q имеет конвейер длиной более чем в тысячу шагов [14]. Обратной стороной медали в данном случае является необходимость сбрасывать весь конвейер в случае, если ход программы изменился например, по условному оператору.

Конвейерная обработка такого рода широко применяется во всех современных быстродействующих процессорах. Количество этапов, на которые конструкторы разбивают выполнение процессорной команды, может быть различным в разных моделях процессоров х86 колеблется от 2 i до 20 Pentium IV.

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

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

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

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

Суперконвейер команд — разбиение каждой ступени на подступени при одновременном увеличении тактовой частоты внутри конвейера; включение в состав процессора многих конвейеров, работающих с перекрытием. Дробление ступеней позволяет поднять тактовые частоты процессора. К суперконвейерным относятся процессоры, в которых число ступеней больше шести см. Cуперконвейер ведет не только к увеличению скорости вычислений, но и к возникновению дополнительных сложностей. Возрастает вероятность конфликтов.

Дороже встает ошибка предсказания перехода — приходится сбрасывать весь длинный конвейер, на что требуется дополнительное время.