Интервью с Джоном Коком

Джон Кок
Легенда компьютерного сообщества - Джон Кок - принимал участие в создании нескольких вычислительных машин, оказавших огромное влияние на развитие современной процессорной архитектуры, в том числе IBM Stretch, Advanced Computer System (ACS), а также процессоров 801, RS/6000 и PowerPC.

Кок, известный в первую очередь благодаря своим пионерским работам, которые привели к созданию процессоров с сокращенным набором команд (reduced instruction set computing — RISC), пользуется заслуженным уважением как человек, обладающий глубокими знаниями в области математики, компиляторов, архитектуры, микросхем, автоматизации проектирования элекронных систем, а также во многих других областях. В связи с присвоением Коку премии имени Сеймура Крея, сотрудники редакции Computer посетили его в собственном доме в Вестчестере (шт. Нью-Йорк), расположенном недалеко от Исследовательского центра им. Т. Дж. Ватсона IBM, где Кок проработал до выхода на пенсию почти четыре десятка лет.

Начало

Давайте начнем с самого начала. Как и когда Вы впервые увидели компьютеры? И когда Вы стали всерьез ими интересоваться?

Салливан Кэмпбелл приехал в университет Дюка после завершения проекта Oracle в Оак-Ридже (шт. Теннеси). Oracle представлял собой по сути 40-разрядный параллельный компьютер c фон-неймановской архитектурой. В то время я как раз закончил колледж и планировал провести лето в университете Дюка, работая с Дж. Дж. Гургеном - математиком, который был приглашен для выполнения исследования, касающегося возможного применения компьютеров для военных целей. Я снял комнату у Салли Кэмпбелла (он тоже работал с Гургеном) и мы не раз вместе проводили время, ведя за пивом длительные беседы о компьютерах. Я изучал математику и ничего не знал о компьютерах до тех пор, пока Кэмпбелл не рассказал мне об Oracle и о создании более быстрых сумматоров и других аналогичных бесхитростных устройств. Эта область показалась мне очень интересной.

Как Вы оказались в IBM?

В IBM работал мой друг - логик Брэд Дэнхем, который вместе со мной отправился на встречу со Стивом Дануэллом - главой недавно начатого проекта Stretch. Дануэлл убедил меня, что работа над Stretch будет крайне интересной (одна из основных целей проекта состояла в увеличении скорости вычислений), поэтому я и присоединился к IBM в 1956 году.

Со мной работали очень интересные люди, в том числе Джим Померене, создавший память на электронно-лучевой трубке, и Фред Брукс. Мой стол стоял между их столами. Я изучал язык Fortran у Ирва Зиллера, который работал над оригинальным компилятором и создал Fortran 3. В нашей группе также были Джерри Блау и Джон Файерклот.

Я был счастлив тем, что люди, которых я здесь встретил, что-то знают о компьютерах, потому что я сам не знал о них ничего. Впоследствии я уговорил Салливана Кэмпбелла перейти в IBM, которая имела в те дни ужасную репутацию. В то время предполагалось, что IBM в основном занимается бизнесом, связанным с перфокартами, поэтому Кэмпбелл отправил меня в корпорацию как своего рода пробный шар. Раз мне не захотелось сразу сбежать из IBM, то и он тоже воспользовался шансом поработать здесь.

Властители дум

Сеймур Крей часто задавал ориентиры в гонке производительности суперкомпьютерных систем. Не случилось ли так, что изучение методик проектирования его машины помогло вам понять, что можно и что нужно сделать в области компьютерной архитектуры?

Да, конечно. Я всегда искренне восхищался Креем. У него была масса идей не только в модели 6600, но и в более ранних его машинах. Он предложил прогрессивную индексацию и ряд других решений, которые позволили добиться высоких скоростей. Я думаю, что он был истинным компьютерщиком. Он очень много знал практически обо всем. Я никогда не встречался с ним и не слышал его выступлений, но некоторые из тех, кому посчастливилось беседовать с Креем, рассказывали мне о том, что он обладал потрясающим чувством юмора, о чем я даже не подозревал.

Кого, по-вашему, помимо Крея, можно назвать истинным компьютерщиком?

Кэмпбелл из IBM очень много знал о компьютерах, хотя и не так много, как Крей. Он создавал их, доводил до ума и написал свою собственную операционную систему. По-моему, с Креем сравниться не может никто. Как бы мне хотелось с ним встретиться... Я уверен, что побеседовать с Креем было бы просто здорово. Кроме того, мне весьма импонирует тот факт, что он не боялся создавать собственные компании.

Что вы думаете о том, каким образом следует сегодня обучать компьютерной архитектуре?

Когда я только начинал, мне пришлось работать с огромным количеством людей, которые вообще не изучали компьютерную науку, поскольку тогда никаких курсов по этому предмету попросту не существовало. До Дона Кнута никто не написал по-настоящему хороших книг, посвященных компьютерной науке. После того, как появился его фундаментальный труд по алгоритмам, было выпущено немало других книг.

Я думаю, что вы должны (в зависимости от того, насколько элементарным является курс) учить тому, как работают компьютеры: логика, сумматоры, способы ускорения их работы, но в первую очередь организации памяти. С того момента как Деннард создал динамическую память DRAM соотношение цена/производительность улучшилось в 100 раз. Когда-то память стоила доллар за бит, а теперь цена снизилась до доллара за мегабайт. И скорость ее стала намного выше. В модели 704 скорость доступа к памяти составляла

12 мс, а теперь этот показатель равен 100 нс. Кроме того, Деннард работал и над вопросами масштабирования вычислительных систем - что происходит, когда вы уменьшаете размер микросхемы, сохраняете ее вычислительную мощность. Эта работа стала очень серьезным вкладом. Так что мы должны быть благодарны Деннарду за эти два крупнейших достижения.

По-видимому, вы восхищаетесь Дональдом Кнутом. Как вы считаете, не оказали ли частые беседы с Кнутом по вопросам, связанным с компьютерами, влияние на Ваш образ мыслей?

Вы абсолютно правы. К примеру, до знакомства с ним я считал, что мы должны компилировать, вставляя повсеместно в код счетчики для выявления частоты обращения к различным фрагментам программы. Он прочитал курс по профилированию, где предложил схемы, которые позволяют компилировать с использованием меньшего числа счетчиков. Он также много знал о компиляторах и языках - сколько дважды индексированных, единожды индексированных и неиндексированных переменных было в программах на языке Fortran и так далее. Кнут трудолюбивый и организованный человек и я считаю, что он сделал для компьютерной отрасли намного больше, чем кто-либо другой.

Stretch

Stretch возможно был первым компьютером, в котором было реализовано разбиение процесса выполнения инструкций на фазу декодирования и выбора инструкций и фазу исполнения данных. Эта разработка дала начало упреждающему просмотру инструкций, конвейерной обработке, направлению данных по короткому циклу, разбиению памяти и возврату инструкций для того, чтобы предотвратить аппаратные прерывания. Что заставило вас разрабатывать эти инновации?

Stretch был совместным проектом Национальной лаборатории в Лос-Аламосе Министерства энергетики и корпорации IBM. Во время наших совместных обсуждений, мы поняли, как могла бы быть устроена синхронизация в Stretch и, в частности, упреждающий просмотр инструкций. Я сказал, что как раз написал эмулятор для этого на языке Fortran. Чтобы написать эмулятор, мне пришлось пофантазировать, что собой представляет упреждающий просмотр инструкций.

Цель Stretch состояла в создании компьютера в сотни раз более быстрого по сравнению с 704. Для того чтобы добиться скорости, требуемой сложной машине, необходимо было, в свою очередь, создать сложный эмулятор. Насколько полезным оказалось пропускать последовательности кода через такого рода эмулятор?

Эмулятор помог нам получить немало информации об архитектуре машины и выявить несколько неудачных идей. Одна из самых плохих идей, которую мы обнаружили, касалась использования регистров как области памяти. Скажем, у вас есть инструкция сохранения. Вы не можете себе представить, что именно будет затронуто при этом сохранении. Это уничтожает все надежды на реализацию приличного алгоритма назначения регистров.

Принимая во внимание все уникальные особенности Stretch, которые сегодня имеют столь важное значение, какая из находок кажется Вам наиболее существенной?

Трудно сказать. Разбиение памяти появилось очень естественно. У нас была очень быстрая память на 1000 слов, и мы решили разбить ее на разделы, чтобы увеличить ее пропускную способность и иметь больше памяти для хранения инструкций.

Стало ли создание памяти с разбиением результатом использования техники упреждающего просмотра инструкций, который позволял сохранять выбранные инструкции?

Мы понимали, что память с разбиением не повлияет негативно на производительность упреждающего просмотра, хотя она действительно замедлила реализацию метода Монте-Карло, при которой было множество ветвлений. Поэтому в ACS мы реализовали особо причудливые инструкции ветвления. У нас была команда подготовки к ветвлению, и мы добавили переходы (переход, по поднятому флагу и переход по опущенному флагу), что позволяло пометить инструкцию с помощью флага и условно ее выполнять. Вы могли подготовиться к ветвлению, выполнить столько инструкций, сколько хотели, дойти до этого флага и затем двигаться дальше. Если бы у нас не было подготовленной ветви, мы не могли бы использовать инструкции, подготовленные для перехода.

Advanced Computer System

Система ACS была, возможно, первым проектом, который развивался стремительно одновременно во всех аспектах своей архитектуры: машинная организация, компилятор, пакетная технология и надежность. Правда ли, что опыт работы с системой Stretch позволил вам понять, что компилятор и аппаратное обеспечение ACS должно разрабатываться вместе?

Когда мы только начали проект ACS, больше всего нас интересовало, когда мы начнем проектировать набор инструкций. Когда мы написали компилятор, мы захотели убедиться в том, что он обеспечивает последовательно хорошую компиляцию инструкций, которые мы предоставляем.

Мы позаботились о таких вещах, как число регистров, и другими моментами, которые зависят от архитектуры машины. Мы работали также и над не зависящими от машины моментами, такими как исключение общих подвыражений. Когда вы вычисляете индекс, по мере обхода цикла, вы увеличиваете, к примеру, переменную цикла i, то все, что вы должны сделать - это добавить размерность i раз, чтобы получить обновленный индекс. Вы не должны i раз выполнять умножение и все это вычислять. Это не зависит от машины в том смысле, что умножение всегда выполняется медленнее, чем сложение.

Учитывая, что вы одновременно вели разработку оптимизированного компилятора и архитектуры машины, повлиял ли компилятор на архитектуру машины и наоборот?

Да. Мы пришли к выводу, что могли бы делать множество вещей, о которых вначале даже не думали. Крей использовал прогрессивное индексирование - когда вы загружаете операнд, вы увеличиваете адресный указатель - и мы сделали то же самое. Первоначально мы считали, что это может быть сложно реализовать для компилятора, но выяснили, что это вовсе не так. Мы взяли множество идей от компилятора 704 - первого компилятора для Fortran. Он понятия не имел о том, что такое подпрограммы, но выполнял серьезную оптимизацию и вообще был ужасно умным. Фактически, код, который он создавал, оказался настолько хорош, что я, не раз читая объектный код, думал, что в нем есть ошибка, но разобравшись, выяснял, что он оказался поразительно разумным.

Одна из важнейших концепций ACS - это декодирование и выдача нескольких инструкций за один цикл. Как возникла эта идея?

Этой идеей я обязан Жину Амдалу. Он написал статью, в которой говорилось, что машины с покомандными счетчиками имеют верхнюю границу производительности. Я захотел создать более быструю машину. Поэтому мы очень внимательно прочитали его статью, в которой говорилось, что можно декодировать и выдавать только по одной инструкции за цикл и мы решили обойти это ограничение. Статья очень помогла нам, и, несмотря на то, что многие из гипотез Амдала оказались ошибочными, он помог нам их увидеть. Амдал считал, что все компьютеры того времени имели определенные свойства, которые не позволяли сделать их быстрее. Поэтому мы спроектировали машину с другими свойствами.

RISC-процессоры: 801, RS/6000, PowerPC

Вы работали над процессором 801. Говорят, что он получил свое кодовое название America в честь первой регаты America?s Cup Race, проходившей вдоль берегов Уэллса. Его часто называют первым RISC-процессором.

Да, я действительно дал ему это название, услышав одну любопытную историю. На первой регате America?s Cup Race присутствовала королева Виктория в окружении свиты, следившей за ходом гонки. Как только из-за острова показалась первая яхта, королева спросила: «Кто первый?» «Америка», - ответил ее спутник. А на вопрос, кто идет вторым, джентльмен сообщил: «Мадам, второго нет». Вот почему я выбрал для процессора такое название.

Что послужило импульсом для реализации этого проекта?

В тот момент IBM и LM Ericsson обсуждали совместный проект по созданию контроллера для телефонного коммутатора. Мы собирались создавать коммутатор, основанный на разделении времени, и управлять им с помощью процессора 801. В конце концов, однако, проект потерпел неудачу.

Оказали на решения, реализованные в 801, какое-либо влияние эксперименты, показавшие, что компиляторы System/360 используют довольное ограниченное подмножество набора инструкций System/360?

Да. К примеру, в RS/6000 мы попытались добиться того, чтобы компилятор действительно генерировал каждую имеющуюся у нас инструкцию. В качестве отправного момента мы взяли то, что всегда должно быть основой при проектировании процессора - гибкость.

Сначала мы решили, что каждая инструкция должна быть простой: она должна делать что-то определенное, а не делать что-то определенное и плюс еще что-то.

В чем состояли основные архитектурные отличия между процессорами 801 и созданными на их фундаменте RS/6000 и PowerPC? Чем были обоснованы такие изменения?

В Центре IBM в Остине приступили к реализации проекта, получившего название ROMP, основа которого была заложена в процессе разработки 801. Мы приехали в Остин и нас попросили создать устройство для вычислений с числами с плавающей запятой. Мы отказались от ROMP и спроектировали такое устройство. Им и стал процессор RS/6000.

Кроме устройства для работы с числами с плавающей запятой, в чем еще состояли архитектурные особенности RS/6000? Могли ли он выдавать несколько инструкций за цикл? Декодировать несколько инструкций?

Структура командного слова была совсем другой. У нас была трехадресная машина и 32 регистра. Кроме того, работая над Stretch, мы поняли, как избежать индексации в регистрах.

Stretch и ACS могут служить примером довольно сложной архитектуры; в них были достаточно сложные инструкции. Процессоры 801 и RS/6000 отличались намного меньшей аппаратной сложностью, обладали намного более простыми инструкциями и во многом полагались на «знания» компилятора. Поэтому можно говорить об эволюции от сложных машин и нехитрых компиляторов к простым инструкциям и очень сложным компиляторам. Можете ли Вы рассказать, как менялись Ваши представления в процессе работы над тремя или четырьмя процессорами и компиляторами?

Мы поняли, что можно создать (и реализовали его к моменту появления RS/6000) очень хороший компилятор. Сейчас, во всех вузах есть курс, посвященный тому, как писать компиляторы. Теперь в курсе рассказывается о различных видах оптимизации, в том числе многих вещах, которые мы не делали. Мы не делали профилирование, которое, если говорить с учетом уроков прошлого, мы должны были бы делать. Профилирование включает в себя операционную систему - вы должны выйти за рамки компилятора. Вы хотите компилировать, запускать и считать частоты использования тех или иных участков кода, а затем решать, где именно особое внимание уделить оптимизации.

Вы предлагаете, что проектирование компилятора действительно подразумевает параллельную эволюцию компилятора в соответствии с аппаратным обеспечением и операционной системой?

Если вы хотите делать такие вещи, как профилирование, необходимо добиваться взаимодействия с операционной системой. Сейчас многие рассматривают интерпретацию как часть такого взаимодействия. Вы интерпретируете программу, подсчитываете профиль и затем компилируете. По этому поводу существуют самые разнообразные мнения — выбирайте из огромного числа подходов. Вы можете сканировать программу каждый раз, профилировать и исполнять, либо сканировать и преобразовать ее в промежуточный язык, а затем интерпретировать этот промежуточный язык.

Учитывая, что существует так много подходов, какого придерживаетесь именно Вы?

Я предпочитаю преобразование в промежуточный язык, интерпретацию, профилирование и затем компиляцию.

Параллельные вычисления

Некоторые специалисты приписывают авторство самой быстрой из возможных однопроцессорных систем. Кое-кто даже полагает, что вы со скепсисом относитесь к проектированию и реализации параллельных компьютеров. Каковы ваши взгляды на проектирование параллельных систем?

Когда вы тесно (tightly) связываете машины, возникает сильная их интерференция и добавление второй машины отнюдь не удваивает производительность. Близко (closely), а не тесно связанные машины - это намного проще для организации эффективного взаимодействия аппаратного обеспечения. Так, в SP2 удалось добиться вполне удовлетворительного результата в объединении вычислительных ресурсов двух машин. Рамеш Агравал запрограммировал многомерное преобразование Фурье, которое с увеличением размерности выполняется только быстрее. Он также разработал великолепный алгоритм сортировки, которая обеспечивает практически линейную производительность на нескольких машинах. Но все эти усовершенствования даются нелегко.

Какие выводы Вы сделали из этой ситуации - что это всего лишь программирование толковых алгоритмов?

Если вы организуете правильные взаимодействия между памятью различных процессоров, то в конечном итоге вы получите хорошую производительность. Однако по сути речь идет о хороших алгоритмах. Если вы посмотрите на такие задачи, как быстрое преобразование Фурье, то число операций сокращается с N в квадрате до N log n. Но способа, позволяющего усовершенствовать компьютерную архитектуру и добиться подобного результата, попросту не существует.

Считаете ли вы, что параллелизм, скажем в парах множительных устройств, полезен?

Да, польза от второго множительного устройства не столь велика, как первого. Я не помню цифр, но они довольно скромные.

Архитектуры будущего

Итак, как бы Вы могли охарактеризовать общую ситуацию? Можем ли мы по-прежнему рассчитывать на появление новшеств в области технологии или архитектуры, которые позволят увеличивать производительность на 10 - 20%, а если повезет, то и на все 50% с появлением каждого следующего поколения компьютерных систем?

Если, к примеру, вы усовершенствовали компилятор и добились увеличения производительности на 10 - 15%, вы можете считать, что это очень приличный результат. Вы можете намного увеличить аппаратную производительность, заставив свой процессор работать с большей тактовой частотой. Я уверен, что свидетелями подобных усовершентвований мы будем в течение ближайших нескольких лет.

Какими, по-Вашему, будут тактовые частоты процессора через несколько лет?

До 100 ГГц.

Мы сейчас только приближаемся к тактовой частоте 1 ГГц, а Вы прогнозируете увеличение этого параметра на два порядка?

Через 15 лет мы обязательно этого добьемся. Это всего лишь многократное увеличение, но не гигантское. Самой задачей будет передача сигналов 100-пикосекундной временной синхронизации без искажений, но у нас есть несколько неплохих идей относительно того, как этого добиться.

IBM располагает технологией медных соединений. На микрофотографиях разводка на кристаллах выглядит как каркас гигантского небоскреба. Мы овладеваем технологией рентгеновской литографии, что позволит добиться требуемых возможностей масштабирования. По мере того, как процессор уменьшается, охлаждать его становится легче, что косвенно помогает наращивать плотность размещения вентилей на кристалле. Мы сможем уменьшить электрическую емкость и сопротивление. В конце концов, в нашем распоряжении будут также хорошие программы для оптимизации разводки микросхем; достаточно ясно, что по мере того, как микросхемы становятся быстрее, сделать их еще быстрее оказывается намного проще.

Скажем, я воспользовался рентгеновской литографией, для того чтобы создать микросхему размером 3 кв. мм. Теперь у меня есть 4-процессорный модуль с кэш-памятью площадью 3 кв. мм. Но мне придется побеспокоиться и об адекватной скорости основной памяти. Если я воспользуюсь той же технологией памяти, то на плату, которая, имеет размеры 1 или 2 см по каждой стороне, я смогу уместить 256 Гбайт. Так что у меня теперь есть много быстрой памяти, и я могу обеспечить быстрый доступ к памяти, скажем 5 нс. Затем я организую неблокируемую кэш-память, что делает ее еще немного лучше. Я не говорю, что IBM добьется этого немедленно, но 5 - 10 лет - это очень большой срок для компьютерной отрасли.

Реконфигурируемые компьютеры

Какое будущее ожидает компьютерные системы с меняющейся конфигурацией?

Я возлагаю на них очень большие надежды, поскольку это способ достаточно быстро создать прототип процессора. Но если попробовать поразмышлять о сфере их применения... Пусть, скажем у меня есть 32-разрядное слово, каким количеством функций я могу располагать? Ответ - приблизительно 270, что очень много. Возьмем обычный 32-разрядный сумматор, какие функции в нем есть? Сложение, вычитание, умножение, деление. Вот и вся математика. Так как я думаю использовать 270 двоичных комбинаций? Возможность изменения конфигурации не будет использоваться в функциональном устройстве для того, чтобы извлечь квадратный корень, но она хорошо подойдет для схемы хеширования или шифрования: ключ в 70 разрядов - это достаточно длинный ключ.

Возможность изменять конфигурацию системы прекрасно подходит и для задач контроля. Скажем, мне нужна машина потоков данных или что-то наподобие того. Если я снабжу вас инструкциями, сколько у вас уйдет времени на то, чтобы создать компьютер? Но если у нас есть машина с меняющейся конфигурацией, я отлаживаю ее, а затем сообщаю полученную информацию другой машине, которая и будет создавать то, что мне необходимо. Скажем, это занимает две недели. Так что? Обычно такие сложные проблемы требуют значительно большего времени.

Квантовые вычисления

Что вы думаете о вычислениях на молекулярном уровне?

Сейчас это только теоретический результат и никто не знает, как создать эти самые квантовые компьютеры. Однако исследователи работают не покладая рук, чтобы понять, как это сделать. Я видел статью в журнале Physics Today о том, как можно использовать лазер для моделирования волновой функции электрона. Кто-то очевидно это себе представит. Вспомните, что Келли в Bell Labs объяснил, как построить транзистор, а Шокли, Бардин и другие это сделали. Я не знаю, как это будет работать, но современные ученые намного искушеннее и поэтому, в конце концов, мы станем свидетелями создания квантовых компьютеров.

Из любопытства

О Вас часто говорят, что Вы очень творческий человек, и что Ваши идеи вдохновляют и указывают путь Вашим коллегам как в самой IBM, так и за пределами корпорации. Что Вы посоветуете другим людям, также выступающим в аналогичной роли наставников и вдохновителей исследований в иных областях?

Я делаю то, что делаю, потому, что меня очень интересуют компьютеры. Я вовсе не думаю о собственном успехе. Почти ничего не ускользает от моего внимания из того, что связано с компьютерами, в том числе и люди, которые ими интересуются. Я не могу сказать, что у меня есть какие-то особенно глубокие соображения относительно того, куда надо двигаться дальше.

Можете ли Вы назвать себя азартным?

Нет, я просто обладаю обычным чувством любопытства.

И что же Вами движет?

Ну, я не знаю. Мой отец, после окончания юридического колледжа, когда ему было лет 18, пришел на работу в юридическую фирму своего дяди. Он не мог сдать экзамен на бакалавра, поскольку был слишком молод. Поэтому ему в течение некоторго времени пришлось работать кем-то вроде посыльного, и при этом все его страшно дразнили за чрезмерное любопытство. Однажды он зашел в бакалейную лавку и увидел там черный ящик с дыркой и задумался, что же это могло бы быть. Он сунул в дырку палец и очень сильно обрезался. Это оказалось устройство для обрезания сигар - кое-что мой отец узнавал слишком дорогой ценой. Я думаю, что я унаследовал от него свое любопытство. Надеюсь, что мне не пришлось повторять его отрицательный опыт.

Какой совет Вы хотели бы дать следующему поколению архитекторов компьютерных систем?

Я не знаю. Я делаю то, что я делаю, и не планирую, как я должен это делать. Я никогда не составлял особых планов. Я никогда не был в чем-то непоколебимо уверен. Если я видел новый шанс, я нарушал все правила, даже тогда, когда поступать таким образом скорее всего было ошибкой.

Об авторах

Брюс Шрайвер - консультант компании Genesis 2, член совета IEEE и бывший президент Computer Society. С ним можно связаться по электронной почте по адресу b.shriver@computer.org.

Питер Капек - научный сотрудник Исследовательского центра им. Т. Дж. Ватсона корпорации IBM. С ним можно связаться по адресу capek@us.ibm.com.


Bruce Shriver, Peter Capek. Just Curious: An Interview with John Cocke. IEEE Computer, November 1999, pp. 34-41. Reprinted with permission, Copyright IEEE, 1999, All rights reserved.

Награда в области вычислительной техники The Seymour Cray Computer Science and Engineering Award

Сеймур КрейХрустальный памятный знак
Сеймур Крей считается основоположником суперкомпьютерных вычислений. В 1997 году, дабы увековечить память Сеймура Крея, общество IEEE Computer Society и компания Silicon Graphics учредили ежегодную премию за лучшее инновационное решение в области высокопроизводительных сетевых технологий и высокопроизводительных вычислений. Кок в 1999 году был удостоен чести стать первым лауреатом награды The Seymour Cray Computer Science and Engineering Award.

В удостоверении о вручении этой награды Кока сказано «за уникальный и неоценимый вклад в компьютерную отрасль, выразившийся в разработке высокопроизводительных систем». Он получил также хрустальный памятный знак и гонорар на сумму 10 тыс. долл. от SGI, которая в настоящее время выпускает суперкомпьютеры Cray.


Проект Stretch

Вернер Бухгольц

В рамках проекта Stretch корпорация IBM разработала cdjq первый коммерческий суперкомпьютер IBM 7030. Работа над ним началась в 1955 году под руководством Стефена Дануэлла, и велась в тесном сотрудничестве с Научно-исследовательской лабораторией в Лос-Аламосе. Первая система была установлен в 1961 году, с опозданием почти на год по сравнению с первоначальными планами, но уже через месяц специалисты добились устойчивой работы, после чего она с неизменной надежностью прослужила 10 лет.

Stretch стала весьма амбициозной попыткой растянуть, расширить (игра слов - stretch, англ. - растягивать, тянуть) границы применения существующих компьютерных технологий. В те времена, когда все производимые компьютеры оставались устройствами на лампах, Stretch стала машиной, созданной только с применением твердотельных технологий, высокопроизводительной и надежной. Создатели машины поставили перед собой цель - добиться производительности в 100 раз превышающей производительность самой мощной по тем временам машины - 704.

В дополнение к полевым транзисторам, печатным платам и памяти на магнитных сердечниках, которые были задействованы в рамках проекта, в Stretch были впервые использованы такие технологии и идеи, как: поддержка 72-разрядных слов памяти, с 8 разрядами для контроля арифметических ошибок и исправлений; магнитные диски вместо сердечников для вторичной памяти; меры для одновременного безопасного выполнения большого числа задач; стандартный интерфейс для подключения различных устройств ввода/вывода.

Stretch обогатила компьютерный словарь несколькими новыми терминами - байт и системная архитектура, ставшими теперь общеупотребительными. Основной вклад Джона Кока состоял, во-первых, в разработке и реализации детально проработанного эмулятора системы синхронизации, и предварительного просмотра команд, что делало возможным выполнения накладывающихся операций в едином потоке.

Были построены десять систем, одна из которых стала частью специального продукта для Агентства национальной безопасности, получившего название Harvest.

Так как действительная производительность компьютера оказалась ниже ожидаемой, IBM была вынуждена снизить его цену до такой степени, что его производство потеряло рентабельность, и, в конце концов, прекратила выпуск. Но технологическое наследие Stretch было настолько богатым, что за ним сразу же последовали продукты, завоевавшие коммерческий успех, например, 7090. В системе System/360 воплощены многие идеи Stretch, в том числе то семейство совместимых машин, которые так и не были реализованы для самой Stretch.

Вернер Бухгольц принимал участие в создании целого ряда систем IBM, таких как 701, 702, Stretch System/370. Он проработал в IBM до 1987 года.


ЭВМ IBM ACS-1

Эд Сассенгут

Линейка компьютеров IBM System/360 была представлена в апреле 1964 года. Предполагалось, что она будет пользоваться успехом на коммерческом рынке; привлекательность же ее для ученых была под вопросом. Поэтому решено было начать несколько отдельных проектов по созданию высокопроизводительных систем для научных целей. В 1961 году был начат проект Х, результатом которого стала система 360/91. В конце 1963 года началась работа над исследовательским проектом Y, в рамках которого создавалась не совместимая с System/360 система. Летом 1965 года проект получил название

Advanced Computing System 1 или ACS-1.

Разработчики надеялись достичь в 1000 раз большей сравнению с IBM 7090 производительности, т.е. 160 млн. операций в секунду. Для осуществления задуманного было применено сразу несколько подходов. Такт 7090 составлял 20 нс; такт ACS был уменьшен до 1,6 нс - в 12,5 раз. Еще четырехкратного увеличения производительности планировалось добиться за счет архитектуры и организации машины. Для этого была реализована возможность параллельной работы независимых модулей - выбора команд, дешифровки команд, выбора и хранения данных, индексной арифметики, операций с плавающей точкой и вычисления переходов. Кроме того, за каждый такт должно было выполняться по несколько команд. Дальнейшее повышение общей производительности планировалось достичь за счет оптимизации компилятора и дополнительных модулей распараллеливания.

При разработке ACS было использовано множество новшеств; назову лишь некоторые. В числе основных - механизм установления очередности команд, просматривавший за такт восемь команд и выдававший до семи из них для исполнения, не всегда в порядке их изначального следования. Команды ветвления выполнялись параллельно с вычислениями, упреждающий выбор осуществлялся сразу по нескольким веткам, применялась методика отложенного ветвления. Имелись резервные регистры, вместо которых впоследствии стали применять всевозможные схемы переименования регистров.

Компилятор, архитектура и организация машины разрабатывались согласованно. Осуществлялась потактовая имитация работы ACS, что позволяло производить полный анализ хода выполнения команд и выявлять допущенные при проектировании ошибки.

Затянувшаяся разработка ACS, проблемы с комплектацией и чрезмерное количество требуемых системе плат привели к существенному отставанию от изначального графика работы над проектом. Более того, впоследствии выяснилось, что большинство новшеств, задействованных в ACS-1, подходит и для компьютеров класса 360, пользовавшихся успехом в том числе и у ученых. В 1968 году IBM прекратила выпуск ACS-1.


Системы 801 и PowerPC

Джордж Радин

С 1975 по 1980 год в IBM велась работа над исследовательским проектом 801. Научным руководителем группы, состоявшей из 30 ученых-компьютерщиков и инженеров, был Джон Кок. В рамках проекта разрабатывалась архитектура и конструкция микропроцессора, подобный PL/I язык программирования с оптимизирующим компилятором и операционная система. Общая цель состояла в изучении преимуществ согласованной разработки всех компонентов, возможности расширения горизонтов производительности однопроцессорных систем, по стоимости укладывающихся в ценовой диапазон миникомпьютеров.

В особенности упор делался на сокращение времени такта, среднего числа тактов, за которое выполняется команда, и количества выполняемых команд. Для снижения длительности такта и создания удобной для компилятора целевой архитектуры данные подавались регулярным потоком, имеющим простую структуру. Имелись раздельные кэши команд и данных. В набор инструкций входили команды отложенного ветвления и команды, позволявшие операционной системе снизить количество непопаданий в кэш; имелось несколько регистров условий и диспетчер прерываний, не требовавший очистки конвейера при возникновении прерываний или изменении состояния.

Впервые были применены методы оптимизации, подобные выносу инвариантных вычислений из циклов; кроме того, для распределения регистров использовался алгоритм раскрашивания. Вначале компилятор генерировал очень простой код - код для архитектуры, похожей на целевую, но с неограниченным числом регистров. Затем этот промежуточный код оптимизировался: его простота и задействованная методика вычисления адресов делали оптимизацию крайне эффективной. Конечный исполняемый код получался после распределения регистров.

Продолжением исследовательского проекта 801 стала используемая в RS/6000 процессорная архитектура Power. На ее основе, в свою очередь, сформировалась архитектура PowerPC, применяемая сейчас в системах RS/6000 и Apple. Ряд новшеств 801 (некоторые из них уже использовались в более ранних системах Джона Кока) получили развитие во множестве других разработок. Разновидности 801 применялись в качестве процессоров ввода-вывода в мэйнфреймах и в системе IBM 9370. Известно также, что ко времени завершения работы над процессором 801 ряд использованных его проектировщиками идей независимо изучались и другими группами. Сокращение RISC (от reduced instruction set computing - сокращенный набор команд), возникшее в стенах Университета Беркли, относится к процессорам, основанным на тех же принципах, что и 801.

Джордж Радин был руководителем проекта 801. Он также участвовал в создании языка PL/I.