# Лекция 4. Операционные устройства

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

Самый экономный способ расходования аппаратуры — это использование последовательных однобитных устройств (ОПБ — операционный блок), то есть таких, которые получают результат бит за битом. Следовательно, на расчёт *n*-битного числа потребуется *n* тактов.

![../.pic/Lectures/04.%20Operations%20units/fig_01.png](../.pic/Lectures/04.%20Operations%20units/fig_01.png)

Быстрой альтернативой, но требующей гораздо больших аппаратных затрат, является параллельные операционные устройства, высчитывающие сразу весь результат.

Например, параллельный умножитель *k*-разрядных чисел, потребует использования *k*-1 *k*-разрядных сумматора.

![../.pic/Lectures/04.%20Operations%20units/fig_02.jpg](../.pic/Lectures/04.%20Operations%20units/fig_02.jpg)

При реализации последовательного умножения можно обойтись одним (*k* * 2)-разрядным сумматором, и даже меньше, если последовательно вычислять частные суммы произведения.

![../.pic/Lectures/04.%20Operations%20units/fig_03.png](../.pic/Lectures/04.%20Operations%20units/fig_03.png)

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

Общепринятым стандартом являются числа закодированные по стандарту IEEE754. 32-битный формат таких чисел называют float, а 64-битный называют — double. Такой формат является экспоненциальной записью двоичного числа и содержит три поля Sign (Знак, 1 — если число отрицательное), Exponent (Показатель степени) и Mantissa, а число представляется как мантисса умноженная на 2 в степени экспоненты. При этом экспонента сохраняется в смещённом формате, то есть из ее закодированного значения надо предварительно вычесть 127. Мантисса же записывается так, чтобы точка в числе стояла сразу после первой значащей цифры. При этом эта единица в поле Mantissa не записывается. Она называется подразумеваемой единицей.

![../.pic/Lectures/04.%20Operations%20units/fig_04.png](../.pic/Lectures/04.%20Operations%20units/fig_04.png)

![../.pic/Lectures/04.%20Operations%20units/fig_05.png](../.pic/Lectures/04.%20Operations%20units/fig_05.png)

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

![../.pic/Lectures/04.%20Operations%20units/fig_06.png](../.pic/Lectures/04.%20Operations%20units/fig_06.png)

Альтернативой неидеального стандарта IEEE754, является, возможно, чуть менее неидеальный, появившейся относительно недавно, стандарт posit, в котором используется дополнительное поле режима, имеющего переменную длину.

![../.pic/Lectures/04.%20Operations%20units/fig_07.png](../.pic/Lectures/04.%20Operations%20units/fig_07.png)

Согласно проведённому автором стандарта исследованию, числа закодированные posit имеют больший динамический диапазон, более равномерное распределение и обладают меньшим количеством неиспользуемых кодов.

![../.pic/Lectures/04.%20Operations%20units/fig_08.png](../.pic/Lectures/04.%20Operations%20units/fig_08.png)

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

## Основные материалы лекции

1. [Ссылка](https://www.youtube.com/watch?v=7YQWjSkhquI) на видеозапись лекции
2. Понятно, наглядно и доступно про умножение и деление целых беззнаковых чисел [***Харрис и Харрис***. *Цифровая схемотехника и архитектура компьютера* — параграфы 5.2.6, 5.2.7]
3. Наглядно про представление и сложение чисел с фиксированной и плавающей запятой (стандарт *IEEE754*) [***Харрис и Харрис***. *Цифровая схемотехника и архитектура компьютера* — параграф 5.3]
4. Про вспомогательные системы счисления, переполнение при операциях со знаковыми числами и про умножение и деление знаковых чисел с фиксированной и с плавающей запятой. Автор суховат. Написать можно было бы доступней, но написано так, как написано. Если внимательно читать, то все понятно [***Орлов и Цилькер***. *Организация ЭВМ и систем* — Глава 5. начиная с параграфа 'Вспомогательные системы счисления' и до конца Главы останавливаясь на интересующих темах]

## Дополнительные материалы к лекции для саморазвития

1. Что касается различных оригинальных методов реализации цифровой арифметики (сложение, деление) со знаком и плавающей запятой, это находится там же где и 3 источник в основных материалах к лекции [***Орлов и Цилькер***. *Организация ЭВМ и систем* — Глава 5. начиная с параграфа 'Вспомогательные системы счисления' и до конца Главы]
2. Про стандарт posit можно почитать в статье со средне-хорошим переводом на [хабре](https://habr.com/ru/post/465723/) или сразу в [оригинале](http://www.johngustafson.net/pdfs/BeatingFloatingPoint.pdf)
3. Есть отличная книга по цифровой операционным устройствам [Digital arithmetic](https://www.sciencedirect.com/book/9781558607989/digital-arithmetic). Она на английском языке. Для ознакомления в образовательных целях ее можно найти в облаке в разделе Литература → Дополнительно

## Популярные материалы

1. [Наглядно](https://cse512-19s.github.io/FP-Well-Rounded/) про распределения чисел в кодировке *posit* на числовой прямой (круге вообще-то) на разных интервалах и масштабах
2. Есть [потрясающий сайт](http://nandgame.com/). *Частично* на русском. Построенный в игровой форме симулятор сборки процессора. Игрок постепенно, выполняя задания с подсказками от простого к сложному, собирает процессор. При желании не обязательно игру проходить сразу полностью, можно это делать по мере изучения материала, для подкрепления, так сказать. Игра очень наглядна, а у тебя, возможно, есть друг, который сюда не заглядывает и делает все в последний момент. Наглядная **игра** ему не помешает. Давай, не ломайся, кинь ему ссылочку на сайт, он поиграет, разберется, а ты, наверняка, пройдешь больше, сможешь потом ходить и с видом борзой уточки говорить: «а я больше тебя прошел :Р». Короче, скорее [заглядывай внутрь](http://nandgame.com/)! Но лучше это делать с компьютера или ноутбука. Развлекайся

![../.pic/Lectures/04.%20Operations%20units/fig_09.jpg](../.pic/Lectures/04.%20Operations%20units/fig_09.jpg)
