Как построить компьютер из домино?
Если изучение математики можно сравнить с исследованием заросших джунглей, при котором вы постепенно пробиваете себе путь вперед, то компьютеры можно сравнить с внезапно доступными вам вертолетами. Да, для того чтобы увидеть все детали, вам нужно быть на земле, однако если вы прыгнете в вертолет и взлетите на достаточную высоту, то сможете быстрее и лучше понять особенности ландшафта, изучить большую территорию, чем при пешем походе, а может быть, и увидеть что-то интересное и расположенное достаточно далеко.
Разумеется, людям необходимо разбираться с множеством тонкостей математики — в конечном счете вся цель процесса состоит в том, чтобы изучить и понять подспудную логику нашей Вселенной, — однако мы можем значительно ускорить этот процесс с помощью вычислительных мощностей.
Мы уже видели, к какому скачку это привело в процессе изучения простых чисел Мерсенна: компьютеры способны проверить, является ли число простым, на много порядков быстрее, чем люди. Древние греки знали о четырех простых числах Мерсенна, а ко временам Люка было найдено всего десять таких чисел, последнее — в 1883 году. Дальнейшие пробелы были заполнены в 1914 году, когда были найдены 12 наименьших простых чисел Мерсенна. Выявление шести чисел за тысячелетие — это довольно медленный темп открытия. Но уже за первый год после включения компьютеров в 1952 году было найдено еще пять чисел. Хотя находить следующие простые числа Мерсенна стало все сложнее, а расстояние между ними стабильно росло, к 1971 году количество найденных чисел удвоилось и составило 24. Менее чем через двадцать лет было найдено столько же простых чисел, что и за два предшествующих тысячелетия. Общее количество простых чисел Мерсенна выросло к 1997 году до 36, а по состоянию на 2014 год их число увеличилось в четыре раза, до 48. Наибольшее из известных в 1914 году простых чисел Мерсенна состояло из 39 цифр; через сто лет, в 2014 году, размер самого большого из таких чисел вырос более чем до 17 миллионов цифр.
Это, впрочем, не значит, что компьютеры позволили нам лучше понять суть простых чисел Мерсенна; мы просто смогли найти некоторое их количество. Компьютеры, использующиеся в проекте GIMPS, применяют тот же самый тест простоты, который был разработан Люка и Лемером. Изменилась не сама математика, а лишь объем ее вычислительных мощностей. Аналогичным образом, поскольку гипотеза Римана настолько важна для понимания плотности простых чисел, компьютеры могут проверить закономерность Римана, проявляющуюся в простых числах, чтобы убедиться в том, что она справедлива для больших чисел.
Однако математика никогда не сможет доказать истинность гипотезы или дать ответ, почему эта закономерность присутствует в принципе. Если бы нам удалось найти какое-либо исключение, это привело бы к опровержению гипотезы и оказало бы огромное влияние на современную математику. Но пока что все, что мы можем сказать, это что гипотеза Римана была проверена более чем для 10 триллионов значений, и все выглядит идеально. Пока что.
Кроме того, в математике имеются области, такие как «проблема четырех красок» и гипотеза Кеплера относительно упаковки сфер, для которых у нас теперь есть доказательства, отчасти сделанные компьютером. Такие компьютеры — это не просто калькуляторы: они делают огромный объем проверки самостоятельно, поскольку она зачастую бывает просто не по силам обычным людям. А теперь у нас еще появились и проекты типа Flyspeck Project, в которых компьютеры используются для проверки доказательств, предложенных другими компьютерами. Вне зависимости от вашего мнения о том, может ли считаться «правильной» математикой работа, которую за нас делает компьютер, мы можем согласиться, что компьютеры в наши дни играют большую роль в математике и, судя по всему, мы будем полагаться на них всё больше и больше.
С учетом всей важности компьютеров для передового мира математики нам стоит получше разобраться с тем, как они работают. Пока что это знает довольно мало людей. Разумеется, мы можем изучить алгоритмы и в какой-то степени понять, как писать программы, говорящие компьютеру, что ему нужно сделать. Но как он выполняет эти команды в реальности? Как он может читать и понимать ваши инструкции? Кто-то может сказать, что это происходит в результате взаимодействия между жестким диском, памятью, процессором и другими частями компьютера.
Однако вопрос состоит не в том, как мы выстроили свои нынешние компьютеры, а в том, почему мы вообще смогли создать компьютер как таковой. Знание большинства людей о том, как работают компьютеры, достигает своего тупика задолго до того, как мы успеваем понять, каким образом компьютер способен думать самостоятельно.
Хотя человеку свойственно наделять мотивацией неодушевленные объекты и представлять их самостоятельно думающими агентами, имеются некоторые физические системы, для которых это истинно. Мы окружены устройствами, способными на базовые размышления и реакцию на мир вокруг них, — это и вполне очевидные компьютеры и смартфоны, и автоматические ворота при входе в метро или стиральные машины. Внутри их всех находятся электрические цепи, которые занимаются самостоятельными расчетами.
В каждом из этих устройств располагаются электрические цепи, и именно они делают все вычисления. Набор проводов и электрических компонентов способен тем или иным образом отвечать на входящие сигналы, производить расчеты и выдавать ответы. То, каким образом физический объект может реагировать на входящий сигнал и выбирать подходящий ответ, может привести в замешательство большинство людей, однако в этом и состоит основа всех вычислений. И здесь не обязательно должна скрываться тайна — более того, вы можете создать свой собственный простой компьютер без какой-либо электроники. Но вам понадобится около 10 тысяч костяшек домино. Впрочем, начать вы можете примерно с сотни.
Концепция машины или объекта, способного автоматически «мыслить», известна уже в течение очень долгого времени; легенды о различных автоматах известны чуть ли не с доисторических времен. В IV веке до н. э. математик (и участник школы Пифагора) Архит Тарентский придумал и, возможно, даже сконструировал механического голубя.
Автоматические создания достигли своего сюрреалистического пика в 1739 году, когда была сконструирована «автоматическая утка»: этот механизм, результат навязчивого стремления французов к автоматизации, умел «есть» зерно и «выделять» отходы. Наверняка это устройство было в центре множества диких вечеринок того времени. Но нас интересуют не неодушевленные объекты, способные имитировать наши действия, а те, которые способны воспроизводить наше сознание.
Механические счетные устройства также известны нам с древности. Как только люди уставали от расчетов, они находили способ создать машину и переложить эту работу на нее. Некоторые из этих древних устройств были связаны с астрономическими расчетами, позволявшими предсказывать события на небе. Одним из самых интересных механизмов был так называемый Антикитерский механизм, созданный в период примерно от 150 до 100 г. до н.э.
Он был способен производить сложные расчеты траектории Солнца и Луны, а возможно, и некоторых из пяти планет, известных в то время. Однако самое удивительное состоит в том, что мы вообще знаем о его существовании.
Единственный уцелевший экземпляр Антикитерского механизма был найден в 1900–1901 годах неподалеку от греческого острова Антикитера, в обломках античного корабля, затонувшего примерно в 70 году до н. э. Механизм был похож на одну шестеренку, застрявшую в большом куске камня. Со временем из ила на морском дне достали еще несколько фрагментов машины. В итоге в распоряжении ученых оказалось около тридцати различных шестеренок, сделанных с поразительным уровнем детализации. Уровень мастерства при их изготовлении показывал, что это не какое-то экспериментальное устройство, а что-то очень сложное и хитроумное. В нем не было никаких лишних отверстий или видоизмененных частей, что могло бы свидетельствовать о постепенном улучшении механизма; казалось, что устройство изначально было спроектировано таким образом, чтобы его было легко открывать и обслуживать. И хотя все бронзовые части и методы их обработки вполне соответствовали технологиям и навыкам того времени, изготовитель устройства проявил уровень мастерства, достичь которого создатели других часовых механизмов не могли еще тысячу лет.
Потребовалось почти целое столетие для того, чтобы воссоздать механизм и понять, как он устроен и зачем нужен. Огромную помощь в этом процессе оказали современные устройства технической визуализации, позволившие понять, где именно в механизме располагались не дошедшие до наших дней фрагменты, и внимательно изучить внутреннее устройство механизма. С помощью компьютерной томографии у нас появилась возможность изобразить трехмерные части Антикитерского механизма, используя ряд двухмерных слоев, которые затем анимируются и показывают, как работает машина. На видео этого процесса можно увидеть, как шестеренки различного размера с разными количествами зубцов появляются и исчезают, некоторые из них зацепляются друг за друга, а другие меняют свое положение.
Компьютерные сканы различных частей Антикитерского механизма
Воссоздав эти механизмы, мы узнали, что шестеренки выполняли астрономические вычисления. Механизм мог предсказывать астрономические события задолго до их наступления. Существует целый ряд теорий относительно того, почему до наших дней не дошли другие подобные механизмы. По всей видимости, процессу сохранения совсем не помогало то, что устройства строились из очень дорогого металла (а для того чтобы бронза сохранилась в изначальном виде, требовалось кораблекрушение), однако моя любимая гипотеза состоит в том, что Антикитерский механизм представлял собой секретную военную технологию того времени, и поэтому мы так мало знаем о ней. Способность предсказать точный момент возникновения затмения и исчезновения Солнца с неба давала отличную возможность контролировать поведение людей.
Антикитерский механизм мог делать свои расчеты благодаря количеству зубцов на различных шестеренках и способу их соединения. В определенный момент было достаточно лишь переместить одну рукоятку, чтобы начать предсказывать, как будет выглядеть небо в будущем. Люди воссоздали механизмы, используя те же самые шестеренки, что и в изначальном механизме, и им удалось повторить те же расчеты. Моя любимая копия этого механизма находится в Google (физическом здании Googleplex, не на сайте) — это Антикитерский механизм, полностью сделанный из деталей лего. Однако, несмотря на всю гениальность конструкции, этот механизм вряд ли можно назвать прообразом компьютера. При перемещении рукоятки вы каждый раз получаете один и тот же ответ. Первым человеком, которому удалось выстроить компьютер, способный следовать более интересным алгоритмам, был английский математик XIX века Чарльз Бэббидж.
К 1800-м годам одним из самых частых помощников в расчетах были книги, заполненные таблицами с цифрами. По сути, эти книги представляли собой гигантские списки ответов для расчетов, над которыми ранее трудились другие люди. Вы могли взять сложный расчет, разделить его на меньшие, а потом просто найти ответ для каждого из них. Проблема состояла в том, что создание этих сборников стандартных ответов представляло собой долгий и дорогостоящий процесс, а сами они были далеко не безупречными. С учетом того, что они содержали тысячи ответов, вероятность ошибок в них была довольно высокой. Сложно было понять, правилен ли найденный вами ответ, и даже небольшая ошибка могла разрушить результаты дальнейшей работы. И именно страх ошибок в этих таблицах вдохновил создателя первого компьютера в мире.
Как мог бы выглядеть Антикитерский механизм, если бы у древних греков было лего.
Бэббидж рассказывал, что идея машины для вычислений пришла к нему в голову, когда он еще учился в университете. Один из соучеников нашел его в раздумьях над книгой с математическими таблицами. Когда товарищ спросил Бэббиджа, о чем он мечтает, тот ответил: «Я думаю, что все эти таблицы можно рассчитать с помощью какого-нибудь устройства». Бэббиджа осенило, что создавать эти таблицы с помощью машины будет быстрее, дешевле и точнее. Возможно, он представлял себе машину, созданную из шестеренок и управляемую паровой тягой, однако конечный результат оказался похожим скорее на современный смартфон, чем на Антикитерский механизм.
Позднее, уже после окончания учебы в университете, Бэббидж действительно сконструировал то, что сам называл Разностной машиной, — сложную систему, способную рассчитывать значения для различных уравнений. Это было не совсем то, что мы могли бы назвать компьютером, однако эта конструкция все же позволила решить проблему ошибок в математических таблицах. Он убедил британское правительство дать ему денег на ее строительство, однако в процессе работы понял, что может сделать и более совершенную машину, и поэтому так и не завершил строительство первой. Свою новую машину он назвал Аналитической. Она казалась значительно более сложной, чем Разностная машина, и ее уже можно было назвать компьютером.
Революционная концепция Аналитической машины состояла в том, что она не настраивалась определенным образом для решения конкретной проблемы, а могла обрабатывать различные алгоритмы для работы. Чтобы сделать свою машину программируемой, Бэббидж позаимствовал идею из другой прорывной технологии того времени — ткацкого станка. В автоматических станках имелись специальные гнезда для карт с отверстиями, проделанными в соответствии с той или иной закономерностью. Крюки в станке активировались и деактивировались (подобно рудиментарным переключателям) в зависимости от того, где в карте были сделаны отверстия, и станок добавлял в ткань соответствующие закономерности. Бэббидж решил использовать карты для передачи Аналитической машине информации о том, какие алгоритмические шаги ей нужно делать.
Поскольку при работе с этой машиной вы могли вводить нужную программу вместе с любыми входящими данными, которые хотели бы обработать, эта Аналитическая машина удовлетворяла всем требованиям к современному компьютеру — вот почему мы называем Бэббиджа «отцом компьютера». К сожалению, мы не знаем, смогла бы эта машина работать или нет, поскольку Бэббидж так ее и не построил. После его смерти в 1871 году в возрасте 79 лет никто другой так и не смог воспользоваться его планами и завершить строительство. По крайней мере, до 1991 года, когда сотрудники Музея науки в Лондоне после нескольких лет работы все же построили Разностную машину в соот-ветствии с планами Бэббиджа и с использованием доступных ему инструментов и методов работы XIX века. И она работает! То, что подходит для Аналитической машины — работающей в теории, — также работает на практике.
Разностная машина, построенная в лондонском Музее науки
Я бы наделил титулом «Отец компьютера» Алана Тьюринга, это вызвано тем, что, хотя Бэббидж и придумал конструкцию возможного компьютера, Тьюринг в 1936 году описал в абстрактных терминах основные требования к этому устройству.
Не удовлетворившись теоретическими объяснениями, Тьюринг в годы Второй мировой войны начал работу в британском шифровальном центре в Блечли-парке, где был создан первый в мире цифровой программируемый электронный компьютер Colossus. Поскольку он был спроектирован и сконструирован с использованием секретных военных технологий, никто не знал о нем ничего на протяжении нескольких десятилетий. Однако сразу же после войны люди из Блечли-парка разъехались по различным научным учреждениям по всему миру и внезапно начали с большим успехом создавать множество «первых в мире» компьютеров — как если бы каким-то образом уже знали, что это возможно. Тьюринг принял участие в работе нескольких таких проектов, а затем начал работать в Университете Манчестера, где имелся первый электронный компьютер с цифровым хранилищем в мире.
Создатель Аналитической машины смог предвосхитить все это, и, хотя сама машина не была ни цифровой, ни электронной, она поддавалась программированию. И несмотря на то, что машина не была построена, для нее были написаны алгоритмы. Когда Бэббиджу потребовалось перевести ряд комментариев относительно машины после лекций, прочитанных им в Италии, он обратился к Аде Байрон (более известной под своим титулом графини Лавлейс), а она впоследствии расширила перевод бонусным разделом под названием «Комментарии переводчика».
В этом разделе она наглядно продемонстрировала, что не только перевела текст, но и разобралась с тем, как работает машина, и даже смогла поразмышлять над ее потенциалом. Первым, на что она обратила внимание, был неизмеримый рост потенциала Аналитической машины по сравнению с Разностной. По ее словам,
Аналитическая машина, со своей стороны, адаптирована не просто для отображения результатов одной определенной функции и никакой другой, а для изучения и отображения любой из задаваемых функций.
Однако причина, по которой эти заметки имеют столь высокую историческую важность в наши дни, связана с самым последним их разделом, который называется «Комментарии G». Не могу сказать об этом лучше, чем сама
Лавлейс:
Мы завершим эти комментарии описанием детальных шагов, с помощью которых машина может рассчитать числа Бернулли. Приведенная нами форма решения позволяет справляться даже со сложными примерами степеней чисел.
Числа Бернулли образуют очень сложную последовательность, и их довольно сложно рассчитать. Однако в этом комментарии Лавлейс написала то, что стало первой в мире компьютерной программой, позволявшей Аналитической машине рассчитать эти числа. Лавлейс работала с Бэббиджем над созданием алгоритма для работы на первом в мире компьютере еще до того, как он был построен. И это принесло Аде Лавлейс титул первого в мире компьютерного программиста. Не могу не отметить, что все это произошло уже в 1842 году.
Это также позволило Лавлейс быть упомянутой в книге Люка Recreation matimatiques. Книга была опубликована через несколько лет после смерти Ады Лавлейс (она скончалась от рака матки в 1852 году в возрасте 36 лет). Люка обсуждал работу Бэббиджа и Ады, даже не представляя себе, что в будущем могут появиться другие подобные машины. В книге Люка есть глава о вычислительных устройствах, и Люка назвал ее «Вычисления и вычислительные машины» (Le calcul et les machines а calculer).
В середине книги он уделил несколько абзацев Аналитической машине, продемонстрировав удивительный уровень предвидения относительно того, насколько большую важность эта машина получит в будущем. Затем его предвидение совершило еще один скачок в разделе с названием «Электрическая арифметика» (Arithmetique electrique).
Как-то раз я перелистывал Rйcrйations mathйmatiques с целью найти побольше информации о Бэббидже и Лавлейс. Внезапно, несмотря на мое слабое знание французского, мне в глаза буквально бросились слова arithmetique electrique, которые я тут же перевел как «электрическая арифметика». Люка писал в то время, когда уже была изобретена электрическая лампочка; прошло немногим более половины столетия с того времени, как Георг Ом впервые изучил и проанализировал электрические цепи; а первые электронные «переключающие компоненты» должны были появиться всего через 50 лет.
В конце 1800-х годов невозможно было представить себе ничто напоминающее современную электрическую цепь, однако Люка видел в этом направлении изрядный потенциал. Он много обсуждал идеи изобретателя Анри Генайя, утверждая, что
этот человек только что изобрел новое, однако неполное
устройство; тем не менее он смог сформулировать важ-
ный принцип электронной счетной машины.
Стоит помнить, что Люка писал все это в довольно ироничной манере, еще не представляя себе, что когда-нибудь в компьютерах будут использоваться электрические цепи.
Электрический мозг
Слава богу, что Люка оказался прав и электрические машины оказались способны на вычисления, поскольку без электрических цепей мы бы застряли в мертвой точке. Хотя Бэббидж и спроектировал компьютер для самого широкого применения, а Лавлейс написала для него программы, в те времена было невозможно масштабировать механическую машину такого типа, работающую на пару или ручной тяге, для того чтобы получить хоть что-то похожее на вычислительные мощности, к которым мы привыкли в наши дни.
Аналитическая машина высотой более двух метров и весом свыше десяти тонн могла хранить в своей памяти лишь около тысячи чисел из 40 цифр (что сопоставимо с нынешними 20 килобайтами памяти) и осуществлять семь расчетов в секунду. Это был тупик, неспособный привести к появлению компьютеров, которые мы принимаем за данность в наши дни. Такая машина просто была не в состоянии хранить в миллиард раз больше данных, работать в миллиард раз быстрее и при этом умещаться у нас в руке и обновлять для нас твиты.
Для работы современных компьютеров необходимы электрические цепи. Тот факт, что эти машины сегодня такие маленькие и такие быстрые, подразумевает (к сожалению), что большинство людей совершенно не представляют себе, что именно делает компьютер. Компьютерный процессор выглядит как небольшой серый пластиковый прямоугольник, но в реальности он содержит в себе сложные цепи, по которым с бешеной скоростью движутся электронные сигналы. Чтобы увидеть нечто подобное своими глазами, мы можем выстроить аналогичные типы электрических цепей с помощью костяшек домино. Найдите примерно сотню костяшек, и мы с вами начнем строить цепи для простых расчетов.
Прежде всего обратим внимание на так называемые логические ворота или вентили. Их можно считать «кирпичиками» электрических цепей. Каждый логический вентиль может использовать определенные двоичные входящие значения и выдавать стандартные двоичные значения на выходе. Мы берем двоичные единицы и нули, поскольку сигнал либо течет по цепи, либо нет; проволока в компьютерной цепи либо переносит ток, либо нет.
В случае цепи домино костяшка либо падает, либо продолжает стоять на месте. В современных электрических цепях высокое напряжение приравнивается к 1, а низкое — к 0. Аналогичным образом мы можем посчитать, что падающее домино обозначает 1, а стоящее — 0. Как известно, вы можете записать любое число в двоичной системе, поэтому единицы и нули — это все, что вам нужно для отображения любого числа и проведения над ним расчетов.
Два логических вентиля, которые мы будем строить, это ворота AND и XOR (сокращение от exclusive or — «исключающее „или“»). Оба они имеют два входящих значения и одно значение на выходе. AND пропускает входящий сигнал дальше к выходу, только если оба входящих значения активируются одновременно. XOR пропускает сигнал к выходу, только если активирован либо один входной сигнал, либо другой (но не оба вместе). Иными словами, в этом и заключается эксклюзивность — набор входящих значений может быть либо одним, либо другим. Мы можем показать происходящее в каждом случае с помощью таблицы, а ниже я покажу, как выстраивать их с помощью костяшек домино.
Ворота AND
Ворота XOR
Мы можем использовать эти логические вентили для решения арифметических задач. Помните: значение на выходе для XOR возникает при активации лишь одного из значений на входе; а AND дает вам возможность знать, когда активизируются оба входящих значения. Если мы можем соединить эти ворота в одну цепь с двумя значениями на выходе, у нас получится сеть из костяшек домино, способная посчитать количество активированных входящих сигналов. На выходе мы получаем количество активированных входящих значений, выраженное в виде двоичного числа. Это значение носит название «полусумматор». Совмещая два из них, мы получаем полный сумматор, который берет три входящих значения и выдает двоичную сумму двух цифр, показывающих общее количество активированных входящих значений.
Полусумматор
Полный сумматор
Полные сумматоры — это все, что вам нужно для двоичного сложения любого размера, поскольку двоичные числа достаточно легко складывать. В данном случае количество возможных вариантов невелико. Если в десятеричной системе вам нужно складывать 4 и 7 или 2 и 9, в двоичной форме вы либо добавляете 0 к 1, либо 1 к 1 (либо 0 к 0, но это вряд ли заслуживает внимания). Такое ограниченное количество случаев делает весь процесс очень прямолинейным. Для демонстрации этого давайте сложим 11 и 30 в двоичной форме. При изменении системы счисления 11 превращается в 1011, а 30 — в 11110. Как и в десятеричной системе сложения, мы записываем эти числа одно над другим, начинаем с цифр справа и постепенно перемещаемся влево, завершив сложение в очередной колонке.
С первой колонкой все просто: 1+0=1, поэтому мы можем записать под ней число 1. Следующая колонка немного сложнее: нам нужно сложить 1 и 1. В нормальных условиях ответ был бы равен 2, однако в двоичной системе нет соответствующего символа, поэтому мы не можем записать 2 в качестве ответа. Значение 2 в двоичной системе выглядит как 10. Поэтому мы делаем то же самое, что делали бы в нормальной арифметике на основе десятеричной системы, и «переносим» 1 — что имеет смысл: этот столбец имеет номер 2, поэтому мы складываем 2 и 2, что дает нам 4, и эту цифру мы переносим в следующий столбец. Следующий шаг ненамного сложнее: нам нужно сложить три единицы. Это просто предполагает, что мы записываем в качестве результата 1 и переносим еще одну единицу в следующую колонку.
Вы можете увидеть, что каждый шаг предполагает суммирование до трех единиц и нулей, а потом два действия с исходящими значениями: запись результата и возможный перенос цифры. Все это можно сделать с помощью полного сумматора. Для сложения двоичных чисел вам потребуется длинная цепочка полных сумматоров, по одному для каждой колонки суммы.
Для создания полусумматора вам потребуется около двух или трех тысяч костяшек домино. Я знаю это точно, потому что сам пробовал это сделать. Впервые идея логических вентилей из домино пришла ко мне несколько лет назад, когда кто-то отправил мне ссылку на сайт с теоретическим описанием этой концепции. Я провел тщательный поиск в интернете, но не смог найти никого, кому удалось бы собрать из домино хотя бы полусумматор. Хотя я и нашел на YouTube несколько видео, в которых результат был почти достигнут, однако их создатели мошенничали и склеивали костяшки домино вместе. Кроме того, цепи были достаточно хрупкими и не обеспечивали должного уровня надежности.
Для успеха требовалось, чтобы костяшки домино падали в четко определенное время. Я же хотел спроектировать полный сумматор, способный работать в реальном мире. Со временем я смог решить задачу в теории. Конструкция этой цепи приведена в разделе «Ответы в конце книги». Теперь мне было нужно достаточное количество костяшек домино, чтобы связать их в единую цепь. И поэтому я купил десять тысяч костяшек домино.
Как-то раз в выходные, во время научного фестиваля в Манчестере в октябре 2012 года, я вместе с дюжиной других добровольцев смог расставить и сбалансировать тысячи костяшек домино в форме сложных цепей, способных производить расчеты. Создать наш полусумматор было достаточно сложно. Подобно реальным интегрированным цепям, впечатанным в плату, цепочки домино не могут пересекать друг друга.
Компьютерные цепи — это планарные графы. Однако в нашем случае была очень важна длина каждой линии домино. Вы можете заметить, что нам пришлось изгибать линии так, что они начинали напоминать зигзаги, двигавшиеся назад и вперед: они представляли собой «линии задержки», позволяющие замедлить сигнал и убедиться в том, что все предыдущие расчеты завершены до начала следующего шага. Цепь из 10 000 костяшек домино имела еще больше проблем, однако у меня была команда математиков, готовая прийти на помощь.
В конце первого дня, с опозданием от графика всего на полчаса, мы завершили работу над цепью. Она могла суммировать любые два двоичных числа из трех цифр каждое и выдавать результат, состоявший из четырех цифр. Для ввода дополнительных чисел мы оставили разрывы во входящих цепочках домино, которые могли оставаться пустыми, означая ноль, или заполненными, что означало единицы. У нас имелась одна длинная цепочка костяшек домино, двигавшаяся по сложным траекториям вдоль базы цепи и разветвлявшаяся для того, чтобы соединиться со всеми шестью входящими цепочками. Мы выбрали случайным образом два числа — ими оказались 4 (100 в двоичной системе) и 6 (110).
Итак, для того чтобы задать 4, мы оставили разрыв во входящих цепочках для единиц и двоек, но заполнили цепочку домино для четверок; для того чтобы задать 6, мы также оставили разрыв в цепочке единиц, но заполнили разрывы в цепочках для двоек и четверок. К этому моменту вокруг нас собралась изрядная толпа.
Мы собирали свой компьютер в середине главного холла Музея науки и промышленности в Манчестере, и люди подходили к нам в течение всего дня и часто терпеливо ждали, пока кто-нибудь случайно не подтолкнет одну из костяшек в цепи. Компьютеру из домино потребовалось 48 секунд, чтобы прогнать сигнал через все логические вентили, и в итоге упали только костяшки, обозначавшие двойки и восьмерки, составив результат 10 (1010 в двоичном счислении).
10 тысяч костяшек домино готовы к началу вычислений!
Толпа пришла в безумное ликование! С учетом того, что настройка системы заняла шесть часов, это, вероятно, был самый неэффективный в истории спо-соб сложить 6 и 4 и получить ответ 10. Или, как отметили некоторые злорадные зрители, мы потратили целый день, чтобы доказать, что 6+4=2+8.
Но главным остается то, что мы смогли воссоздать тот фундаментальный элемент, на котором основано действие всех компьютеров. Если бы у нас не было ограничений по количеству костяшек, мы могли бы выстраивать всё более длинные цепи и заставлять их осуществлять всё более сложные задачи. Научившись складывать числа, вы можете настроить свою монтажную плату на умножение, деление и даже расчет квадратных корней. Конечно, для этого нужно решить ряд технических проблем, например создание блока памяти из костяшек домино с возможностью автоматической перезагрузки, однако в теории у нас почти нет никаких разумных ограничений.
Впрочем, как уже было сказано выше, такие физические системы масштабируются не очень хорошо. Если бы мы хотели провести на нашем компьютере из домино второй расчет, нам потребовался бы еще один день для того, чтобы расставить все костяшки заново. А электрическая цепь не разрушается в процессе проведения расчетов, поэтому, когда после одного расчета все логические вентили обнуляются, вы можете отправить в систему следующий. Современный процессор делает это миллиарды раз в секунду. Прямо сейчас, когда я печатаю эти строки на своем ноутбуке, где-то на заднем плане работает его процессор с частотой 2,7 ГГц (2,7 гигагерц — показатель того, как много раз в секунду могут запускаться логические вентили компьютера). Точнее, этот показатель демонстрирует, сколько раз процессор может провести определенную операцию за секунду, при этом каждая операция может включать в себя более одного расчета. Так что это довольно слабый показатель для сравнения. Более правильным было бы рассчитывать число операций с плавающей точкой в секунду (этот показатель называется FLOPS). Я бы сказал так, что это несколько быстрее, чем в случае костяшек домино.
По самым грубым расчетам, для создания и настройки нашего компьютера из домино потребовалось шесть часов, то есть даже если ваша команда будет работать круглосуточно, этот компьютер не сможет производить более четырех расчетов в день. Это невероятно низкая скорость — одна операция каждые 21 600 секунд означает, что скорость соответствующего процесса равна всего 46,3 микрогерц.
Таким образом, мой ноутбук в 58 триллионов раз быстрее компьютера на базе домино.
Расчеты, которые мой ноутбук проводит за одну секунду, потребовали бы от команды, использующей костяшки домино, работать круглосуточно почти 2 миллиона лет. И хотя у меня в распоряжении была потрясающая команда добровольцев, требовать от них подобных усилий было бы слишком.
Тем не менее на следующий день мы все же перестроили цепь так, чтобы взять два входных значения по четыре цифры для формирования суммы из пяти цифр.
К сожалению, у нас не было ни дополнительных костяшек, ни дополнительного пространства, поэтому нам пришлось сделать цепь одновременно более эффективной и более компактной — что также является важной задачей при проектировании современных интегрированных цепей для компьютеров. Однако что-то пошло не так, точнее, сразу две вещи. Мы немного снизили допуски в цепочках задержки, чтобы сэкономить на костяшках, однако сократили одну цепочку слишком сильно, из-за чего блокирующий сигнал, закрывавший логический вентиль, возник уже после того, как другой сигнал прошел дальше. Вторая ошибка была в том, что некоторые из цепочек оказались слишком близко друг к другу, в результате чего сигнал исказился (техническое и более приятное название для этой ситуации — «взаимные помехи»). Одна угловая костяшка домино упала и перекатилась в сторону достаточно далеко, чтобы подтолкнуть костяшки в соседней цепочке и запустить фантомный сигнал.
Но что мне особенно понравилось, так это то, насколько наглядными кажутся обе эти проблемы при создании миниатюрной копии реальной компьютерной схемы. В дополнение ко всем проблемам с задержкой реакции, возникающим в цепях, если вы поместите два «провода» слишком близко друг к другу, ток в одном из них способен привести к возникновению тока в другом.
Разрешение экрана просто ужасное!
В совокупности с искажениями сигналов и для электронов, и для домино проектирование эффективной цепи — это настоящее искусство. Как и следовало ожидать, большинство современных интегрированных цепей проектируются компьютерами, но иногда для них требуется и человеческая изобретательность. Когда компания Apple выпустила в 2012 году смартфон iPhone5, эксперты вскоре заметили, что компоненты, из которых состоит его процессор A6, были спроектированы и размечены вручную.
Конструкция цепи представляет собой одну из главнейших проблем прикладной математики. И если эта тема вас заинтересовала, я могу одолжить вам 10 тысяч костяшек домино…
1166
2021.12.19 22:06:25