Уменьшение размеров
Итак, моя третья тема — размер компьютерных элементов, и здесь мои предложения носят исключительно теоретический характер. Первое, о чем вам следует беспокоиться, когда изделие становится очень маленьким, — это броуновское движение
[7] — все вокруг движется, вибрирует, и ничто не стоит на месте. Как в таком случае можно контролировать схемы? Более того, если схема действительно работает, разве она не имеет возможности случайно совершить обратный скачок? Если мы возьмем обычно используемое напряжение 2 вольта для энергии такой электрической системы (Рис. 5), что в восемьдесят раз больше тепловой энергии при комнатной температуре (кТ = вольта), то вероятность скачка обратного перехода по отношению к тепловой энергии равно е-80 или 10–43. Что это значит? Если в нашем компьютере миллиард транзисторов (пока мы такого количества не имеем) и все они включаются 1010 раз в секунду (время включения составляет десятые доли наносекунды), включаясь непрерывно и работая 109 секунд, что составляет 30 лет, то полное число операций по переключению в такой машине равно 1028. Вероятность того, что один транзистор перейдет в обратное состояние, равна только 10–43, следовательно, никогда в течение 30 лет не произойдет ошибки, вызванной тепловыми осцилляциями. Если вам это не нравится, используйте напряжение 2,5 вольта, и тогда вероятность будет еще меньше. Задолго до этого случится реальная катастрофа, когда космические лучи случайно пройдут через транзистор — нет ничего хуже.
Однако в действительности возможности гораздо шире — я хотел бы сослаться на недавнюю статью в «Scientific American» С. Беннета и Р. Ландауэра «The Fundamental Physical Limits of Computation» («Фундаментальные физические ограничения вычислений»). Можно сделать компьютер, в котором каждый элемент, каждый транзистор может действовать как в прямом, так дополнительно и в обратном направлении, и все-таки компьютер будет работать. Все операции в компьютере можно проводить в обоих направлениях. Некоторое время вычисления продолжаются одним способом, а затем он сам считает результат недействительным, «развычисляется» и снова движется вперед — и так цикл продолжается. Если его немного переконструировать, можно заставить такой компьютер последовательно анализировать и заканчивать вычисления, чтобы он был более пригоден для расчетов вперед, а не назад.
Известно, что все допустимые вычисления можно выполнять, компилируя несколько простых элементов, например транзисторов; или, если вам нужны логические абстракции, работать с так называемой схемой NAND gate (схема НЕ-И). Такая схема требует два входных «провода» и один выходной (Рис. 6). Забудем на минуту про NOT (НЕ). Что такое схема AND (И)? Схема AND — это устройство с выходом 1, только если оба входных провода представляют 1, в противном случае его выход равен 0. Схема NOT-AND (НЕ-И) означает противоположное, таким образом, выходной провод вчитывается как 1 (то есть имеет уровень напряжения, соответствующий 1), если только оба входа не дают 1. Если же оба входных провода дают 1, то выходной провод читается как 0 (имеет уровень напряжения, соответствующий 0). На рис. 6 показана небольшая таблица входных и выходных данных для схемы NAND. Aw. В — входные данные, а С представляет выход. Если оба, А и В, равны 1, то выход есть 0, в противном случае 1. Но такое устройство необратимо: информация теряется.
Здесь я знаю только выход и не могу восстановить вход. Нельзя ждать, что устройство двинется рывком вперед, а затем вернется назад и вычислит что-нибудь правильно. Например, если мы знаем, что выход сейчас равен 1, мы не можем восстановить, произошло ли это от А = 0, В = 1, или А= 1, В = 0, или от А = 0, В = 0 — причем нельзя вернуться назад. Такое устройство представляет необратимую схему. Грандиозное открытие Беннета и независимо Фредкина состоит в том, что можно выполнять вычисления с различного рода фундаментальными схемами, например с обратимыми схемами. Проиллюстрирую их идею с помощью устройства, которое можно назвать обратимой схемой NAND. Оно имеет три входа и три выхода (Рис. 7). На выходе два значения А' и В' те же, что и на входе, а третий работает следующим образом. С' имеет то же значение, что и С, если только оба А и В не равны 1, в противном случае оно меняется, каким бы ни было С. Например, если С равно 1, С меняется на 0; если же С равно 0, то С меняется на 1 — но эти изменения происходят, если только оба входа А и В равны 1. Если вы поставите две эти схемы последовательно, вы увидите, что А и В проходят через схему, и если С не меняется, то С' равно С. Если же С меняется, оно меняется дважды, так что оно тоже остается постоянным. Следовательно, эта схема является обратимой, и информация не теряется.
Устройство, построенное целиком на таких схемах, выполняет вычисления при движении вперед. Но если в какой-то период времени происходит движение и вперед, и назад, в итоге оно продвигается вперед и все-таки работает правильно. Если в дальнейшем происходят рывки назад, а затем вперед, работа тем не менее остается скорректированной. Это похоже на то, как частица газа бомбардируется окружающими атомами. Такая частица обычно никуда не уходит, но при малейшем толчке, малейшей флуктуации возникает немного более вероятное движение по одному пути, а не по другому, и частица с медленным дрейфом смещается вперед и проходит от одного до другого конца, несмотря на существование броуновского движения. Так и наш компьютер будет вычислять при условии, что мы приложим дрейфовую силу, чтобы организовать вычисления. Хотя он и не выполняет вычисления плавно, он, во всяком случае, вычисляет и вперед, и назад и в конечном счете закончит работу. Как с частицей в газе, если мы ее слегка подтолкнем, она потеряет очень мало энергии, но зато ее путь от одного конца до другого займет достаточное время. Если мы спешим и подтолкнем частицу сильно — потеряем массу энергии. То же будет с компьютером. Если мы терпеливы и двигаемся медленно, мы можем заставить компьютер работать почти без потери энергии, с потерей, даже меньшей, чем кТ на один шаг — со сколь угодно малыми желаемыми потерями, — если располагаем достаточным временем. Но если вы спешите, вам приходится «транжирить» энергию, ясно, что энергия теряется на полное завершение вычислений компьютера в прямом порядке; потери энергии, умноженные на время, затраченное на выполнение вычислений, — величина постоянная.
Имея в виду эти возможности, давайте посмотрим, насколько малым можно сделать компьютер. Насколько велики будут размеры? Нам всем известно, что можно записать числа в двоичном базисе, как цепочки «битов», каждая цифра — единица или ноль. Каждый атом тоже можно занумеровать нулем или единицей, поэтому маленькой цепочки атомов будет достаточно для создания некоторого числа — один атом на каждый бит. (В действительности, так как атом может находиться более чем в двух состояниях, можно было бы использовать даже меньше атомов, но один на бит — вполне достаточно!) Итак, ради интеллектуального развлечения рассмотрим, можно ли построить компьютер, в котором записываются биты атомного размера, а бит, например, означает следующее: если спин атома направлен вверх, то это соответствует единице, а вниз — нулю. И тогда наш «транзистор», в котором в различных местах меняются биты, будет соответствовать некоторому взаимодействию между атомами, которые меняют свои состояния. Простейший пример — если что-то вроде 3-атомного взаимодействия будет фундаментальным элементом или схемой в таком компьютере. Очевидно, прибор не будет работать правильно, если мы сконструируем его в соответствии с законами, свойственными большим объектам. Мы должны использовать новые законы физики, квантово-механические законы, законы, присущие атомному движению (Рис. 8).