
Организация ЭВМ и систем / 351-400
.pdf
Целочисленное деление |
3 7 1 |
тель с сумматором одинарной длины. Неподвижный делитель D хранится в регистре одинарной длины, а делимое Z, сдвигаемое относительно D, находится в двух таких же регистрах. Образующиеся цифры частного Q заносятся в освобождающиеся при сдвиге Zразряды одного из регистров Z
Ниже на. примере чисел без знака рассматриваются два основных алгоритма целочисленного деления.
Деление с восстановлением остатка
Наиболее очевидный алгоритм носит название алгоритма деления с неподвижным делителем и восстановлением остатка. В учебнике он представлен в силу того, что очень похож на общепринятый способ деления столбиком. Данный алгоритм может быть описан следующим образом:
1.Исходное значение частичного остатка полагается равным старшим разрядам делимого.
2.Частичный остаток удваивается путем сдвига на один разряд влево. При этом
восвобождающийся при сдвиге младший разряд 40 заносится очередная цифра частного.
3.Из сдвинутого Ч0 вычитается делитель и анализируется знак результата вычитания.
4.Очередная цифра модуля частного равна единице, когда результат вычитания положителен, и нулю, если отрицателен. В последнем случае значение остатка восстанавливается до того значения, которое было до вычитания.
5.Пункты 2-4 последовательно выполняются для получения всех цифр модуля частного.
На рис. 7,48 показан процесс деления с восстановлением остатка, здесь число 41 делится на 8.
Деление без восстановления остатка
Недостаток затронутого алгоритма заключается в необходимости выполнения на отдельных шагах дополнительных операций сложения для восстановления частичного остатка. Это увеличивает время выполнения деления, которое в этом случае может меняться в зависимости от конкретного сочетания кодов операндов. В силу указанных причин реальные делители строятся на основе алгоритма деленияснеподвижнымделителембезвосстановленияостатка.Приведемописание этого алгоритма.
1, Исходное значение частичного остатка полагается равным старшим разрядам делимого.
2, Частичный остаток удваивается путем сдвига на один разряд влево. При этом в освобождающийся при сдвиге младший разрядЧ0 заносится очередная цифра частного.
3, Из сдвинутого частичного остатка вычитается делитель, если остаток положителен, и к сдвинутому частичному остатку прибавляется делитель, если остаток отрицательный.

3 7 2 Глава 7. Операционныеустройствавычислительных машин
Рис. 7,48. Пример деления с восстановлением остатка
4.Очередная цифра модуля частного равна единице, когда результат вычитания положителен, и нулю, если он отрицателен.
5.Пункты 2-4 последовательно выполняются для получения всех цифр модуля частного.
Как видим, пункты 1,2,5 полностью совпадают с соответствующими пунктами предыдущего алгоритма деления.
Процесс деления без восстановления остаткадля ранее рассмотренного примера демонстрируется на рис. 7.49.
Деление чисел со знаком
Как и в случае умножения, деление чисел со знаком может быть выполнено путем перехода к абсолютным значениям делимого и делителя, с последующим присвоением частному знака «плюс» при совпадающих знаках делимого и делителя либо «минус» — в противном случае.
Деление чисел, представленных в дополнительном коде, можно осуществлять не переходя к модулям. Рассмотрим необходимые для этого изменения в алгоритме без восстановления остатка.
Так как делимое и делитель не обязательно имеют одинаковые знаки, то действия с частичным остатком (прибавление или вычитание D) зависят от знаков остатка и делителя и определяются содержимым табл. 7,5:

Целочисленное деление 3 7 3
Рис.7.49. Примерделения без восстановления остатка
И Если знак остатка совпадает со знаком делителя, то очередная цифра частного — 1, иначе — 0.
- Ecли Z>0 и D< 0, частное необходимо увеличить на 1.
-Если Z < 0 и D > 0, то при ненулевом остатке от деления частное нужно увеличить на единицу.
-Если Z < 0 и D < 0, то при нулевом остатке от деления частное нужно увеличить на единицу.
Остаток всегда приводится к положительному числу, то есть если по завершении деления он отрицателен, к нему следует прибавить модуль делителя.
Устройство деления
Рассмотренный алгоритм деления без восстановления остатка может быть реализован с помощью устройства, схема которого приведена на рис. 7.50.
Процедура начинается с занесения делимого в 2n-разрядный регистр делимого (РДМ) иделителя вn-разрядныйрегистрделителя(РДТ). Всчетчикцикла(СЧЦ — на схеме не показан), служащий для подсчета количества полученных цифр частного, помещается исходное значение, равное п.

3 7 4 Глава7. Операционныеустройства вычислительных машин
Рис.7.50.Схемаделенияпоалгоритмубезвосстановленияостатка
На каждом шаге содержимое регистра делимого (РДМ) и регистра частного (РЧ)сдвигаетсянаодинразрядвлево.Взависимостиотсочетаниязнаковчастичного остатка и делителя определяется значение очередной цифры частного и требуемое действие: вычитание или прибавлениеделителя. Вычитаниеделителяпроизводится посредством прибавления дополнительного кода делителя. Преобразование в дополнительный код осуществляется за счет передачи делителя на вход сумматораобратным (инверсным)кодомс последующимдобавлением единицы кмлад-- шему разряду сумматора.
Описанная процедура повторяется до исчерпания всех цифр делимого, о чем свидетельствует нулевое содержимое счетчика циклов (содержимое СЧЦ уменьшается на единицу после каждой итерации). По окончании операции деления частное располагается в регистре частного, а в регистре делимого будет остаток от деления.
На заключительном этапе, если это необходимо, производится корректировка полученногорезультата, какэтопредусматриваеталгоритмделения чисел сознаком.
На практике для накопления и хранения частного вместо отдельного регистра используют освобождающиеся в процессе сдвигов младшие разряды регистра делимого.
Комбинированноеустройствоумножения/деления
Сходство процедур умножения иделения находитсвое отражение в близости структур соответствующих устройств (рис. 7.51).
Из подобия процедур вытекает очевидная идея реализации обеих операций с помощью единых технических средств, в виде комбинированного устройства ум- ножения-деления (рис. 7.52).

Целочисленное деление 3 7 5
Рис. 7.52. Комбинированное устройство умножения/деления
Видим, что для хранения операндов и результатов используются общие регистры. Усложнение связано, главным образом, с устройством управления, функции которого существенно расширяются, что, естественно, требует определенного увеличения аппаратурных затрат.

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