Карта → событие
«Первый набросок»: программа переезжает в память
Сто одна страница, разосланная в июне
Летом 1945 года в Мурской школе электротехники Пенсильванского университета достраивали ЭНИАК — машину на восемнадцати тысячах ламп, считавшую баллистические таблицы. Достраивали и уже знали её главный порок: чтобы перевести ЭНИАК на новую задачу, надо было переставить провода в коммутационных панелях и выставить сотни переключателей. Это занимало дни. Считала машина в тысячи раз быстрее человека — а переналадка съедала выигрыш.
Группа, строившая ЭНИАК (Джон Преспер Эккерт, Джон Мокли, Герман Голдстайн), обсуждала преемницу — EDVAC. С осени 1944-го к обсуждениям присоединился Джон фон Нейман, приезжавший то из Принстона, то из Лос-Аламоса.
Весной 1945-го фон Нейман записал то, к чему пришли. Голдстайн размножил рукопись на ротаторе и 30 июня разослал две дюжины экземпляров.
«First Draft of a Report on the EDVAC» — «Первый набросок отчёта об EDVAC». Сто одна машинописная страница.
Отчёт был не дописан в буквальном смысле: в тексте остались пустые места под ссылки, библиографии нет вовсе, слово Draft стоит прямо в заглавии. На титуле стояло одно имя.
Этот черновик задал устройство почти всех вычислительных машин, построенных с тех пор.
Что в нём написано
Первое, что бросается в глаза, — в отчёте почти нет электроники. Фон Нейман описывает не лампы, а органы: части, каждая из которых делает одно дело. Язык он берёт из работы Мак-Каллока и Питтса о нервных сетях (1943) и говорит об элементах, которые срабатывают или не срабатывают. Нарочно так: чтобы конструкция не зависела от того, на чём её собирают — на лампах, на реле или на чём-то ещё не изобретённом.
Органов пять: память, арифметическое устройство, устройство управления, ввод и вывод.
Но главное не в списке органов. Главное — в одной фразе, из которой следует всё остальное:
Команды и числа лежат в одной и той же памяти и записаны одинаково.
Почему это переворот
До этого программа была не текстом, а состоянием железа. У Бэббиджа она приходила на отдельных перфокартах, у ЭНИАКа задавалась проводами и переключателями, у релейных машин — бумажной лентой, которая протягивалась мимо считывателя и ничего о себе не помнила. Программа жила отдельно от чисел и была устроена иначе, чем они.
Как только команда — такое же число в такой же ячейке, машина получает право обращаться с программой как с данными. Из этого немедленно выходит всё, чем компьютер отличается от арифмометра:
- цикл: команда правит собственный адрес, и один и тот же кусок программы обходит сколько угодно ячеек;
- подпрограмма: адрес возврата вычисляется и кладётся в память;
- транслятор: программа, которая читает текст и пишет другую программу;
- операционная система: программа, которая запускает программы.
Всё это — следствия одного решения, принятого в 1945 году, и ни одно из них в отчёте не названо.
Где это уже было — у Тьюринга
Ровно та же мысль лежит в основе универсальной машины Тьюринга 1936 года: описание машины пишется на ту же ленту, где лежат данные, и потому одна машина может изображать любую другую. Разница в жанре. У ТьюрингаАлан ТьюрингОпределил, что значит «вычислить», за десять лет до появления компьютеров, взломал «Энигму» и был осуждён за то, кем он был. это теорема — доказательство, что универсальная машина существует. В «Первом наброске» это чертёж: сколько органов, что между ними ходит, в каком виде хранится. Фон Нейман работу Тьюринга знал хорошо — они пересекались в Принстоне, и фон Нейман звал его к себе ассистентом.
Обратный ход тоже случился: прочитав «Первый набросок», Тьюринг осенью 1945-го пишет для Национальной физической лаборатории собственный проект машины — ACE, устроенный иначе и во многом смелее.
Одно имя на титуле
Дальше начинается то, что на этой карте встречается регулярно, — спор о первенстве.
Отчёт был внутренним черновиком, но Голдстайн разослал его за пределы проекта. По американскому патентному праву это считалось публикацией. Из-за неё Эккерт и Мокли, у которых конструкция EDVAC отчасти и была взята, не смогли запатентовать ни хранимую программу, ни ртутные линии задержки: их собственная идея за год до подачи заявки стала общественным достоянием.
Весной 1946 года оба ушли из университета и основали свою фирму; их машина UNIVAC (1951) станет первой серийной в США. А в 1973 году суд по делу Honeywell против Sperry Rand признал патент на ЭНИАК недействительным, и одним из оснований был как раз «Первый набросок»: опубликовано слишком рано.
Отсюда и несправедливость имени. «Архитектура фон Неймана» — конструкция коллективная, и авторы этого названия сами всю жизнь возражали против него. Тут стоит вспомнить Листинга, у которого первенство отняли дважды: имя пристаёт не к тому, кто придумал, а к тому, кто написал текст, который прочли.
Справедливости ради: собственную часть работы фон Нейман сделал, и немаленькую. Он единственный видел задачу целиком — от нервных сетей и логики до баллистики, метеорологии и ошибок округления, — и умел изложить конструкцию так, чтобы её понял человек, не строивший ЭНИАК.
Что было дальше
Летом 1946-го в той же Мурской школе прочли восьминедельный курс лекций для двадцати восьми приезжих инженеров — так конструкция разошлась по миру. Дальше события идут быстро:
| Манчестер, «Baby» | 21 июня 1948 | первая машина, выполнившая программу из памяти |
| Кембридж, EDSAC | 6 мая 1949 | первая рабочая машина для регулярных расчётов |
| Феофания под Киевом, МЭСМ | 1950–1951 | первая на континенте |
| Принстон, машина Института перспективных исследований | 1951 | проект опубликован открыто и скопирован по всему свету |
| Сам EDVAC | 1951 | опоздал на шесть лет к собственному отчёту |
Принстонскую машину фон Нейман нарочно не патентовал и рассылал её чертежи всем желающим. С неё скопированы MANIAC в Лос-Аламосе, ILLIAC в Иллинойсе, WEIZAC в Реховоте, SILLIAC в Сиднее — десяток «родственников» с созвучными именами.
А в 1977 году Джон Бэкус, автор фортрана, в лекции по случаю премии Тьюринга назвал единственный канал между памятью и арифметикой «узким местом фон Неймана»: процессор ждёт память, и чем быстрее он становится, тем дольше ждёт. Претензия, высказанная почти полвека назад, за это время только выросла — но перестроить конструкцию так никто и не сумел.
Программа, которая не растёт
Надо сложить сто чисел, лежащих в памяти подряд.
Без цикла программа состоит из ста команд сложения — по одной на число.
С циклом — из семи ячеек: обнулить сумматор; прибавить содержимое ячейки; прибавить единицу к адресу внутри предыдущей команды; сравнить адрес с концом массива; вернуться; записать ответ; стоп.
Во сколько раз короче программа для ста чисел? А для тысячи? Что произойдёт с обеими программами, если чисел станет миллион?
(Ответ: для ста — примерно в 14 раз, для тысячи — в 143. Но важно не это: программа с циклом не зависит от количества чисел вообще, её длина остаётся семь ячеек. Ровно это и даёт хранимая программа: правя собственный адрес, семь команд обходят сколько угодно памяти. Для миллиона чисел первая программа просто не поместится ни в одну машину, а вторая останется прежней.)
Следующая точка: Лос-Аламос — где на новой машине первым делом начнут считать то, для чего формулы нет вовсе.