# Лекция 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)