Конвейер (вычисления)

редактировать

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

Связанные с компьютером конвейеры включают:

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

Содержание

  • 1 Концепция и мотивация
  • 2 Соображения по проекту
    • 2.1 Балансировка стадий
    • 2.2 Буферизация
    • 2.3 Нелинейные конвейеры
    • 2.4 Зависимости между элементами
  • 3 Затраты и недостатки
  • 4 См. Также
  • 5 Ссылки
  • 6 Библиография

Концепция и мотивация

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

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

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

Рекомендации по проектированию

Балансировка этапов

Поскольку пропускная способность конвейера не может быть лучше, чем пропускная способность его самого медленного элемента, разработчик должен попытаться разделить работу и ресурсы между этапы, чтобы все они занимали одинаковое время для выполнения своих задач. В приведенном выше примере сборки автомобиля, если на каждую из трех задач требуется 15 минут вместо 20, 10 и 15 минут, задержка все равно будет 45 минут, но новая машина будет завершаться каждые 15 минут вместо 20.

Буферизация

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

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

Буфер между двумя каскадами может быть просто аппаратным регистром с подходящей логикой синхронизации и сигнализации между двумя каскадами. Когда каскад A сохраняет элемент данных в регистре, он посылает сигнал «данные доступны» следующему каскаду B. После того, как B использует эти данные, он отвечает сигналом «данные получены» в A. Стадия A останавливается, ожидая для этого сигнала перед сохранением следующего элемента данных в регистре. Этап B останавливается, ожидая сигнала «данные доступны», если он готов обработать следующий элемент, но этап A еще не предоставил его.

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

Нелинейные конвейеры

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

Зависимости между элементами

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

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

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

  • Задержка: Каждый затронутый этап, такой как A, останавливается до разрешения зависимости, то есть до тех пор, пока не будет доступна требуемая информация и / или требуемое состояние не будет достигнуто. 142>Изменение порядка элементов: Вместо остановки, этап A может отложить элемент Y в сторону и искать любой последующий элемент Z в своем входном потоке, который не имеет никаких зависимостей с каким-либо более ранним элементом. В конвейерах команд этот метод называется выполнение вне очереди.
  • Предположение и возврат: Одним из важных примеров зависимости от элемента к элементу является обработка условного перехода инструкция X по конвейеру инструкций. Первый этап A конвейера, который выбирает следующую команду Y для выполнения, не может выполнить свою задачу до тех пор, пока X не получит свой операнд и не определит, следует ли переходить или нет. Это может занять много тактов, поскольку операнд X может, в свою очередь, зависеть от предыдущих инструкций, которые извлекают данные из основной памяти.
Вместо того, чтобы останавливаться в ожидании завершения X, этап A может угадать, будет ли выполнено ветвление или нет, и получить следующую инструкцию Y на основе этого предположения. Если предположение позже окажется неверным (надеюсь, редко), системе придется вернуться назад и возобновить правильный выбор. А именно, все изменения, которые были внесены в состояние машины на этапе A и последующих этапах, основанных на этом предположении, должны быть отменены, инструкции, следующие за X, уже находящиеся в конвейере, должны быть сброшены, а этап A должен будет перезапущен с правильный указатель инструкции . Эта стратегия прогнозирования ветвлений является частным случаем спекулятивного исполнения.

Затраты и недостатки

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

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

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

См. Также

Ссылки

  1. ^Data Pipeline Development Опубликовано Dativa, получено 24 мая 2018 г.
  2. ^О. Хаук; Сорин А. Хус; М. Гарг. «Двухфазные асинхронные волновые конвейеры и их применение в 2D-DCT». семантик. Проверено 14 сентября 2019 г.

Библиография

Последняя правка сделана 2021-06-02 06:37:53
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте