За время обучения я не изучал компьютерные технологии, поэтому вся моя деятельность в области проектирования базировалась исключительно на личном опыте и необходимости решения текущих задач. В общем-то, и все мои достижения в сфере компьютерной архитектуры укладываются в рамки короткой автобиографии.
Я вырос на ферме в восточной части штата Южная Дакота и восемь лет провел в одной школе, где не было электричества, поэтому мои технические знания ограничивались в основном механическим оборудованием. Осенью 1941 года я поступил на механический факультет Университета штата Южная Дакота, но вскоре понял, что это не мое, и занялся изучением математики, химии, электротехники и физики. Вторая мировая война ворвалась в мою жизнь в начале первого курса. Меня призвали в военно-морской флот, где впервые пришлось столкнуться с электроникой. Вернувшись в 1947 году в университет, основной своей специальностью я выбрал физику и в 1948 году получил диплом. Затем, получив приглашение организации Wisconsin Alumni Research Foundation, начал заниматься теоретической физикой в Университете штата Висконсин в Мэдисоне. Для физики это было необыкновенное время — в конце 1949 года были открыты «странные частицы», получившие впоследствии название «мезонов». В тот период я вместе с двумя другими аспирантами пытался выяснить, могут ли силы взаимодействия между ядерными частицами адекватно характеризовать процессы в ядре трития (изотопа водорода, ядро которого состоит из одного протона и двух нейтронов). На протяжении месяца мы терзали восьмиразрядный настольный калькулятор с логарифмической линейкой и пытались получить хотя бы два значащих разряда. Требовалось смоделировать энергию системы для всего диапазона параметров, но добиться какого-то устойчивого состояния нам так и не удалось. Выяснилось, что предложенных сил для адекватного описания недостаточно, а возможностей существующей вычислительной техники явно не хватало. Тогда я задумался о том, как лучше организовать вычисления. В университетской библиотеке никакой информации о компьютерах не оказалось, курсов, посвященных вычислительной технике, нам не преподавали, да и компьютеров вокруг тоже не имелось, если не считать аналоговой машины на факультете электротехники.
WISC
Мой научный руководитель профессор Роберт Сакс знал о возникших осложнениях и летом 1950 года отправил меня на два месяца на Абердинский испытательный полигон в штате Мэриленд. Моя задача заключалась в том, чтобы запрограммировать сверхзвуковой поток, огибающий трехмерное тело. Предстояло использовать набор инструкций компьютера EDVAC (Electronic Discrete Variable Automatic Computer), который в то время находился еще в процессе разработки [1]. Я не имел никакого представления ни о программировании, ни об архитектуре компьютера, и даже на двухмесячные курсы программирования меня не отправляли. Стало известно, что разработка EDVAC приостановилась из-за того, что ртутные линии задержки вели себя нестабильно при повышении температуры.
Не могу сказать, что я был в восторге от архитектуры EDVAC, потому что использование операций с фиксированной точкой наряду с ограниченной длиной слова требовало серьезного масштабирования для поддержания приемлемой точности. Вернувшись в Висконсин, я спроектировал трехадресную структуру с плавающей точкой, пытаясь сделать ее как можно проще и используя доступные на тот момент в коммерческих продуктах технологии. В качестве основного средства хранения я выбрал магнитный барабан, а для минимизации числа электронных компонентов использовалась рециркуляция регистров. Ввод-вывод предполагалось осуществлять с помощью бумажной ленты и телетайпа, который пробивал отверстия на ленте, считывал с нее данные и выводил информацию на печать.
Вскоре я пришел к выводу, что если мне удастся найти способ переноса сегментов из одного слова в другое, то можно будет ограничиться операциями с плавающей точкой. В качестве трехадресной операции использовалась операция Extract, которая извлекала n бит из первого слова, начиная с бита j, вставляла эти биты во второе слово перед битом k и записывала результат по третьему адресу. Такое решение исключало необходимость написания более десятка инструкций с фиксированной точкой.
Каждая арифметическая операция выполнялась за одно вращение барабана. Тогда я думал, что изобрел новый способ деления. На первой итерации значение остатка принималось равным числителю дроби, затем из остатка вычитался знаменатель и в очередную позицию частного добавлялась единица, после чего знаменатель сдвигался на один бит вправо, и операция повторялась заново. Как только остаток становился отрицательным, знаменатель не вычитался, а суммировался с ним, после чего единица вычиталась из соответствующей позиции частного. Впоследствии мне стало известно, что этот метод запатентовал Джон фон Нейман.
При выполнении любой операции один оборот барабана требовался для считывания инструкции, второй — для выборки операндов, третий — для выполнения операции и, наконец, четвертый — для записи результата. Поскольку никаких конфликтов в процессе выполнения операций не возникало, в конвейере постоянно находились четыре инструкции: первая выбирала команду, вторая — операнды, третья выполняла операцию, а четвертая сохраняла результат. Компьютер последовательно выполнял одну операцию с плавающей точкой за один оборот барабана. Здесь впервые использовались сразу несколько конструкторских решений: впервые электронный компьютер имел арифметику с плавающей точкой (причем только с плавающей точкой), впервые появился конвейер, впервые операции ввода-вывода выполнялись одновременно и независимо от вычислительных операций.
Своими идеями в области проектирования компьютерной архитектуры я поделился с одним из товарищей, тот передал понравившуюся ему информацию на кафедру электротехники, и осенью 1950 года меня пригласили прочесть лекцию о разработанном архитектурном проекте. Я провел семинар, а еще через неделю заведующий кафедры электротехники обратился к моему научному руководителю с предложением изменить тему моей диссертации и включить туда проект компьютерной архитектуры, позволявший аспирантам потренироваться в новой для себя области. Мой профессор согласился, и следующие полгода я потратил на написание новой диссертации и проектирование магнитного барабана. В июне 1951 года диссертация была готова, и через месяц я планировал защитить ее, но оказалось, что никто в университете не обладает достаточными знаниями для ее оценки. В результате работу направили ученым на Абердинском испытательном полигоне. Диссертация на тему «Логическое проектирование среднескоростного цифрового компьютера» была одобрена, а в феврале следующего года я успешно защитил ее. Компьютер получил название WISC (Wisconsin Integrally Synchronized Computer). Работы над ним были завершены в 1955 году (сейчас он находится в музее компьютерной истории в Маунтин-Вью).
Работа в IBM
Копия моей диссертации каким-то образом оказалась в руках главы отделения IBM в Милуоки, а оттуда попала в исследовательский центр компании в Покипси. С ней ознакомился Натаниэль Рочестер, после чего я получил официальное приглашение присоединиться к команде IBM. В июне 1952 года я перешел в IBM, и первым заданием для меня стало моделирование нейронных сетей на машине IBM 701 на основе характеристик, изложенных в монографии Дональда Хебба.
Всего было выпущено 18 экземпляров модели 701, после чего ее решили снять с производства — следующий компьютер, IBM 704, должен был использовать уже новую память на магнитных сердечниках, а не на лампах. Соответственно, и емкость памяти была значительно больше. Проектирование памяти поручили мне, потому что все другие инженеры IBM были заняты тогда в совместном с МТИ проекте по разработке и созданию системы SAGE (Semi-Automatic Ground Environment) [2]. Я решил удвоить размер инструкции, с тем чтобы уместить там более длинный адрес, дополнительные команды арифметики с плавающей точкой, а также арифметики 701 с фиксированной точкой. В одном из английских компьютеров в то время присутствовал счетчик B-box, который позволял повторять цикл, уменьшаясь после выполнения каждой его итерации на единицу, до тех пор, пока не становился равным нулю. Однако любое изменение адресации в массиве для каждой итерации по-прежнему требовало отдельных инструкций. Тогда я подумал, что эффективнее было бы увязать число этапов с их размерами — тогда программа могла бы стать короче и быстрее. Соответствующее решение было названо индексацией и потребовало встраивания в модель 704 трех индексных регистров, которые определяли размеры этапов для конкретных массивов данных. Два бита в инструкции служили для идентификации одного из трех индексных регистров или отсутствия индексации. Мы заметили, что содержимое индексного регистра доступно уже на ранней стадии, благодаря чему адрес в инструкции можно изменить еще до начала выборки данных, причем это не требовало дополнительных временных затрат. Впоследствии выяснилось, что в системе SAGE тоже присутствовали функции индексирования, а вот кому принадлежало первенство, я не знаю — проект носил конфиденциальный характер, его подробности не раскрывались, поэтому конкретную дату изобретения определить не удалось.
Чтобы понять, по какой цене мы сможем продавать модель 704, требовалось оценить масштабы рынка. Поначалу в штаб-квартире IBM планировали продать шесть машин (думаю, они учитывали тот факт, что 18 проданных моделей 701 в основном уже удовлетворили потребности рынка). Такое решение привело меня в ярость, я доказывал, что новая машина обладает гораздо более развитыми возможностями по сравнению с моделью 701 и, соответственно, границы рынка для нее должны стать шире. Через несколько недель мы договорились о выпуске 12 машин, затем 18 и, наконец, 32, после чего я снял свои возражения. В итоге было продано 140 экземпляров 704, благодаря чему эта модель стала невероятно прибыльной для того времени.
После завершения работ мне было предложено заняться проектированием следующей системы, модели 709, а затем и суперкомпьютера Stretch, в котором планировалось использовать новые транзисторные технологии. Все говорили, что это будет мой проект и в ходе разработки нужно лишь учесть требования контракта, который предполагалось заключить с лабораторией им. Лоуренса в Ливерморе или с Национальной лабораторией в Лос-Аламосе. В ноябре 1954 года, посоветовавшись с Джоном Бэкусом, мы определили принципиальные характеристики, которыми должен был обладать Stretch. Я изучал возможности предложенной полупроводниковой технологии и нового типа схем на основе эмиттерно-связанной логики, похожей на двухтактные усилители вакуумных ламп. Схемы работали очень быстро и потребляли много электроэнергии. Я принимал участие в проектировании умножителя, пытаясь понять, на какую производительность можно рассчитывать в случае выбора эффективной системы команд. Затем началась работа над новой концепцией «предварительной выборки», позволяющей заранее находить нужную ветку алгоритма и без задержек выбирать альтернативную последовательность инструкций. По итогам анализа проект выглядел весьма многообещающим, а по критерию производительности новый компьютер обещал в несколько раз опережать машины, создававшиеся на основе вакуумных ламп.
Вооружившись предварительными результатами, я направился в Ливермор. Там меня выслушали весьма доброжелательно, но сообщили, что уже подписали договор с конкурентом. После этого я нанес визит в Лос-Аламос. Находившаяся там группа проявила к проекту живой интерес, и между нами начались переговоры. К этому времени я уже усовершенствовал проект Stretch и определил, что нужно улучшить в модели 704 в процессе перехода к 709. В проекте 709 появился целый ряд весьма полезных инструкций. Одна из наиболее интересных команд выполняла «поиск в таблице с учетом истории», позволявший осуществлять преобразования из основной кодировки IBM BCD (Binary-Coded Decimal) в кодировку ASCII (American Standard Code for Information Interchange) и обратно. Появилась также возможность выполнять операции сложения или вычитания двух двоично-десятичных чисел (каждый десятичный разряд занимал шесть бит) в двоичном представлении. Использовавшаяся при этом таблица помогала преобразовывать результат в корректный код BCD.
Основным нововведением стал канал ввода-вывода, позволявший компьютеру выполнять чтение или запись определенного количества данных на магнитную ленту или барабан. Обмен данными с оперативной памятью предполагалось осуществлять без участия процессора, как это было в WISC. Вычисления в это время выполнялись с учетом задержек циклов памяти, обусловленных конфликтами, которые возникали при выполнении запросов к оперативной памяти. Планируемое нами изменение требовало особенно дорогостоящих разработок, в связи с чем его необходимо было утверждать у руководства. Мы с Элейн Боэм понимали, что получим одобрение лишь в случае какой-то сногсшибательной демонстрации. Решено было остановиться на программе сортировки с использованием магнитной ленты. Машина IBM 703, проданная министерству финансов США, уже умела выполнять функции сортировки, однако цена модели 709, по нашим оценкам, должна была в два-три раза превышать стоимость IBM 703. Запрограммировав сортировку, мы убедились в том, что на 709 все выполняется намного быстрее и стоимость операции сортировки здесь в результате оказывается ниже, чем на 703. Эта демонстрация позволила обосновать предлагавшиеся решения, и разработку канала ввода-вывода утвердили.
В конце 50-х годов главный научный советник IBM Эмануэль Пиор, подчинявшийся непосредственно Тому Уотсону, приехав в Лос-Анджелес, пригласил меня с женой на обед. Мне предложили должность начальника подразделения экспериментальных машин в IBM Research с условием пребывания на восточном побережье США от четырех до семи месяцев в году. Подумав, мы с женой приняли приглашение, и в ноябре 1960 года я вернулся в штат Нью-Йорк. В первую очередь мне предстояло присматривать за проектами своего подразделения. Ознакомившись с состоянием дел, я сразу отменил два аппаратных проекта, которые не представляли ценности для IBM. Один из этих проектов, предусматривавший создание нового компьютера, постоянно менялся, но так и не достиг той степени завершенности, при которой его можно было бы оценить. Другой, выполнявшийся по заказу правительства, предполагал использование сверхпроводниковых переключателей для создания логических компонентов, но найти способ усиления упавшего уровня сигналов разработчикам так и не удалось. Таким образом, в моем ведении остались программные проекты и потенциальный проект нового суперкомпьютера, для которого не было достаточного финансирования. Я все же не оставлял надежду получить его, поскольку суперкомпьютер Stretch так и не достиг желаемой производительности и цены на него были снижены. Модели 704, 709 и последовавшие за ними 7090 и 7094 помогали IBM сохранять устойчивые позиции на рынке научных вычислений.
К тому времени в компании уже был сформирован комитет SPREAD (Systems Programming, Research, Engineering And Development). Разные подразделения IBM поддерживали пять основных компьютерных семейств, каждое из которых делилось на поколения, не вполне совместимые друг с другом. К сожалению, общая стоимость разработки росла слишком быстро, поскольку подключение любого нового устройства предполагало реализацию инженерного и программного проекта, требовавшего отдельного финансирования. Перед комитетом SPREAD стояла задача определения форматов данных, устройств ввода-вывода, технологий управления, хранения и логических схем, которые необходимо было стандартизировать, а также планирования нового семейства компьютеров, которое пришло бы на смену существующим. Это было грандиозное предприятие даже с политической точки зрения, требовавшее от вассалов полной передачи своих наработок королю. Компьютерная революция уже началась, и ставки были высоки — речь шла о сохранении у IBM контроля за рынком средств обработки данных.
Вернувшись на пару месяцев, я получил от президента подразделения Data Systems Division Боба Эванса приглашение принять участие в заседании бюджетного комитета, которое наглядно продемонстрировало все проблемы с финансированием разработки. После заседания Боб спросил меня, согласен ли я заняться проектированием нового семейства компьютеров. Я, со своей стороны, задал вопрос, будет ли обеспечиваться в первую очередь восходящая совместимость и лишь потом нисходящая, и он ответил, что план заключается именно в этом. Тогда я заметил, что такая постановка вопроса мне не нравится, поскольку в конечном итоге с бюджетом возникнут те же проблемы, с которыми мне уже приходилось сталкиваться, — отличие поколений проявляет себя сразу. А между тем семейства могли бы отличаться более высоким уровнем совместимости как в восходящем, так и в нисходящем направлении и при этом фактически без каких-либо дополнительных затрат. Боб подумал и ответил согласием. Так в 1961 году я вернулся в Покипси, где работал примерно по десять часов в день, определяя форматы данных, наборы инструкций, а в некоторых случаях и архитектуру оборудования. Каждый новый член семейства должен был примерно в три раза превосходить по производительности предыдущего. Семейство System 360 насчитывало в общей сложности семь машин, причем последняя опережала первую по производительности примерно в 600 раз. Семейство мэйнфреймов компании совершенствовалось на протяжении десятилетий и стало продуктом, принесшим IBM наибольший доход.
В то время я получил доступ к ленточным хранилищам и к историческим данным коммерческих, научных, инженерных и университетских вычислительных центров, в которых были развернуты самые разные наши машины, начиная от 704 и заканчивая 7094. Анализ этих сведений позволил получить информацию об относительном использовании различных инструкций и интересную статистику. История рабочей нагрузки вычислительных центров свидетельствовала о том, что на каждую выполненную инструкцию приходился один бит ввода-вывода. Я смог оценить скорость выполнения вычислительных операций при заданном объеме памяти. В многопроцессорной среде производительность зависела от скорости работы дисков и лент, которую я определил в 1969 году. Тогда же выяснилось, что System 360 должна была менять длину адреса для достижения производительности, превышавшей 15 MIPS (миллионов инструкций, выполняемых в секунду). Услышав об одном бите ввода-вывода на каждую инструкцию, исследователи из лаборатории им. Лоуренса в Ливерморе усомнились в достоверности этих сведений, но тесты, которые выполнялись на протяжении месяца, показали, что в рабочие часы, когда пользователи обращались к машинам со своих консолей, число битов ввода-вывода составляло в среднем 1,1, а по ночам, при выполнении операций пакетной обработки, среднее значение было равно 1,0. Результаты всех удивили, но ни они, ни я не понимали, откуда взялось это значение. Когда виртуальная память стала использоваться повсеместно, число битов ввода-вывода, приходящееся на каждую инструкцию, стало уменьшаться. Объем имевшихся у меня данных весьма ограничен, но я вполне обоснованно предполагаю, что связано это с уменьшением размеров программ, которые больше не нужно было полностью держать в памяти во время выполнения.
Закон Амдала
В 1967 году меня попросили подготовить доклад [3] для конференции Spring Joint Computer Conference, проходившей на восточном побережье. Требовалось сравнить вычислительный потенциал компьютера, оснащенного одним мощным процессором, с уникальным квазипараллельным компьютером ILLIAC (Illinois Integrator and Automatic Computer) IV [4], который на конференции должен был представлять Дэниел Слотник.
Рис.1. Схема ILLIAC IV |
Компьютер ILLIAC IV (рис.1) имел единственный блок обработки команд (I-unit), управлявший 16 блоками выполнения арифметических операций (E). Каждый блок E имел собственную схему адресации данных и самостоятельно определял, должен ли он участвовать в выполнении текущей инструкции I-unit, — интересное, но спорное решение. Компьютер с единственным процессором представлял собой не конкретную машину, а некий архитектурный тип, и мне предстояло оценить, какой производительности можно добиться с такой конструкцией. На рис. 2 показана диаграмма роста производительности ILLIAC IV при решении задач с варьирующейся, но достаточно рациональной степенью параллелизма, управляемой ОС. На рис. 3 та же задача выполняется на суперскалярном процессоре.
Рис. 2. Производительность ILLIAC IV при решении задач с варьирующейся степенью параллелизма |
Рис. 3. Производительность монопроцессорной системы при решении задач с варьирующейся рациональной степенью параллелизма |
Рис. 4. Производительность ILLIAC IV, ожидавшаяся после интеграции Слотником 256 блоков арифметических операций |
На рис. 4 показана ожидаемая производительность ILLIAC IV после интеграции Слотником 256 арифметических блоков и решения задач с различной степенью параллелизма, которая превышала бы уровень, соответствующий «символу чистоты Америки» (вспомним рекламу мыла Ivory, «чистого на 99,4%»). Для оценки производительности ILLIAC IV я вывел формулу, в которой предполагается, что при наличии параллелизма задействованы могут быть все процессоры:
Числитель формулы Rsх(S+P) и знаменатель — S+P/16 соответствуют архитектуре ILLIAC IV, которая была предложена в 1967 году и имела 16 арифметических блоков. В этой формуле S — это часть задачи, которая решается путем последовательного выполнения операций, а P — часть задачи, решаемая параллельно (при наличии у компьютера такой возможности). Сумма (S+P) — это агрегированная рабочая нагрузка (W). Rs — производительность компьютера, который выполняет операции последовательно (несмотря на возможность их распараллеливания), совпадающая со скоростью блока команд (I-unit) ILLIAC IV. Знаменатель отражает способность ILLIAC IV решать часть P в 16 раз быстрее (полная загрузка мощностей ILLIAC IV происходит только при выполнении векторных или матричных операций, которые можно распараллелить на 16 и более потоков). Соотношение (S+P)/(S+P/16) характеризует возможности увеличения производительности ILLIAC IV при параллельном выполнении операций. Кстати, никто так и не оспорил эту формулу, хотя повышение производительности при параллельных вычислениях лишь в полтора раза многие считали слишком низким. Этот показатель немного отличается от того, что я привел в 1967 году во время своего доклада [3], и я не рассчитывал на то, что он будет сохранять свою актуальность в течение долгого времени. Я никогда не называл эту формулу «законом Амдала» и много лет о ней вообще не слышал, рассматривая ее только как верхний предел производительности для компьютера, имеющего один блок команд и n арифметических блоков. Я лишь хотел акцентировать внимание на недостатках операционных систем того времени.
Двадцать лет спустя мне сообщили, что команда исследователей из национальной лаборатории Сандия опровергла закон Амдала. Они использовали новую на тот момент параллельную машину с распределенной памятью. Группы вычислительных узлов соединялись друг с другом, а каждый узел при этом был связан с устройствами ввода-вывода, предназначенными для загрузки операционной системы, ввода исходных данных и вывода полученных результатов. Все управление и перемещение данных осуществлялось параллельно. Я не стал ввязываться в спор, указав лишь, что моя формула описывала вполне конкретную архитектуру компьютера ILLIAC IV, у которого имелся лишь один блок команд. Закон Амдала использовался также при проектировании многомашинных систем, разрабатывавшихся компанией Massively Parallel. Главный конструктор компании учитывал мою формулу при дальнейшем расширении своей системы, а я в итоге получил приглашение войти в совет директоров этой компании.
***
Представленные мной результаты никогда не претендовали на роль универсального закона — я всего лишь искал связь между объемом памяти и производительностью компьютера и анализировал отношение количества битов ввода-вывода к числу выполненных инструкций, рассматривая это как функцию от той части программы, которая должна находиться в виртуальной памяти. В конечном итоге все растворилось во мгле минувших лет. Главным же своим достижением я считаю архитектуру WISC, которую мне удалось создать фактически с нуля.
Литература
- J. von Neumann, First Draft of a Report on the EDVAC. Moore School of Electrical Eng., Univ. Pennsylvania, 30 June 1945; URL: www.virtualtravelog.net/wp/wp-content/media/2003-08-TheFirstDraft.pdf (дата обращения: 11.02.2014).
- P.N. Edwards, Chapter 3: SAGE, The Closed World: Computers and the Politics of Discourse in Cold War America. MIT Press, 1996, P. 76–114.
- G.M. Amdahl, Validity of the Single Processor Approach to Achieving Large Scale Computing Capabilities. Proc. AFIPS Conference, AFIPS Press, 1967, P. 483–485.
- G.H. Barnes et al., The ILLIAC IV Computer. IEEE Trans. Computers, vol. C-17, no. 8, 1968, P. 746–757.
- J.L. Gustafson, Reevaluating Amdahl’s Law. Comm. ACM, vol. 31, no. 5, 1988, P. 532–533.
Джин Амдал начал свою карьеру в корпорации IBM в 1952 году, был ведущим разработчиком компьютера IBM 704, возглавлял направление проектирования архитектуры и потоков данных семейства IBM 360. В 1965 году Амдал был удостоен звания «Почетный сотрудник IBM» (IBM Fellow) и до 1970 года руководил работой лаборатории IBM Advanced Computing Systems Laboratory в Менло-Парк, где и основал компанию Amdahl Corporation. Деятельность доктора Амдала отмечена многочисленными наградами и патентами.