Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ВС для ГОС (ПИ) / Орлов, Цилькер - Организация ЭВМ (2004)

.pdf
Скачиваний:
457
Добавлен:
25.04.2015
Размер:
9.6 Mб
Скачать

3 7 6 Глава7. Операционныеустройства вычислительных машин

Ускорение целочисленного деления

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

-замена делителя обратной величиной, с последующим ее умножением на делимое;

-сокращение времени вычисления частичных остатков в традиционных методах деления (с восстановлением или без восстановления остатка) за счет ускорения операций суммирования (вычитания);

-сокращение времени вычисления за счет уменьшения количества операций суммирования (вычитания) при расчете Ч0;

-вычисление частного в избыточной системе счисления.

За исключением первого из перечисленных подходов все прочие фактически являются модификациями традиционного способа деления.

Замена деления умножением на обратную величину

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

Вэтом случае проблема сводится к эффективному вычислению 1/D. Обычно задача решается одним из двух методов: с помощью ряда Тейлора или метода Нью- тона-Рафсона. В обоих случаях основное время расходуется на умножение, поэтому рассматриваемый метод ускорения деления имеет смысл при наличии быстрых схем умножения.

При реализации первого метода делитель D представляется в виде: D - 1 + X. Тогда для двоичного представления D можно записать:

Метод был использован в модели 91 вычислительной машины IBM 360 для вычисления 32-разрядной величины 1/D. Возможные значения сомножителей в правой части выражения извлекались из таблицы емкостью 28 байт, хранящейся в памяти. Операция вычисления 1/D требует шести умножений.

Вычисление величины 1/D методом Ньютона-Рафсона сводится к нахождению корня уравнения

то есть Х- 1/D. Решение может быть получено с привлечением рекуррентного соотношения: •. Количество итераций определяется требуемой точностью вычисления 1/D. Реализация метода для n-разрядных чисел требует 2 int(log2n) - 1 операций умножения.

Ускорение целочисленного деления 3 7 7

Вобщем, замена операции деления на умножение более характерна для чисел

сплавающей запятой.

Ускорение вычисления частичных остатков

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

Рис.7.53.Матричноеустройстводелениядляалгоритмабезвосстановленияостатка

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

АлгоритмSRT

В основе третьей группы методов ускорения операции деления, согласно приведенной выше классификации, лежит так называемый алгоритм SRT [77,184,214]. Свое название алгоритм получил по фамилиям авторов (Sweeney, Robertson, Tocher), разработавших его независимо друг от друга приблизительно в одно и то же

3 7 8 Глава 7. Операционные устройства вычислительных машин

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

Алгоритм был ориентирован на операции над мантиссами чисел с плавающей запятой и опирается на то обстоятельство, что мантиссы в таких числах нормализованы. Впервые SRT-алгоритм был реализован в модели 91 вычислительной машины IBM 360. В настоящее время он широко применяется в блоках обработки чисел с плавающей запятой, в частности в микропроцессорах фирмы Intel.

Сначала рассмотрим алгоритм применительно к положительным целым числам. Делимое представляется (2n + 1)-разрядным числом, а делитель — «-разряд- ным. Процедура деления начинается с удаления в делителе всех нулей, предшествующих старшей единице, то есть с операции, аналогичной нормализации мантиссы в числах с плавающей запятой. По той же аналогии будем в дальнейшем условно называть эту операцию нормализацией. Исключение k предшествующих нулей реализуется за счет сдвига делителя влево на к разрядов. На аналогичное число разрядов влево сдвигается и делимое. Далее выполняются п итераций, в которых вычисляются цифры частного и частичные остатки. Действия, выполняемые на i-й итерации, можно описать следующим образом:

Обратим внимание на то, что частное представляется в системе счисления, отличной от двоичной. Это означает, что цифры частного могут иметь больше, чем два значения 0 и 1. В рассматриваемом случае—1,0,1.

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

Последний момент в алгоритме — преобразование частного из системы {-1,0,1} в систему {0,1}, то есть в обычную двоичную систему.

На практике это выливается в следующую процедуру (при объяснении будем ссылаться на схемуделения без восстановления остатка, приведенную нарис. 7.50). Делимое и делитель, представленные в дополнительном коде, размещаются в регистре делимого (РДМ) и делителя (РДТ) соответственно. Дальнейшие действия можно описать следующим образом.

1. Если в делителе D имеются k предшествующих нулей (при D > 0) или предшежимого РДМ и РДТ влево на k разрядов.

2. Для i от 0 до п - 1:

Ускорение целочисленного деления 3 7 9

Dесли три старших цифры частичного остатка в РДМ совпадают, то qt = О

ипроизводится сдвиг содержимого РДМ на один разряд влево;

• если три старших цифры частичного остатка в РДМ не совпадают, а сам Ч0 отрицателен, то qi - 1, делается сдвиг содержимого РДМ на один разряд влево и к Ч0 прибавляется делитель;

D если три старших цифры частичного остатка в РДМ не совпадают, а сам Ч0 положителен, тоqt, - 1, выполняется сдвигсодержимого РДМ на разряд влево

ииз Ч0 вычитается делитель.

3.Если после завершения пункта 2 остаток отрицателен, то производится коррекция (к остатку прибавляется делитель, а из частного вычитается единица).

4.Остаток сдвигается вправо на k разрядов.

Описанную процедуру иллюстрирует пример, приведенный на рис. 7.54.

Рис.7.54.ПримерделенияцелыхчиселпоалгоритмуSRT

На первом шаге для удаления предшествующих нулей делитель сдвигается на два разряда влево. Аналогично поступают и с 40, который вначале совпадает с делимым. Далее выполняется процедура, описанная выше в пункте 2. Операция вычитания D обеспечивается прибавлением делителя с противоположным знаком. Поскольку по завершении операции остаток отрицателен, производится его коррекция путем прибавления D. Одновременно частноеуменьшается на единицу (эта операция показана в системе {-1,0,1}, в которой представлено частное). Наконец,

3 6 0 Глава 7. Операционные устройства вычислительных машин

на последнем шаге форма представления частного меняется, переходят к представлению в стандартной двоичной системе.

Встандартном алгоритме деления без восстановления остатка помимо сдвига

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

Деление в избыточных системах счисления

Наиболее распространенные методы ускорения операции деления основаны на применении алгоритмов, где частное представляется в системе счисления, отличной от двоичной. Это означает, что цифры частного могут иметь больше, чем два значения, например {-1,0,1}, как это было в алгоритме умножения Бута, или {-2, -1,0,1,2}. В таких системах одно и то же число может быть записано несколькими способами, из-за чего системы называют избыточными. Очередная цифра частного

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

вчастности надстраивается логика определения операции, выполняемой в очередной итерации. Для этой цели в состав устройства деления включается специальная память, хранящая таблицу, определяющую необходимые действия, в зависимости от текущей комбинации цифр в частичном остатке и делителе. Тем не менее выигрыш в быстродействии оказывается решающим моментом. Так, в микропроцессорах Pentium при делении мантисс чисел с плавающей запятой используется алгоритм SRT с базой 4, то есть частное сначала вычисляется с использованием цифр -2, - 1, 0, 1, 2 с последующим преобразованием результата к стандартному двоичному представлению. В этом варианте выбор очередной цифры частного производится с помощью таблицы, состоящей из отдельных секций. Конкретную секцию определяют четыре старшие цифры делителя (после его нормализации). Входом в секцию служат шесть старших цифр частичного остатка. Ч0 в каждой итерации сдвигается не на один, а на два разряда, то есть число итераций сокращается вдвое. Известны варианты делителей, где берется еще большее основание системы счисления, в частности 8 и 16. В этом случае логика работы устройства существенно усложняется.

Операционные устройства

 

с плавающей запятой

,

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

Операционные устройства с плавающей запятой 3 8 1

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

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

Напомним основные положения записи чисел в стандарте IEEE 754. Мантиссы чисел М представляются в нормализованном виде, при этом действует прием скрытого разряда, когда старшая цифра мантиссы, всегда равная единице, в записи числа отсутствует, то есть в поле мантиссы старшей является вторая старшая цифра нормализованной мантиссы.

В отличие от общепринятого условия нормализации S - /М/ < 1, в стандарте IEEE 754 используется условие 1 - /М/ < 2.

Запись числа содержит смешенный порядок, то есть порядок, увеличенный на величину смешения, которое в стандарте IEEE 754 для одинарного формата равно 127, а для двойного — 1023.

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

где( - нормализованные мантиссы операндов и результата; смещенные порядки операндов и результата; 0 — знак арифметической операции.

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

Подготовительный этап

Первой особенностью операционных устройств для чисел с плавающей запятой является то, что в них операции над тремя составляющими чисел с ПЗ (знаками, мантиссами и порядками операндов) выполняются раздельно: блоком обработки знаков (БОЗ), блоком обработки порядков (БОП) и блоком обработки мантисс (БОМ). Для хранения операндов и результата в ОПУ предусмотрены соответствующие регистры. Хотя эти регистры могут быть физически реализованы в виде единых устройств, каждый из них логично рассматривать как совокупность трех регистров: знака, порядка и мантиссы. Таким образом, на этапе загрузки операндов в регистры ОПУ осуществляется «распаковка» чисел с ПЗ, их разбиение на три составляющие. В ходе такой распаковки в старшем разряде регистра мантиссы восстанавливается единица, которая в записи числа отсутствовала (была скрыта).

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

3 8 2 Глава 7. Операционные устройства вычислительных машин

Заключительный этап

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

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

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

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

Впоследней фазе осуществляется "упаковка" всех составляющих результата (знака, порядка и мантиссы), после чего сформированный результат заносится

ввыходной регистр ОПУ.

Сложение и вычитание

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

1.Подготовительный этап.

2.Определение операнда, имеющего меньший порядок, и сдвигего мантиссы вправо на число разрядов, равное разности порядков операндов.

3.Приравнивание порядка результата большему из порядков операндов.

4.Сложение или вычитание мантисс и определение знака результата.

5.Проверку на переполнение.

6.Заключительный этап.

Операции предшествует вышеописанный подготовительный этап, в ходе которого операнды «распаковываются» и помещаются в регистры ОПУ,

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

Операционные устройства с плавающей запятой 3 8 3

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

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

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

Следующая фаза — сложение мантисс с учетом их знаков, что при одинаковых знаках мантисс может привести к переполнению. В последнем случае мантисса результата сдвигается вправо на один разряд, а порядок результата увеличивается на единицу. Это, в свою очередь, чревато переполнением поля порядка. Тогда операция прекращается и формируется признак переполнения, сопровождаемый соответствующим предупреждением (обычно в виде сигнала прерывания).

Далее выполняется описанный выше заключительный этап.

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

Умножение

На начальном этапе умножения чисел с ПЗ производится проверка на равенство нулю одного из сомножителей. Если один из операндов равен нулю, в качестве результата выдается 0, представленный в данном формате чисел с ПЗ. Следующий шаг — сложение порядков. Если в рассматриваемом формате используется смещенный порядок, то в полученной сумме будет содержаться удвоенное смешение, поэтому из нее необходимо вычесть величину смещения. Результатом действийспорядками можетстатькакпереполнение порядка,такипотерязначимости. В обоих случаях выполнение операции прекращается и выдается соответствующее сообщение (возникает прерывание).

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

3 8 4 Глава 7. Операционные устройства вычислительных машин

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

На последнем Шаге производится нормализация и компоновка результата, аналогично тому, как это имеет место при сложении и вычитании. Отметим, что при нормализации результата возможно переполнение порядка.

Деление

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

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

Следующий шаг — деление мантисс, за которым идут нормализация, округление и компоновка числа из мантиссы и порядка.

Реализация логических операций

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

К базовым логическим операциям относятся: логическое отрицание (НЕ), логическое сложение (ИЛИ) и логическое умножение (И). Этот набор, как правило, дополняют операцией сложения по модулю 2 (исключающее ИЛИ).

Рис.7.55.Структураоперационногоблокадлявыполнениялогическихопераций

Контрольные вопросы 3 8 5

Булева переменная в ВМ представляется одним битом, однако на практике логические операции в ОПУ выполняются .сразу над совокупностью логических переменных, объединенных в рамках одного байта или машинного слова, причем над всеми битами этого слова выполняется одна и та же операция. Поскольку каждый бит совокупности логических переменных рассматривается как независимая переменная, никакие переносы между разрядами не формируются. Операционный блок (ОПБ) для выполнения логических операций обеспечивает реализацию всех перечисленных логических операций. Возможная структура подобного ОПБ показана на рис. 7.55.

Выбор нужной операции осуществляется с помощью двухразрядного управляющего кода L (/1/0). С учетом управляющего кода выходная функция Zможет быть описана выражением:

Контрольные вопросы

1.Охарактеризуйте состав операционных устройств, входящих в АЛУ. Из каких соображений и каким образом он может изменяться?

2.Поясните понятие "операционные устройства с жесткой структурой"-. В чем заключается жесткость их структуры? Каковы их достоинства и недостатки?

3.Чем обусловлено название операционных устройств с магистральной структурой? Сравните магистральные структуры с жесткими структурами, выделяя достоинства, недостатки и область применения.

4.Дайте развернутую характеристику классификации операционных устройств с магистральной структурой. Поясните достоинства и недостатки «минимального» и «максимального» вариантов.

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

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

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

8.Охарактеризуйте суть двух групп логических методов ускорения умножения.

9.Попарно сравните алгоритм Бута, модифицированный алгоритм Бута, алгоритм Лемана.

10.Разработайте алгоритм умножения с обработкой за шаг трех разрядов множителя.

11.Поясните суть аппаратных методов ускорения умножения, выделив три возможных подхода.