Как Сетунь обогнала время и проиграла кремнию

от автора

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

Аж в 1956 году Николай Брусенцов из Вычислительного центра МГУ взял этот факт всерьез и убедил академика Соболева дать ему лабораторию. Через три года машина работала.

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

Вот и разберемся — в архитектуре, цифрах и в том, куда это все делось.

Немного про необычные термины

Слово «бит» — это сокращение от binary digit, двоичная цифра. В троичной машине двоичных цифр нет, поэтому и единицы измерения другие.

Трит (ternary digit) — минимальная единица троичной информации. Принимает три значения: -1, 0 или +1. По информационной емкости 1 трит = log₂(3) ≈ 1.58 бита.

Трайт (tryte) — аналог байта. В Сетуни-70 — 6 тритов. Покрывает 729 значений против 256 у байта при схожей схемотехнике.

Симметричная троичная система (СТС) — позиционная система с основанием 3 и цифрами {-1, 0, +1}. Знак числа определяется старшим тритом автоматически. Отдельного знакового бита нет.

Оптимальное основание — это не 2

Для позиционной системы счисления с основанием r и n разрядами можно записать r^n чисел. Стоимость машины пропорциональна числу элементов — то есть r × n. Если минимизировать это произведение при фиксированном диапазоне чисел, производная обнуляется при r = e ≈ 2.718.

Двойка проигрывает. Тройка — ближайшее целое к e. С информационной точки зрения тернарная система на ~5% эффективнее двоичной по числу элементов при том же объеме данных. Не гигантский выигрыш, но при сотнях тысяч ячеек это реальная экономия железа.

Кроме того, в СТС знак числа встроен в саму арифметику. 18-тритное слово покрывает диапазон от -193 710 244 до +193 710 244 без отдельного знакового бита, без дополнительного кода, без ручных манипуляций со знаком. Просто работает.

Как реализовать трит на обычных элементах

Нормальных троичных транзисторов в 1950-е не было. Брусенцов взял за основу феррит-диодные ячейки Гутенмахера — бесконтактные магнитные усилители на ферритовом сердечнике с диодом. Никаких ламп в логической части. Только феррит и диод. Отсюда, собственно, и высокая надежность — феррит не перегорает как лампа.

Трит хранился как два двоичных разряда с запрещенной комбинацией:

  • 00 → значение -1

  • 01 → значение 0

  • 10 → значение +1

  • 11 → запрещено, не используется

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

Архитектура, которая удивляет даже сейчас

Слово — 18 тритов. Это примерно 29 двоичных бит. Инструкция делится на три части — 5 тритов на код операции, 1 трит на модификатор адреса, 12 тритов на сам адрес.

Модификатор адреса — тоже элегантная деталь. Один трит принимает три значения: -1, 0, +1. Если -1 — вычти индекс-регистр из адреса. Если 0 — без изменений. Если +1 — прибавь. Один разряд заменяет целый набор команд адресной арифметики.

Система команд — всего 24 инструкции. При теоретическом максимуме в 3^5 = 243 кода запас колоссальный. Но главное — условный переход. В двоичной машине нужно две команды: «перейти если ноль» и «перейти если не ноль». В Сетуни — одна команда с тремя исходами: меньше нуля, равно нулю, больше нуля. Сравнение возвращает не бит, а трит. И ветвление работает по нему напрямую.

Тут, кстати, и скрыто одно из реальных архитектурных преимуществ. Меньше команд на типовой управляющий код — меньше памяти, меньше декодирования, меньше ошибок.

Производительность — 4 500 операций в секунду при тактовой частоте 200 кГц. Сложение занимало 180 мкс, умножение — до 360 мкс.

Параметр

Сетунь (1959)

IBM 650 (1954)

БЭСМ-2 (1958)

Элементная база

Феррит-диод

Электронные лампы

Лампы + диоды (~9000 эл.)

Быстродействие

4 500 оп/с

~40 оп/с*

8 000 оп/с

Длина слова

18 тритов (~29 бит)

10 десятичных цифр

39 бит

ОЗУ

81 слово

60 слов (опц.)

2 048 слов

Надежность

Высокая

Низкая

Низкая

IBM 650 работала на магнитном барабане без быстрой памяти — реальная пропускная способность около 40 инструкций в секунду из-за ожидания нужной позиции барабана. Цифра в 1000 оп/с встречается в маркетинговых материалах IBM.

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

У Сетуни этой проблемы не было — ферритовые сердечники отвечали за 180 мкс на сложение без всякого ожидания.

БЭСМ-2 быстрее — 4000 ламп и 5000 диодов давали 8000 операций в секунду. Но лампы горят. Реально горят, физически. Ламповые машины того времени требовали замены элементов каждые несколько дней, иногда чаще. При 4000 ламп в системе это постоянная работа технического персонала, запас расходников, простои. Сетунь на феррит-диодной базе работала без этого.

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

Сетунь-70 — наша стековая машина за год до Forth

В 1970 году Брусенцов выпустил модернизацию. Архитектурно — полный разрыв с оригиналом, но, увы, ей не суждено было стать серийной и существовала она как исследовательский прототип.

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

На ней создали ДССП — Диалоговую систему структурного программирования. Стек, словари, интерпретируемый режим, структурированные конструкции прямо в ISA. Практически то же, что Чарльз Мур сделал с языком Forth в 1968-1970 годах — только независимо и под троичную машину.

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

А почему производство закрыли?

Кремниевый транзистор к середине 1960-х изменил экономику вычислений. Физика транзистора заточена под два состояния — открыт или закрыт. Три уровня на кремнии требуют дополнительной схемотехники, точных порогов напряжения и дают нестабильность при температурных дрейфах. Феррит-диодная база Сетуни это обходила, но к кремниевым интегральным схемам приспособить троичную логику оказалось нетривиально.

Советская программа ЕС ЭВМ, запущенная в 1968 году, взяла курс на совместимость с IBM System/360. Двоичная архитектура, стандартизация под западные разработки. Оригинальные проекты, в том числе Сетунь, к сожалению, финансировались по остаточному принципу.

Последний экземпляр Сетуни сошел с конвейера Казанского завода математических машин в 1965 году. 

Брусенцов продолжал работать до 2014 года — до последнего. Писал статьи, доказывал, что мир свернул не туда.

Возможно, был прав. В 2025-2026 году весь разговор про BitNet b1.58 от Microsoft, получается, фактически тот же вопрос — что если считать не в FP16, а в {-1, 0, +1}? Круг замкнулся, просто через 60 лет и на другом железе.

Коммерческих чипов с нативной тернарной арифметикой по-прежнему нет. 

Мы разбирали это подробнее в отдельном материале — что такое однобитные и тернарные нейросети, как работает BitNet b1.58 и где это всё сейчас находится.

 

ссылка на оригинал статьи https://habr.com/ru/articles/1032808/