
Существует крайне любопытный технический парадокс: двоичная логика, на которой базируются все современные процессоры, математически не является оптимальной. Она уступает троичной системе по плотности упаковки данных. Как же так вышло?
В далеком 1956 году Николай Брусенцов из Вычислительного центра МГУ всерьез заинтересовался этой концепцией и сумел убедить академика Соболева выделить ресурсы под создание лаборатории. Спустя всего три года первая машина была запущена.
Компьютер получил название «Сетунь» — в честь реки, протекавшей рядом с университетом. Всего было произведено порядка полусотни экземпляров (источники разнятся в цифрах между 46 и 50). К великому сожалению, ни одна другая серийная ЭВМ в мире так и не перешла на троичную логику.
Давайте подробно разберем архитектуру этой машины, цифры и причины, по которым это направление было заброшено.
О терминологии
Термин «бит» происходит от английского binary digit (двоичная цифра). Поскольку в троичной ЭВМ двоичные цифры отсутствуют, потребовались новые единицы измерения.
Трит (ternary digit) — базовая единица троичной информации. Она принимает одно из трех состояний: -1, 0 или +1. По своей информационной емкости 1 трит равен log₂(3) ≈ 1.58 бита.
Трайт (tryte) — аналог байта. В «Сетуни-70» один трайт состоял из 6 тритов. Это позволяло кодировать 729 различных значений против 256 у стандартного байта при сопоставимой сложности схемотехники.
Симметричная троичная система (СТС) — позиционная система с основанием 3, использующая набор цифр {-1, 0, +1}. Знак числа здесь определяется автоматически самым старшим тритом, поэтому нужды в отдельном знаковом бите нет.

Почему двойка — не идеал?
Для позиционной системы с основанием r и n разрядами общее количество представимых чисел равно rⁿ. Стоимость аппаратной реализации пропорциональна произведению 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, позволяя вычитать или прибавлять индекс-регистр к адресу «на лету», заменяя собой целый блок команд адресной арифметики.
Система команд насчитывала всего 24 инструкции, оставляя огромный резерв при теоретическом максимуме в 3⁵ = 243 кода. Но главное — условный переход. В двоичных архитектурах требуется пара команд «перейти, если ноль» и «перейти, если не ноль». В «Сетуни» имелась одна команда с тремя вариантами исхода: меньше нуля, равно нулю, больше нуля. Результат сравнения возвращал не бит, а трит, по которому сразу происходило ветвление.
Здесь кроется реальное архитектурное преимущество: сокращение количества команд для типичного кода ведет к уменьшению памяти, упрощению декодирования и снижению вероятности ошибок.
Производительность составляла 4 500 операций в секунду при частоте 200 кГц. Сложение выполнялось за 180 мкс, умножение — до 360 мкс.
|
Параметр |
Сетунь (1959) |
IBM 650 (1954) |
БЭСМ-2 (1958) |
|
Элементная база |
Феррит-диод |
Электронные лампы |
Лампы + диоды |
|
Быстродействие |
4 500 оп/с |
~40 оп/с* |
8 000 оп/с |
|
Длина слова |
18 тритов (~29 бит) |
10 десятичных цифр |
39 бит |
|
ОЗУ |
81 слово |
60 слов |
2 048 слов |
|
Надежность |
Высокая |
Низкая |
Низкая |
Для сравнения: IBM 650 работала на магнитном барабане без оперативной памяти. Реальная производительность составляла около 40 инструкций в секунду из-за вынужденного ожидания нужной позиции барабана. Программисты вынуждены были вручную «оптимизировать» код, буквально выстраивая инструкции на барабане так, чтобы они считывались вовремя. Если расчет не удавался, машина простаивала.
«Сетунь» была лишена таких проблем: ферритовые сердечники обеспечивали молниеносное чтение без ожидания. БЭСМ-2 была быстрее, но ламповая база делала ее крайне ненадежной — постоянные поломки и замена ламп требовали огромного штата техников. «Сетунь» же отличалась завидной стабильностью.
У компьютера была двухуровневая память: быстрый ферритовый буфер на 81 слово и магнитный барабан на 2 000 слов с автоматической подкачкой страниц. Фактически, это прообраз современной виртуальной памяти и кэширования, которые в учебниках описаны десятилетиями позже.

«Сетунь-70» и предвосхищение стековых архитектур
В 1970 году Брусенцов представил модернизированную версию. Это был архитектурный прорыв с двумя аппаратными стеками — для данных и для возвратов подпрограмм. Отказ от адресов операндов в пользу обратной польской записи сделал ее по сути стековой виртуальной машиной.
На этой базе была создана ДССП (Диалоговая система структурного программирования). Стек, словари, интерпретатор, встроенная в ISA структура — всё это поразительно напоминало язык Forth, созданный Чарльзом Муром в те же годы независимо от советских разработок. Это не случайность, а пример того, как разные инженеры приходят к одинаковым логическим решениям в схожих условиях.
Причины забвения
Расцвет кремниевых транзисторов в середине 60-х кардинально изменил отрасль. Транзисторы идеально подходят для работы в двух состояниях (открыт/закрыт). Переход на три уровня требует сложной обвязки и страдает от температурного дрейфа. Хотя феррит-диодная база «Сетуни» успешно справлялась с задачей, адаптировать троичную логику под кремниевые интегральные схемы оказалось крайне непросто.
Кроме того, в 1968 году советская программа ЕС ЭВМ взяла курс на копирование западной архитектуры IBM System/360. Оригинальные, самобытные проекты вроде «Сетуни» лишились финансирования.
Последний экземпляр сошел с конвейера в 1965 году. Николай Брусенцов до конца жизни — до 2014 года — продолжал писать статьи, отстаивая перспективность своих идей.
Возможно, он был прав. Сегодняшние обсуждения BitNet b1.58 от Microsoft и попытки перейти на веса {-1, 0, +1} в нейросетях — это, по сути, возвращение к тем же вопросам, но спустя 60 лет и на другой технологической базе. Круг замкнулся.
Впрочем, коммерческих чипов с полноценной нативной тернарной арифметикой в массовом производстве до сих пор не существует.
Более глубокий разбор того, что представляют собой тернарные нейросети, как функционирует BitNet b1.58 и в какой точке развития мы находимся сейчас, можно найти в этом материале.


