Другая проблема состоит в стандартизации языков программирования. Сегодня их существует слишком много, и мне кажется разумной идея просто выбрать один из них. (Я не решаюсь упомянуть, что в Японии должно существовать больше стандартных языков — поскольку у вас имеется четыре способа письма, я думаю, что попытки стандартизации чего-либо здесь, очевидно, приведут к еще большему числу стандартов, а не к меньшему!)
Другая интересная проблема будущего состоит в том, что лучше выполнять работу на автоматически отлаженных программах, но об этом я тоже не буду говорить. Отладка означает поиск ошибок в программе или в машине; но на редкость трудно отлаживать программы, когда они становятся все более сложными.
Еще одно направление усовершенствования — сделать машины трехмерными вместо построенных на чипах, расположенных на плоскости. Это должно быть сделано поэтапно, а не сразу — вы можете создать несколько слоев, а затем добавлять постепенно все большее их число. Другое важнейшее устройство — прибор, автоматически обнаруживающий дефектные элементы на чипе; тогда чип будет автоматически перезаписывать сам себя так, чтобы избежать дефектных элементов. В настоящее время, когда мы пытаемся делать большие чипы, в них часто образуются трещины или дефектные участки, и мы выбрасываем целиком весь чип. Если мы сможем использовать действующую часть чипа, эффективность станет намного выше. Я упоминал, что попытаюсь рассказать вам об известных мне реальных проблемах машин будущего. Однако то, о чем я хочу говорить, — простые, небольшие, технически и физически добротные вещи, которые можно в принципе сделать в соответствии с физическими законами. Иначе говоря, я хотел бы обсудить механизм, а не способ, которым мы используем машины.
Я буду рассказывать о некоторых технических возможностях для создания машин. Будут затронуты три темы. Одна — это машины с параллельной обработкой, представляющие устройства очень близкого будущего, почти настоящего, которые разрабатываются в настоящее время. Более отдаленное будущее — это вопрос о потреблении энергии машинами, который на первый взгляд кажется ограниченным, но в действительности это не так. И в заключение я буду говорить о размерах.
Всегда лучше иметь машины поменьше, и вопрос заключается в том, насколько малым может стать допустимый размер, чтобы в принципе машины согласовывались с законами природы? Я не буду обсуждать, какова и в чем состоит актуальность каждой из перечисленных проблем в будущем. Это зависит от экономических и социальных условий, и я не собираюсь ломать над ними голову.
Параллельные компьютеры
Первая тема касается параллельных компьютеров. Почти все современные компьютеры, обычные компьютеры, работают на компоновке или архитектуре, придуманной фон Нейманом
[6], в которой существуют очень большая память, где хранится вся информация, и одна центральная область, в которой проводятся простые вычисления.
Мы берем одно число из одного отдела памяти, а другое — из другого отдела памяти, посылаем их в центральное арифметическое устройство для их сложения, а затем отсылаем ответ обратно в некоторое место памяти. Существует, по сути, один центральный процессор, который работает очень-очень быстро и очень напряженно, в то время как память в целом не участвует в процессе и представляет быстрый картотечный ящик с файловой структурой, который очень редко используется. Совершенно очевидно, что чем больше процессоров работают одновременно, тем быстрее мы должны выполнять вычисления. Но здесь возникает затруднение: допустим, кому-то, работающему на одном процессоре, понадобится та же самая информация из памяти, что и другому, пользующемуся другим процессором, — и тогда все перепутывается. В связи со сказанным очень трудно разместить параллельно для работы много процессоров.
Некоторые шаги в этом направлении были предприняты на так называемых векторных процессорах. Если иногда вам необходимо выполнить одинаковые действия на многих различных элементах, вы, возможно, выполняете их одновременно. В принципе можно написать правильные программы стандартным способом, и тогда интерпретирующая программа автоматически поймет, когда полезно использовать эту векторную возможность. Такая идея применяется в компьютерах американской фирмы «Cray» и в японских «суперкомпьютерах». Другой проект состоит в том, чтобы взять большое число эффективно работающих относительно простых (но не слишком упрощенных) компьютеров и соединить их вместе в некоторую структуру. Тогда все они могут работать, составляя часть схемы. Каждый компьютер является совершенно независимым, причем они будут передавать информацию от одного к другому, когда один или другой в ней нуждается. Такого рода схема реализована, например, в Калтехе (Калифорнийском технологическом институте), в гиперкубе «Cosmic Cube», и представляет только одну из многочисленных возможностей. Сегодня многие конструируют такие машины. Другая возможность — распределить очень большое число очень малых центральных процессоров вокруг памяти. Каждый процессор общается только с малой частью памяти, и существует детально разработанная система взаимосвязей между ними. Примером такой машины является the Connection Machine (машина с переменной структурой связей с параллельными процессорами), созданная в MIT (Массачусетсом технологическом институте). Она имеет 64 000 процессоров и систему маршрутизации, в которой каждые 16 могут переговариваться с другими 16, и, таким образом, получается 4000 возможностей маршрутного соединения.
Многие научные задачи, такие, например, как прохождение волн через некоторые материалы, можно было бы очень легко решить, применив параллельное соединение процессоров. Дело в том, что происходящее в данной части пространства в некоторый момент времени может быть определено локально — нужно только знать давление и напряжение от соседних объемов. Ответ можно вычислить одновременно для каждого объема, и эти граничные условия соединяются с различными объемами. Вот почему такой тип модели работает для решения подобных задач. Если задача достаточно обширна, следует выполнить большой объем вычислений. Параллельное соединение компьютеров может значительно ускорить время решения задачи, и этот принцип применяется не только в решении научных задач.
Куда подевалось предубеждение двухлетней давности, будто параллельное программирование трудновыполнимо? Выходит, то, что было сложным и почти невыполнимым, вскоре станет обычной программой и продемонстрирует на примере этой программы эффективность параллельного соединения компьютеров. Принимая во внимание, что мы имеем возможность параллельных вычислений, нужно полностью переписать программы, по-новому переосмыслив, что происходит внутри машины. Невозможно эффективно использовать старые программы. Это колоссальное неудобство для большинства промышленных приложений, из-за этого идея может натолкнуться на значительное сопротивление. Но большие программы, как правило, дело ученых или специалистов — умных и способных программистов. Они любят свое дело и горят желанием начать все заново. Они готовы переписать программы, если это позволит сделать их более эффективными. Итак, следует перепрограммировать тяжелые, огромные программы новым способом, и когда все в конце концов придут к этому, появится все больше и больше новых программ и программисты научатся с ними работать.