Программируя Вселенную. Квантовый компьютер и будущее науки - Ллойд Сет (читать книги бесплатно полные версии txt, fb2) 📗
Используемая для вычислений технология налагает естественные ограничения на расчеты, которые могут быть выполнены (например, счетные камешки сильно отличаются от «персоналки» Pentium IV). Каменный компьютер хорош для того, чтобы определять количество, складывать и вычитать, но на нем уже неудобно умножать и делить. К тому же чтобы иметь дело с большими числами, нужно очень много камней.
Несколько тысяч лет назад кому-то в голову пришла прекрасная идея объединить камень с деревом: если положить камешки в углубления на деревянной доске, их будет легче передвигать туда-сюда. Потом оказалось, что если использовать вместо камней бусинки, надетые на деревянные прутья, то их не только легко передвигать туда-сюда, но и трудно потерять.
Деревянный компьютер, такой как абак или русские счеты, – мощный вычислительный инструмент. До изобретения электронно-вычислительных машин опытный счетовод мог выполнять вычисления на счетах лучше обученного оператора суммирующей машины! Но абак – не просто удобная машина для того, чтобы перекладывать камешки. Она воплощает в себе важную математическую абстракцию – нуль. Понятие нуля оказалось наиболее важным элементом системы арабских цифр – системы, позволяющей обозначать сколь угодно большие величины и легко с ними управляться. Абак или счеты – механическое воплощение этой системы. Но что появилось раньше, привычные нам цифры или абак? Учитывая происхождение слова zero («нуль») и возраст первого абака, вполне возможно, что устройство возникло раньше, чем оформилась концепция нуля {1}. Иногда машины создают идеи.
А идеи создают машины. Сначала камень, потом дерево: какой материал мог бы стать следующим шагом в обработке информации? Кость. В начале XVII в. шотландский математик Джон Непер открыл способ заменить умножение сложением. Он вырезал из слоновой кости палочки, нанес на них логарифмические отметки, соответствующие тем или иным числам, и стал выполнять умножение, сдвигая палочки друг относительно друга так, чтобы установить правильным образом отметки, соответствующие двум сомножителям. Суммарная длина двух палочек давала произведение двух чисел. Это была первая логарифмическая линейка.
В начале XIX в. один эксцентричный англичанин по имени Чарльз Бэббидж предложил делать компьютеры из металла. Разностная машина Бэббиджа, предназначенная для вычисления элементов тригонометрических и логарифмических таблиц, должна была иметь в своей основе валы и шестерни, подобно паровому двигателю. Положение каждой шестерни задавало ту или иную информацию, а потом машина обрабатывала эту информацию, вводя шестерни в зацепление друг с другом и вращая их. Хотя машина Бэббиджа была полностью механической по своей конструкции, придуманный изобретателем способ организации информации предвосхищал методы, принятые в современных электронно-вычислительных машинах. В ней были центральный процессор и банк памяти, который мог хранить как программу, так и данные.
Несмотря на щедрую финансовую поддержку от британского правительства, Бэббиджу так и не удалось построить разностную машину. В начале XIX в. еще не было ни технологии прецизионной обработки металла, ни достаточно твердых сплавов для валов и шестерней. (Усилия его, однако, не пропали зря: инженеры Бэббиджа как раз и разрабатывали методы точной механической обработки металла и более прочные сплавы, и это значительно ускорило темпы промышленной революции.) К концу XIX в. уже существовали эффективные механические калькуляторы, но большим компьютерам пришлось дожидаться начала XX в., когда были изобретены электронные схемы.
К 1940 г. началась международная конкуренция между различными группами ученых, пытавшимися создать компьютер на основании электронных переключателей, например электронных ламп или электромеханических реле. Первую простую электронно-вычислительную машину в 1941 г. создал немецкий ученый Конрад Цузе. За ним последовали большие компьютеры, построенные в 1940-е гг. в Соединенных Штатах и Великобритании. Эти компьютеры представляли собой несколько комнат, заполненных электронными лампами, переключателями и источниками питания, но их вычислительная мощь была невелика – в миллион раз меньше, чем производительность компьютера, на котором я пишу эту книгу.
Эти первые электронные компьютеры стоили очень дорого, но оказались весьма полезными, что оправдывало усилия по их совершенствованию. В 1960-х гг. электронные лампы и электромеханические реле заменили транзисторами – полупроводниковыми переключателями, которые были надежнее, меньше по размеру и потребляли меньше энергии. Полупроводник – это материал (например, кремний), который проводит электричество лучше, чем изоляторы (например, стекло или резина), но хуже, чем проводники (например, медь). В конце 1960-х транзисторы удалось сделать еще меньше – их вытравливали в составе интегральных схем на кремниевой подложке, и эти схемы уже содержали все компоненты, необходимые для обработки информации, на одном полупроводниковом чипе.
Начиная с 1960-х гг. развитие фотолитографии – технологии изготовления все более сложных схем – приводило к уменьшению размеров компонентов интегральных схем примерно вдвое каждые восемнадцать месяцев. В результате производительность компьютеров удваивалась с той же скоростью. Это явление называется законом Мура. В настоящее время толщина соединений в интегральных схемах обычного компьютера составляет всего 1000 атомов.
Я бы хотел дать определения некоторых типов компьютеров, о которых мы будем говорить ниже. Цифровой компьютер – это вычислительная машина, которая применяет логические схемы к битам; цифровая машина может быть электронной или механической. Классический компьютер – это компьютер, выполняющий вычисления на основе законов классической механики. Классическая цифровая машина выполняет вычисления, проводя классические логические операции с классическими битами. Электронный компьютер выполняет вычисления с помощью электронных устройств, таких как электронные лампы или транзисторы. Цифровой электронный компьютер – это цифровой компьютер электронного типа.
Аналоговый компьютер оперирует не с битами, а с непрерывными сигналами; он так называется, потому что его, как правило, используют для создания вычислительных «аналогов» физической системы. Аналоговый компьютер также может быть электронным или механическим.
Наконец, квантовый компьютер действует на основании законов квантовой механики. У квантового компьютера есть и цифровые, и аналоговые аспекты.
Логические схемы
Чем занимаются наши все более мощные компьютеры? Они обрабатывают информацию, разбивая ее на биты и оперируя с ними, по нескольку битов за один раз. Как мы уже говорили, информация, которая должна быть обработана, представлена компьютеру в форме программы, ряда инструкций на машинном языке. Программа закодирована в память компьютера в виде последовательности битов. Например, команда print («печатать») в коде ASCII выглядит так: P = 1010000; R = 1010010; I = 1001001; N = 1001110; T = 1010100. Компьютер считывает программу по нескольку битов за шаг, интерпретирует эти биты как инструкцию и выполняет ее. Потом он видит следующие несколько битов и выполняет следующую инструкцию. И так далее. Сложные процедуры можно построить из наборов простых инструкций, но об этом мы поговорим позже.
Обычные компьютеры состоят главным образом из электронных схем, которые реализуют на физическом уровне логические схемы. Логические схемы позволяют составить сложные логические выражения из простых операций, воздействующих на несколько битов за один раз. Физически логические схемы состоят из битов, соединений и логических элементов. Биты, как мы видели, могут быть в состоянии или 0, или 1; соединения позволяют перемещать биты из одного места в другое; логические элементы преобразовывают биты по одному или попарно.
Например, логический элемент «не» (not) берет входной бит и инвертирует, «переворачивает» его: «не» превращает 0 в 1, а 1 в 0. Элемент «копировать» (copy) делает копию бита: он превращает входной бит 0 в два выходных бита 00, а входной бит 1 в два выходных бита 11. Элемент «и» (and) берет два входных бита и порождает один выходной бит, который равен 1 в том и только том случае, если оба входных бита равны 1; в остальных случаях на выходе элемента «и» появляется бит 0.