70. Выключатели, которые считают
Порядок: Компьютер
выключатели → вычисление
- Из чего
- Из выключателей-транзисторов, собранных в логические вентили и процессор, из алгебры логики Буля и универсальной машины Тьюринга.
- Что нового
- Вычисление и программа: ни один выключатель не складывает и ничего не решает, а машина считает и по заложенным приоритетам выбирает, что важнее, причём на любом материале, от шестерёнок до кремния.
- Куда дальше
- Развилка на три ветви: машины одного хозяина работают вместе без общего диспетчера (Распределённая система), сети разных хозяев договариваются друг с другом, не подчиняясь никому (Интернет), или машину заставляют выводить программу из примеров (Нейросеть).
Лунный модуль «Аполлона-11» снижался к Луне 20 июля 1969 года, и до касания оставалось около семи минут, когда в кабине загорелся сигнал программной тревоги. Армстронг назвал Хьюстону код, 1202, и попросил объяснить, что он значит. Бортовой компьютер задыхался. Радар сближения, который при посадке вообще не нужен, без конца отвлекал его из-за несостыковки в питании: два источника тока работали на одной частоте, но не в такт, и машине казалось, что неподвижная антенна дрожит. Каждое мнимое вздрагивание отнимало у неё шаг счёта, и в сумме радар съедал около тринадцати процентов времени. Будто в самую трудную минуту жизни тебя всё время дёргают за рукав, и на пустяки уходит каждая восьмая секунда.
Машина не зависла. Программы для неё писала команда Приборной лаборатории Массачусетского технологического института, где разработкой бортового обеспечения руководила Маргарет Гамильтон. Работу в машине распределял диспетчер, знавший, какая задача важнее, а когда времени не хватало, программа перезапускалась, восстанавливала главное и выбрасывала остальное. Наведение и управление посадкой остались, второстепенное подождало. В Хьюстоне инженер Джек Гарман ещё на тренировках составил шпаргалку по кодам тревог и знал, что эти неопасны, пока не идут подряд. Он подсказал это офицеру наведения Стиву Бейлзу, тот сказал руководителю полёта «продолжаем», и Земля передала это экипажу. Тревоги повторялись ещё несколько раз, и корабль сел.
Ни один выключатель в этой машине ничего не решал. Их были тысячи, и каждый умел одно: открыть дорогу току или перекрыть её. Решения «посадка важнее радара» не было ни в одном из них, и всё же машина его приняла.
Выключатель, которым управляет не рука, а другой ток, называется транзистором: слабый ток открывает или закрывает дорогу сильному. Первый работающий транзистор тот же Бардин вместе с Уолтером Браттейном собрал в Лабораториях Белла в декабре 1947 года из того, что лежало на столе. Пластиковый треугольник, обёрнутый золотой фольгой с прорезью, прижимался к кусочку германия пружиной, согнутой из скрепки. Сам по себе транзистор не знает ни нуля, ни единицы: ток через него меняется плавно. Ноль и единицу придумали поверх. Схема считает всё, что ниже одного порога, нулём, всё, что выше другого, единицей, а промежуточное быстро отбрасывает, так же как клавиша выключателя света не задерживается посередине, а защёлкивается в одно из двух положений. Под этим этажом бегают те самые электроны и дырки, но вычисление их не замечает.
Дальше выключатели складываются в логику. Клод Шеннон в 1937 году, в магистерской работе, заметил, что цепи из реле в точности подчиняются алгебре, которую Джордж Буль за восемьдесят с лишним лет до того придумал, чтобы записывать законы мысли. Два выключателя, поставленные один за другим на одном проводе, дают «и»: лампа горит, только если нажаты оба. Два выключателя на параллельных проводах дают «или»: лампе хватит любого. Такой узел зовут логическим вентилем. Из вентилей собирают сумматор, а если замкнуть их в петлю, чтобы выход снова подавался на вход, получится ячейка, которая помнит один бит, один ответ «да» или «нет». Из сумматоров и ячеек собирают процессор. Сложение и память живут не в транзисторах, а в том, как они соединены: те же детали, соединённые иначе, будут не складывать, а сравнивать.
Алан Тьюринг ещё раньше, в 1936 году, когда программируемых машин не было вовсе, описал воображаемую машину из ленты, головки и таблицы правил. Он доказал, что одна универсальная такая машина выполнит работу любой другой, если дать ей описание этой другой. Программа стала данными: листком, который кладут в машину вместо того, чтобы строить новую машину под каждую задачу. Отсюда главное свойство этого порядка: вычислению безразлично, на чём идти. Бэббидж чертил свою Аналитическую машину на шестерёнках и так и не построил её, Конрад Цузе собрал машину из щёлкающих реле, ENIAC работал на электронных лампах, сегодня считают на кремнии. Даже клетчатая игра «Жизнь» Джона Конвея, правила которой умещаются в одну строку, может посчитать всё, что считает ноутбук, если хватит клеток и времени.
Масштаб здесь сменился на памяти одного человека. Оперативной памяти у компьютера «Аполлона» хватало примерно на страницу русского текста, эту главу он бы целиком не удержал. В первом поступившем в продажу микропроцессоре, Intel 4004, было около двух тысяч трёхсот транзисторов, столько же, сколько жителей в большом селе. В ускорителе Nvidia B200, вышедшем через полвека с небольшим, их двести восемь миллиардов, примерно в двадцать пять раз больше, чем людей на Земле. Всё это время число удваивалось примерно каждые два года. Последние удвоения даются труднее: в B200 уже не один кристалл, а два, собранные в одном корпусе.
Понять целое по частям при этом не удаётся даже тому, у кого в руках все части. В 2017 году Эрик Джонас и Конрад Кординг проделали опыт с процессором MOS 6502, который стоял в первых Apple и старых игровых приставках. У них была его компьютерная модель, верная до последнего транзистора, и они применили к ней методы, которыми изучают мозг. Выключая транзисторы по одному, они нашли те, без которых не запускается Donkey Kong. Как процессор складывает числа, из этого не следовало. Компьютер понимают не по транзисторам, а по этажам: программист пишет, не думая о кремнии, разработчик схем не думает о программе, и каждому хватает своего этажа. Один из этажей занимает операционная система, диспетчер, который решает, какая задача получит время сейчас, а какая подождёт. На «Аполлоне» такой диспетчер и решил, что посадка важнее радара.
Отсюда дерево расходится на три ветви, и все три выросли из того же листка Тьюринга. Можно позволить машине вывести программу из данных самой. Эта ветвь ведёт к нейросетям: компьютер перестают учить правилами и заставляют подгонять миллиарды чисел по примерам, и знание оказывается в числах, которых никто не писал. История с 6502 там повторяется: схема известна целиком, понимания нет. А раз программа — это данные, её можно передать по проводу другой машине. Из этого растут две другие ветви: машины одного хозяина, которые работают как одна, и сети разных хозяев, которые договариваются друг с другом и не подчиняются никому. Ни у тех, ни у других нет общего диспетчера, и решать, что важнее, машинам приходится сообща.