На лекции говорили про операционные устройства, то есть устройства выполняющие операции над данными. На фоне этого затронули основной компромисс цифрового дизайна — повышение скорости работы требует увеличения аппаратных затрат.
Самый экономный способ расходования аппаратуры — это использование последовательных однобитных устройств (ОПБ — операционный блок), то есть таких, которые получают результат бит за битом. Следовательно, на расчёт n-битного числа потребуется n тактов.
Быстрой альтернативой, но требующей гораздо больших аппаратных затрат, является параллельные операционные устройства, высчитывающие сразу весь результат.
Например, параллельный умножитель k-разрядных чисел, потребует использования k-1 k-разрядных сумматора.
При реализации последовательного умножения можно обойтись одним (k * 2)-разрядным сумматором, и даже меньше, если последовательно вычислять частные суммы произведения.
Еще одной важной темой, которую мы затронули, пыли числа с фиксированной и плавающей запятой. Числа с фиксированной запятой фактически не отличаются от целых чисел. Их недостаток в том, что если после запятой оставить много знаков, то будет проблематично записать большое число. А если оставлять мало чисел после запятой, то наоборот. Проблему частично решают числа с плавающей точкой (запятой).
Общепринятым стандартом являются числа закодированные по стандарту IEEE754. 32-битный формат таких чисел называют float, а 64-битный называют — double. Такой формат является экспоненциальной записью двоичного числа и содержит три поля Sign (Знак, 1 — если число отрицательное), Exponent (Показатель степени) и Mantissa, а число представляется как мантисса умноженная на 2 в степени экспоненты. При этом экспонента сохраняется в смещённом формате, то есть из ее закодированного значения надо предварительно вычесть 127. Мантисса же записывается так, чтобы точка в числе стояла сразу после первой значащей цифры. При этом эта единица в поле Mantissa не записывается. Она называется подразумеваемой единицей.
В примере выше закодировано число 228. Числа, закодированные в таком формате, описывают не любые числа, а значит представляются с определенной погрешностью. Вдобавок, реализация аппаратных сумматоров, умножителей и делителей в формате с плавающей точкой, требует существенных аппаратных затрат, так как требуют определенное количество подготовительных операций, включающих в себя: сравнение экспонент, приведение мантисс к одному порядку, округлению, корректировке результата, а также управления всем этим процессом. Ниже приводится пример сумматора/вычитателя чисел с плавающей точкой.
Альтернативой неидеального стандарта IEEE754, является, возможно, чуть менее неидеальный, появившейся относительно недавно, стандарт posit, в котором используется дополнительное поле режима, имеющего переменную длину.
Согласно проведённому автором стандарта исследованию, числа закодированные posit имеют больший динамический диапазон, более равномерное распределение и обладают меньшим количеством неиспользуемых кодов.
Тема операционных устройств очень обширна и интересна. Чтобы повысить их производительность нужно прибегать к смекалке и хитрости, искать оригинальные математические решения. Сегодня такая задача часто возникает, например, при построении нейроускорителей выполняющих огромное количество операций сложения и умножения. К сожалению, подробный разбор существующих методов далеко выходит за рамки выделенного времени. Если тебя зацепило, в дополнительной литературе будут ссылочки.
- Ссылка на видеозапись лекции
- Понятно, наглядно и доступно про умножение и деление целых беззнаковых чисел [Харрис и Харрис. Цифровая схемотехника и архитектура компьютера — параграфы 5.2.6, 5.2.7]
- Наглядно про представление и сложение чисел с фиксированной и плавающей запятой (стандарт IEEE754) [Харрис и Харрис. Цифровая схемотехника и архитектура компьютера — параграф 5.3]
- Про вспомогательные системы счисления, переполнение при операциях со знаковыми числами и про умножение и деление знаковых чисел с фиксированной и с плавающей запятой. Автор суховат. Написать можно было бы доступней, но написано так, как написано. Если внимательно читать, то все понятно [Орлов и Цилькер. Организация ЭВМ и систем — Глава 5. начиная с параграфа 'Вспомогательные системы счисления' и до конца Главы останавливаясь на интересующих темах]
- Что касается различных оригинальных методов реализации цифровой арифметики (сложение, деление) со знаком и плавающей запятой, это находится там же где и 3 источник в основных материалах к лекции [Орлов и Цилькер. Организация ЭВМ и систем — Глава 5. начиная с параграфа 'Вспомогательные системы счисления' и до конца Главы]
- Про стандарт posit можно почитать в статье со средне-хорошим переводом на хабре или сразу в оригинале
- Есть отличная книга по цифровой операционным устройствам Digital arithmetic. Она на английском языке. Для ознакомления в образовательных целях ее можно найти в облаке в разделе Литература → Дополнительно
- Наглядно про распределения чисел в кодировке posit на числовой прямой (круге вообще-то) на разных интервалах и масштабах
- Есть потрясающий сайт. Частично на русском. Построенный в игровой форме симулятор сборки процессора. Игрок постепенно, выполняя задания с подсказками от простого к сложному, собирает процессор. При желании не обязательно игру проходить сразу полностью, можно это делать по мере изучения материала, для подкрепления, так сказать. Игра очень наглядна, а у тебя, возможно, есть друг, который сюда не заглядывает и делает все в последний момент. Наглядная игра ему не помешает. Давай, не ломайся, кинь ему ссылочку на сайт, он поиграет, разберется, а ты, наверняка, пройдешь больше, сможешь потом ходить и с видом борзой уточки говорить: «а я больше тебя прошел :Р». Короче, скорее заглядывай внутрь! Но лучше это делать с компьютера или ноутбука. Развлекайся