Э. Таненбаум - Архитектура компьютера (1127755), страница 77
Текст из файла (страница 77)
Для сокращения числа циклов, необходимых для вызова команды, требуется нечто большее, чем простое добавление схемы, которая увеличивает РС на 1, Чтобы повысить скорость вызова команды, нужно применить третий подход— параллельное выполнение команд. Весьма эффективно отделение схем для вызова команд (8-разрядного порта памяти и регистров РС и МВК), если этот блок сделать функционально независимым от основного тракта данных.
Таким образом, он может сам вызывать следующий код операции или операнд. Возможно, он даже будет работать асинхронно относительно другой части процессора и вызывать одну или несколько команд заранее. Один из наиболее трудоемких процессов при выполнении команд — вызов 2-байтного смещения и сохранение его в регистре Н для подготовки к сложению (например, при переходе к РС + и байт). Одно из возможных решений — увеличить порт памяти до 16 бит, но это значительно усложнит операцию, поскольку требуемые 16 бит могут перекрывать границы слова, тогда даже считывание из памяти 32 бит за одно обращение не обязательно приведет к вызову обоих нужных нам байтов. Одновременное выполнение нескольких операций — самый продуктивный подход.
Он дает возможность значительно увеличить быстродействие компьютера. Даже простое перекрытие вызова и выполнения команды чрезвычайно эффективны. При более сложных технологиях допустимо одновременное выполнение нескольких команд. Вообще говоря, эта идея является основой проектов современных компьютеров. Далее мы обсудим некоторые технические приемы, позволяющие воплотить этот подход в жизнь. На одной чаше весов находится быстродействие, на другой — стоимость.
Стоимость можно измерять различными способами, но точное определение стоимости дать очень трудно. В те времена, когда процессоры собирались из дискретных компонентов, достаточно было подсчитать общее число этих компонентов. В настоящее время процессор целиком помещается на одну микросхему, но большие и более сложные микросхемы стоят гораздо дороже, чем более простые микросхемы небольшого размера.
Можно посчитать отдельные компоненты (транзисторы, вентили, функциональные блоки), но обычно это число не так важно, как размер контактного участка, необходимый для интегральной схемы. Чем больше участок, тем больше микросхема. И стоимость микросхемы растет гораздо быстрее, чем занимаемое ею пространство. По этой причине разработчики часто измеряют стоимость в единицах, применимых к «недвижимости», то есть с точки зрения пространства, которое требуется для микросхемы (предполагаем, что площадь поверхности измеряется в пикоакрах). В истории компьютерной индустрии одной из наиболее тщательно проработанных микросхем является двоичный сумматор.
Были реализованы тысячи 308 Глава 4. Уровень микроархитектуры проектов, и самые быстрые двоичные сумматоры значительно превосходит по быстродействию наиболее медленные. Естественно, высокоскоростные сумматоры гораздо сложнее низкоскоростных. Специалистам по разработке систем приходится останавливаться на определенном соотношении быстродействия и занимаемого пространства. Сумматор — не единственный компонент, допускающий различные варианты разработки. Практически любой компонент системы может быть спроектирован таким образом, что он будет функционировать с более высокой или с более низкой скоростью, при этом, естественно, разные модели будут различаться по стоимости. Главной задачей разработчика является определение тех компонентов системы, усовершенствование которых может максимально повлиять на быстродействие компьютера.
Интересно отметить, что если какой-нибудь компонент заменить более быстрым, это не обязательно повлечет за собой рост общей производительности. В следующих подразделах мы рассмотрим некоторые аспекты разработки и возможные соотношения стоимости и быстродействия. Одним из ключевых факторов в определении скорости работы генератора синхронизирующего сигнала является количество действий, которые должны быть сделаны за один цикл.
Очевидно, чем больше действий должно быть сделано, тем длиннее цикл. Однако все не так просто, ведь аппаратное обеспечение способно выполнять некоторые операции параллельно, поэтому в действительности длина цикла зависит от количества последовательных операций в одном цикле. Должен также учитываться объем декодирования. Посмотрите на рис. 4.5. Вспомните, что в АЛУ может передаваться значение одного из девяти регистров, и чтобы определить, какой именно регистр нужно выбрать, требуется всего 4 бита в микрокоманде.
К сожалению, такая экономия дорого обходится. Схема декодера вносит дополнительную задержку в работу компьютера. Это значит, что какой бы регистр мы ни выбрали, он получит команду (и передаст свое содержимое на шину В) немного позже. Следовательно, АЛУ получает входные сигналы и выдает результат также с небольшой задержкой. Соответственно, этот результат тоже поступает на шину С для записи в один из регистров чуть позже. Поскольку задержка часто является фактором, который определяет длину цикла, это значит, что генератор синхронизирующего сигнала не сможет функционировать с такой скоростью и весь компьютер должен работать немного медленнее. Таким образом, существует определенная зависимость между быстродействием и стоимостью.
Если сократить каждое слово управляющей памяти на 5 бит, это приведет к снижению скорости работы генератора. Инженер при разработке компьютера должен принимать во внимание его предназначение, чтобы сделать правильный выбор. В компьютере с высокой производительностью использовать декодер не рекомендуется, а вот для дешевой машины он вполне подойдет. Сокращение длины пути Микроархитектура М1с-1 имеет относительно простую структуру и работает довольно быстро, хотя эти две характеристики очень трудно совместить.
В общем случае простые машины не являются высокоскоростными, а высокоскоростные Разработка уровня микроархитектуры 309 машины довольно сложны. В процессоре М1с-1 используется минимум аппаратного обеспечения: 10 регистров, простое АЛУ (см. рис. 3.18), продублированное 32 раза, декодер, схема сдвига, управляющая память и некоторые связующие элементы. Для построения всей системы требуется менее 5000 транзисторов, плюс управляющая память (ПЗУ), плюс основная память (ОЗУ). Мы уже показали, как можно воплотить 1)у'М мнкропрограммно, использовав минимум аппаратуры. Теперь рассмотрим альтернативные варианты. Сначала мы выясним, какими способами можно снизить количество микрокоманд в одной команде (то есть каким образом можно сократить длину пути), а затем перейдем к другим подходам. Таблица 4.4.
Новая микропрограмма для выполнения команды РОР Микрокоманда Операции Комментарий МАП = ЯР = ЯР— 1; гб Считывание второго сверху слова в стеке рор1 рор2 Ожидание, пока из памяти считается новое значение ТОЯ ТОЯ = МОП; По1о Мз~п1 Копирование нового слова в регистр ТОЯ рорз РС = РС ь 1; 1е1сл; Во1о(МВГ0 Регистр МВП содержит код операции; вызов следующего байта; переход Ма!п1 В табл.
4.5 последовательность сокращена до трех команд за счет того, что в цикле рор2 АЛУ не используется. Отметим, что в конце этой последовательности сразу осуществляется переход к коду следующей команды, поэтому требуется всего 3 цикла. Этот небольшой трюк позволяет сократить время выполнения Слияние цикла интерпретатора с микропрограммой В микроархитектуре Мтс-1 основной цикл состоит из микрокоманды, которая должна выполняться в начале каждой 11УМ-команды. В некоторых случаях допустимо ее перекрытие предыдущей командой.
В каком-то смысле эта идея уже получила свое воплощение. Вспомните, что во время цикла Иатп1 код следующей операции уже находится в регистре МВК. Этот код операции вызывается либо во время предыдущего основного цикла (если у предыдущей команды не было операндов), либо при выполнении предыдущей команды. Эту идею можно развивать и дальше.
В некоторых случаях основной цикл можно свести к нулю. Это происходит следующим образом. Рассмотрим каждую последовательность микрокоманд, которая завершается переходом к Из1п1. Кюкдый раз основной цикл может добавляться в конце этой последовательности (а не в начале следующей), при этом межуровневый переход дублируется много раз (но всегда с одним и тем же набором целевых обьектов). В некоторых случаях микрокоманда микроархитектуры М1с-1 может сливаться с предыдущими микрокомандами, поскольку эти команды используются не всегда полностью.
В табл. 4.4 приведена последовательность выполнения микрокоманд для команды РОР. Основной цикл идет перед каждой командой и после каждой команды, в таблице этот цикл показан только после команды РОР. Отметим, что выполнение этой команды занимает 4 цикла: три цикла специальных микрокоманд команды РОР и один основной цикл. 310 Глава 4. Уровень микроархитектуры следугощей микрокоманды на один цикл, поэтому, например, последующая ко- манда (АОО сокращается с четырех циклов до трех.
Это эквивалентно повышению частоты синхронизирующего сигнала с 250 МГц (каждая микрокоманда по 4 нс) до 333 МГц (каждая микрокоманда по 3 нс). Микрокоманде Операции Комментарий МАВ = ЗР = 8Р— 1; ге Считывание второго сверху слова в стеке рор1 Ма(п1.рор РС = РС ч 1; 1е1сл Регистр МВВ содержит код операции; вызов следующего байта ТОЗ = МОВ; ро1о(МВВ] Копирование нового слова в регистр ТОЗ; переход к коду операции рорз Команда РОР очень хорошо подходит для такой доработки, поскольку она содержит цикл, в котором АЛУ не используется, а основной цикл требует АЛУ. Таким образом, чтобы сократить длину команды на одну микрокоманду,нужно в этой команде найти цикл, где АЛУ не используется.
Такие пиклы встречаются нечасто, но все-таки встречаются, поэтому установка цикла йа(п1 в конце каждой последовательности микрокоманд вполне целесообразна. Для этого требуется всего лишь небольшая управляющая память. Итак, мы узнали о первой возможности сокращения длины пути: 17смещение основного цикла в конце каждой последовательности микрокоманд. Э-шинная архитектура Что еще можно сделать, чтобы сократить длину пути? Можно подвести к АЛУ две полные входные шины, А и В, и, следовательно, всего гюлучится три шины. Все (или по крайней мере большинство регистров) должны иметь доступ к обеим входным шинам. Преимущество такой системы состоит в возможности складывать любой регистр с любым другим регистром за один цикл. Чтобы увидеть, насколько продуктивен такой подход, рассмотрим реализацию команды 7(.ОАО (табл.
4.6). Таблица 4.6. Микропрограмма для выполнения команды !(.ОАО Микрокоманда Операции Комментарий ((овв1 ((оаб2 Н = !.У МАВ = МВВО+ Н; га МВВ содержит индекс; копирование ьН в Н МАВ = адрес локальной переменной, которую нужно поместить в стек ((оааз МАВ = ЗР = ЗР+! Регистр ЗР указывает на новую вершину стека; подготовка к записи ((оао4 РС = РС + 1; (е1сб! вг Увеличение РС на 1; вызов следующего кода операции; запись вершины стека ховав Ма(п1 ТОЗ = МОВ; оо1о Мап1 Обновление ТОЗ РС = РС + 1; 1е1сл; ро1о(МВВ! Регистр МВВ содержит код операции; вызов следующего байта; переход Таблица 4.5.