- •Содержание
- •Задание к курсовому проекту
- •Введение
- •Простой пятиуровневый конвейер в risc-процессорах
- •История
- •Тактовый генератор
- •Конфликт конвейера
- •Бесконвейерная архитектура
- •Общий конвейер
- •Общий четырёхуровневых конвейер; цветные квадраты символизируют независимые друг от друга инструкции
- •Преимущества и недостатки
- •«Пузырек»
- •Пузырек в третьем такте обработки задерживает исполнение
- •Трудности
- •Граф информационных связей линейного конвейера
- •Операционная схема линейного конвейерного устройства
- •Управляющий автомат линейного конвейерного устройства
- •Гса линейного конвейерного устройства в закодированном виде
- •Граф информационных связей конвейерного устройства
- •Операционная схема конвейерного устройства с обратными связями
- •Сокращенная таблица занятости
- •Полная таблица занятости
- •Граф-схема алгоритма (гса) в закодированном виде
- •Граф-схема алгоритма в закодированном виде
- •Формат микропрограммы
- •Формат микропрограммы
- •Микропрограмма для управляющего автомата
- •Принципиальная схема вычислителя
- •Принципиальная схема конвейерного устройства в визуальном редакторе среды Quartus II Выводы
- •Список использованной литературы
История
Сам термин «конвейер» пришёл из промышленности, где используется подобный принцип работы — материал автоматически подтягивается по ленте конвейера к рабочему, который осуществляет с ним необходимые действия, следующий за ним рабочий выполняет свои функции над получившейся заготовкой, следующий делает ещё что-то. Таким образом, к концу конвейера цепочка рабочих полностью выполняет все поставленные задачи, сохраняя высокий темп производства. Например, если на самую медленную операцию затрачивается одна минута, то каждая деталь будет сходить с конвейера через одну минуту.
Считается, что впервые конвейерные вычисления были использованы либо в проекте ILLIAC II, либо в проекте IBM Stretch. Проект IBM Stretch предложил термины «получение» (Fetch), «расшифровка» (Decode) и «выполнение» (Execute), которые затем стали общеупотребительными.
Тактовый генератор
Многие современные процессоры управляются тактовым генератором. Процессор внутри состоит из логических элементов и ячеек памяти — триггеров. Когда приходит сигнал от тактового генератора, триггеры приобретают своё новое значение и «логике» требуется некоторое время для декодирования новых значений. Затем приходит следующий сигнал от тактового генератора, триггеры принимают новые значения, и так далее. Разбивая последовательности логических элементов на более короткие и помещая триггеры между этими короткими последовательностями, уменьшают время, необходимое логике для обработки сигналов. В этом случае длительность одного такта процессора может быть соответственно уменьшена.
Например, простейший конвейер RISC-процессоров можно представить пятью стадиями с наборами триггеров между стадиями:
получение инструкции (Instruction Fetch);
декодирование инструкции (Instruction Decode) и чтение регистров (Register fetch);
выполнение (Execute);
доступ к памяти (Memory access);
запись в регистр (Register write back).
Конфликт конвейера
При написании ассемблерного кода (либо разработке компилятора, генерирующего последовательность инструкций) делается предположение, что результат выполнения инструкций будет точно таким, как если бы каждая инструкция заканчивала выполняться до начала выполнения следующей за ней. Использование конвейера сохраняет справедливость этого предположения, однако не обязательно сохраняет порядок выполнения инструкций. Ситуация, когда одновременное выполнение нескольких инструкций может привести к логически некорректной работе конвейера, известна как «конфликт конвейера (Pipeline hazard)». Существуют различные методы устранения конфликтов: форвардинг (Register forwarding) (иногда называется bypass) и другие.
Бесконвейерная архитектура
Бесконвейерная архитектура значительно менее эффективна из-за меньшей загрузки функциональных модулей процессора в то время, пока один или небольшое число модулей выполняет свою роль во время обработки инструкций. Конвейер не убирает полностью время простоя модулей в процессорах как таковое и не уменьшает время выполнения каждой конкретной инструкции, но заставляет модули процессора работать параллельно над разными инструкциями, увеличивая тем самым количество инструкций, выполняемых за единицу времени, а значит и общую производительность программ.
Процессоры с конвейером внутри устроены так, что обработка инструкций разделена на последовательность стадий, предполагая одновременную обработку нескольких инструкций на разных стадиях. Результаты работы каждой из стадий передаются через ячейки памяти на следующую стадию, и так — до тех пор, пока инструкция не будет выполнена. Подобная организация процессора, при некотором увеличении среднего времени выполнения каждой инструкции, тем не менее обеспечивает значительный рост производительности за счёт высокой частоты завершения выполнения инструкций.
Не все инструкции являются независимыми. В простейшем конвейере, где обработка инструкции представлена пятью стадиями, для обеспечения полной загрузки, в то время пока заканчивается обработка первой инструкции, должно обрабатываться параллельно ещё четыре последовательных независимых инструкции. Если последовательность содержит инструкции, зависимые от выполняемых в данный момент, то управляющая логика простейшего конвейера приостанавливает несколько начальных стадий конвейера, помещая этим самым в конвейер пустую инструкцию («пузырёк»), иногда неоднократно, — до тех пор, пока зависимость не будет разрешена. Существует ряд приёмов, таких как форвардинг, значительно снижающих необходимость приостанавливать в таких случаях часть конвейера. Однако зависимость между инструкциями, одновременно обрабатываемыми процессором, не позволяет добиться увеличения производительности кратно количеству стадий конвейера в сравнении с бесконвейерным процессором.
