- •1. Введение
- •Декодирование
- •1 2 3 4 5
- •1 2 3
- •1 2 3 4
- •2. Функциональное разбиение и разбиение на ступени
- •3.Конвейеризация в сравнении с перекрытием
- •E f
- •4. Классификация конвейеров
- •5. Временные диаграммы
- •6. Помехи
- •7. Исторический обзор
- •8. Сравнение с параллелизмом
- •Подфункция
- •1.Введение………………………………………………………………………………………………………………………………….1
6. Помехи
Помеха определяется структурой или применением конвейера и препятствует его работе с максимальной скоростью, которую можно было бы обеспечить при синхронизации ступеней конвейера. Имеются две общие категории помех: структурные и зависящие от данных. Структурные помехи возникают тогда, когда два различных фрагмента данных пытаются использовать одну и ту же ступень одновременно. По очевидным причинам такие случаи называются столкновениями. При проектировании любых конвейеров, кроме простейших,следует на самой ранней стадии разработки принимать во внимание такие помехи.
Помехи, зависящие от данных, возникают, когда то, что происходит на одной ступени конвейера, определяет, могут ли данные проходить через другие ступени. Простым примером являются две различные ступени, которые должны использовать общую память. Когда на одной ступени используется память, то другая ступень, для которой также требуется память, должна работать вхолостую до тех пор, пока первая не завершит работу. Эти помехи целиком зависят от режима работы системы и не поддаются, в отличие от структурных помех, такому же аналитическому исследованию. Однако такие помехи имеют место, и для их устранения разработано большое число общих методов.
7. Исторический обзор
Осознание полезности конвейеризации относится к самому раннему периоду разработки ЭВМ, причем в каждом следующем поколении применялись все более тонкие и более глубокие способы. В данном разделе вкратце обрисовывается усовершенствование этих способов как в терминах реально созданных вычислительных систем, так и терминах лежащих в их основе базовых структурных концепций. Для каждой стадии развития мы выбираем только характерные машины, в которых применяется конвейеризация, поскольку полный их перечень был бы необозримо велик.
Одной из самых ранних машин, в которой применена некоторая форма перекрытия, была машина UNIVAC 1. В ней перекрывались исполнение программы и, с некоторыми ограничениями, исполнение операций ввода-вывода. В последующих машинах этот способ был усовершенствован, так что сегодня уже не является чем-то необычным наличие в вычислительной системе нескольких процессоров, целиком выполняющих функции ввода-вывода.
Использование конвейеризации и перекрытия внутри самого вычислительного блока началось с применения способов, обеспечивающих ускорение выборки команд. Система IBM 7094 имела память с 72-разрядными словами при 36-разрядных командах. Каждый раз при обращении к памяти для выборки команды не использовались 36 разрядов. Это исключало половину выборок команд для программы в виде последовательности из 36-разрядных команд.
В таких машинах, как IBM 7094 II, сделан дальнейший шаг — использовано расслоение памяти для ускорения обращения к ней. В расслоенной памяти несколько различных модулей работают циклически по мере того, как задаются обращения к последовательным ячейкам. Например, в 4-кратно расслоенной памяти все ячейки с адресами вида 4i находятся в одном модуле, с адресами вида 4i + 1 — в другом, с адресами 4i + 2 - в третьем и с адресами 4i + 3 — в остающемся модуле. Память с такой организацией можно рассматривать как 4-ступенчатый конвейер, в котором в период времени, требующийся для одного обращения к памяти, до четырех различных обращений могут находиться в разных стадиях выполнения.
Разбиение самого процесса исполнения команды впервые применено в машинах STRETCH и LARC. Целью разработки машины STRETCH было 100-кратное повышение быстродействия по сравнению с более старой моделью 704, в то время как технологическая база построения памяти обеспечивала 6-кратное ускорение, а технологическая база построения логических схем — 10-кратное. Остальной прирост производительности должен был произойти за счет сильного расслоения памяти, сопровождаемого разбиением процесса исполнения команды на две фазы: выборки/декодирования команды и выполнения операции над данными. В машине LARC такое разбиение было продолжено, и процесс состоял из четырех ступеней: выборки команды, выполнения индексных операций над адресом, выборки данных и исполнения команды.
Хотя по сравнению с традиционными в таких системах наибольшее возможное ускорение за счет одной лишь конвейеризации равно числу ступеней, оно не было достигнуто в полной мере Зависимости между командами ограничивали фактическое увеличение производительности. Команда, находящаяся на одной из ступеней конвейера, может зависеть от результата выполнения еще не завершенной команды, и, следовательно, нужно приостановить ее переход на следующую ступень. Более того, в этих ранних системах останов на одной ступени приводил к приостанову на всех предшествующих ступенях, даже если какая-либо из предшествующих команд от нее не зависела и могла продвигаться по неиспользуемым ступеням.
Вычислительные машины семейства 6000 фирмы CDC были среди первых, в которых предпринята попытка решить проблему приостанова из-за указанной зависимости. Хотя они не были конвейерными в строгом смысле, многие из использованных в них способов были предвестниками более новых подходов, примененных уже в конвейерных машинах. Например, архитектура набора команд была спроектирована так, чтобы устранить как можно больше потенциальных зависимостей. С этой целью использовались простые форматы, простые способы адресации памяти и раздельные наборы аппаратных регистров для различных функций. Все вычисления производились с применением трехрегистрового формата, когда регистрами являлись 60-разрядные центральные регистры. Точно так же вся адресация осуществлялась через отдельные адресные и индексные регистры. Это разделение и специализация функций позволили сделать более независимыми многие шаги выполнения команды, осуществить большее разбиение на ступени и тем самым большее перекрытие. Кроме того, в машинах семейства 6000 имелась центральная справочная таблица, содержавшая информацию о состоянии каждого ресурса в машине, который может быть использован той или иной командой, находящейся в данный момент на некоторой ступени обработки. Когда команда достигает ступени, на которой продолжение ее выполнения зависит от некоторого ресурса, который в свою очередь может оказаться используемым некоторой другой командой, проводится сверка со справочной таблицей. Если дальнейшее выполнение команды не разрешалось, то оно временно откладывалось. В машинах семейства 6000 при этом останавливалось также исполнение последующих команд. Когда требования зависимости команд удовлетворялись (например, когда другая команда завершалась), по справочной таблице устанавливалось, что выполнение отложенной команды может теперь продолжаться, и осуществлялось возвращение ее в активное состояние. Поскольку возможных зависимостей много (использование регистров, запоминание, за которым следует загрузка с того же адреса, условные переходы и т.п.), исполнение отдельных команд могло задерживаться по нескольку раз.
Еще одна существенная особенность машин семейства 6000 — наличие у них многих независимых функциональных устройств (умножителей, сумматоров и т. п.) для ступеней выполнения операций над данными. Когда очередная команда достигала данной ступени, операнды направлялись для обработки к свободному функциональному устройству соответствующего типа. Функциональное устройство помечалось как занятое до завершения операции и выдачи результата. Это также приводило к перекрытию многих различных команд.
Хотя машины семейства 6000 не были в строгом смысле конвейерными, благодаря своим особенностям они проложили путь будущим конвейерным машинам. Это хороший пример того, когда различия между чистой конвейеризацией, перекрытием и чистым параллелизмом становились совсем расплывчатыми, но основные понятия функционального разбиения, обнаружения и устранения помех четко рассматривались на стадии проектирования. В более поздних машинах, таких как машины семейства 7600, применяемые способы были улучшены путем большей конвейеризации, особенно в функциональных устройствах.
В машине IBM 360/91 был применен несколько иной подход1. Цель состояла в использовании конвейеризации для как можно большего увеличения скорости исполнения более традиционного набора команд (архитектура системы 360). Поскольку архитектура набора команд не разрабатывалась специально для конвейерной реализации, было больше причин для возникновения межкомандных зависимостей. Поэтому большое внимание было уделено механизмам блокировок и разбиению системы, позволявшим осуществить как можно больше перекрытий. Это приводило, например, к частичной выборке обоих возможных наборов команд, следующих за командой условного перехода, когда результаты проверки условия зависели от еще не завершенных команд. Когда результат становился известным, ненужная последовательность команд отбрасывалась.
Весь процесс исполнения команды был сильно конвейеризован с множеством путей и специальных функций, введенных для повышения производительности. Фактически машина IBM 360/91 была одной из первых, в которой применялась иерархий конвейеров, причем самый верхний уровень состоял из двух ступеней: 1-устройства для выборки и предварительной обработки команды и Е-устройства для ее исполнения. Оба эти устройства сами были конвейерными.
Например, фаза выполнения операций над операндами с плавающей запятой сама была сильно конвейеризована, причем фактические вычисления выполняюсь также отдельными конвейерными умножителями и сумматорами. Далее, эти устройства были связаны децентрализованной общей шиной данных, которая инициировала операции (как только операнды оказывались в наличии) во многом независимо от исходного порядка команд, написанных программистом. Возникающая при этом "хаотическая" последовательность исполнения временами могла оказываться совсем непохожей на ту, которую ожидал программист, но вследствие правильной организации вычисленные результаты всегда соответствовали ожидаемым.
Следующая разработка в области конвейерных машин вызвана необходимостью иметь в некоторых приложениях скорости исполнения, значительно более высокие, чем те, которые могут быть достигнуты при традиционных архитектурах. Эти прикладные задачи часто характеризовались сериями шагов, в которых на каждом шаге одна и та же функция последовательно применялась к различным данным. Наборы таких данных названы век-горами. Был разработан новый класс команд, названных векторными, которые позволяли программисту задать в одной команде один из этих базовых векторных шагов. Наряду с устранением накладных расходов, связанных с командами управления циклом, этот тип команд позволил разработчику ЭВМ обеспечить настройку внутренних конвейеров на прогон с максимальной скоростью без опасения встретить непредвиденные зависимости или помехи. Такие машины стали называться векторными процессорами.
В первую очередь к ним относятся матричный процессор 2938 фирмы IBM, машина STAR-100 фирмы Control Data и машина ASC фирмы Texas Instruments. Матричный процессор 2938 был чисто векторным, оптимизированным на выполнение умножений и сложений, подключался к шине памяти более традиционной машины и получал от нее цепочки векторных команд.
Машина STAR-1001 имела как традиционные скалярные команды, так и векторные. Как и у машин семейства 6000, в ней имелось несколько независимых функциональных устройств, но в машине STAR эти устройства были конвейерными. Кроме того, были разработаны специальные способы адресации, связанные с так называемыми двоичными векторами, чтобы дать возможность программисту записывать в компактной форме векторы, содержащие много нулевых элементов. При разработке машины Т1 ASC было выбрано другое направление: в машину были включены векторные команды, способные обрабатывать векторы вплоть до трехмерных. Структура машины отличалась еще и тем, что единый внутренний арифметический конвейер мог динамически перестраиваться на выполнение любой базовой операции (умножения, сложения и т.д.,) над данными с фиксированной или с плавающей запятой. Машина могла содержать от одного до четырех таких конвейеров.
В новых разработках конвейерных структур пошли по пути расширения перекрытия функций высокого уровня. Например, машина 3838 фирмы IBM является, как и предыдущая машина 2938, присоединяемым векторным процессором, но с большим запасом векторных команд и более высокого уровня. В машине имеется несколько независимых обрабатывающих блоков, каждый из которых выполняет свою часть общего процесса векторной обработки, а некоторые из этих блоков сами конвейеризованы на нескольких уровнях. Такая структура позволяет также осуществлять конвейеризацию и перекрытие на нескольких уровнях одновременно, совмещая их с исполнением различных программ нескольких независимых пользователей.
Еще одним примером служит машина CRAY-1, архитектура которой включает как скалярные, так и векторные команды, но с одной особенностью. Вместо обращения к векторам в основной памяти, весь набор векторных команд применяется к наборам элементов в векторных регистрах. В любой момент времени программист может задавать одновременно загрузку и разгрузку некоторых регистров, совмещенную с векторной обработкой (умножением, сложением и т.д.) содержимого других векторных регистров. В дополнение к этому программист может задать зацепление векторных операций, при котором результаты выполнения одной векторной операции подаются непосредственно на вход следующей, не ожидая завершения первой команды. Конвейеризация этой машины в значительной степени видна пользователю. При аккуратном программировании достигаются высокие степени перекрытия.
В более новых работах концепция хаотичного исполнения команд привела к исследованию машин на основе потока данных, в которых не задается порядок исполнения, определяемый порядком команд в памяти. Здесь остаются, однако, помехи, связанные с зависимостью данных; например, команда j может в явном виде требовать данные, вырабатываемые командой 2.
