Интервью с Бабаяном Б.А. - «Задача — сделать неулучшаемую компьютерную технологию»

Интервью с Бабаяном Б.А. - «Задача — сделать неулучшаемую компьютерную технологию»

Бабаян Борис Арташесович

Бабаян Борис Арташесович

Борис Арташесович Бабаян — член-корреспондент РАН, доктор технических наук, профессор, в течение многих лет был заведующим кафедрой «Микропроцессорные технологии» МФТИ, Intel Fellow, лауреат Государственной и Ленинской премий, архитектор компьютеров вычислительных систем «Эльбрус-1», «Эльбрус-2» и «Эльбрус-3». Более 40 лет Борис Арташесович проработал в ИТМ и ВТ. В настоящее время руководит группой, которая занимается разработкой новой архитектуры микропроцессоров в корпорации Intel.

Директор Виртуального компьютерного музея Эдуард Пройдаков побеседовал с Борисом Арташесовичем Бабаяном об истории развития архитектуры ЭВМ.

Эдуард Пройдаков: Борис Арташесович, расскажите, как Вы попали в ИТМ и ВТ?

Борис Бабаян: В 1951 году я поступил на Физтех (МФТИ), а в 1952 году, после окончания первого курса, пришел в ИТМ и ВТ на месячную практику — институт был базовой кафедрой Физтеха. На втором курсе мы проводили в ИТМ и ВТ один день в неделю, на третьем — два дня, а к шестому курсу работали уже всю неделю не покладая рук. Я делал там диплом. Руководителем у меня был Петр Петрович Головистиков.

Моя первая важная студенческая работа была сделана в 1954 году. Я разработал метод carry-save arithmetic — умножение, деление и извлечение корня квадратного без переносов. В 1955 году я доложил результаты на конференции в Физтехе. Это была тема моей дипломной работы. Первая западная публикация на эту тему появилась в 1956 году в журнале Acta Informatica, то есть на год позже.

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

Метод carry-save arithmetic — один из двух, второй метод — умножение, деление и извлечение корня на несколько разрядов — предложил Дж.Е. Робертсон (J.E. Robertson). В соответствии с этим методом вы имеете не только множимое, но и утроенное множимое, и потом выполняете одно действие на три или больше разрядов сразу. Дж.Е. Робертсон был в Москве, и мы с ним встречались.

Эти два метода до сих пор являются основой всех арифметических операций.

Во время создания «Эльбруса» оборудования уже было больше, однако и это не позволяло выполнять высокопараллельные вычисления, но ту арифметику, о которой я рассказал, можно было реализовать двумя способами. Первый способ — один сумматор, можно без переносов, как я сказал, можно использовать метод Робертсона, но все равно использовать один сумматор, а можно сделать намного быстрее — поставить много сумматоров. Поставить их сразу на все разряды, и сразу на всех сумматорах начинается параллельное сложение. Если делать так, то умножитель становится специализированным. Получается — отдельно сумматор, отдельно умножитель, отдельно делитель. И хотя аппаратура уже позволяла это делать, распараллеливать вычисления было еще трудно, потому что оборудование было громоздким. И тогда мы задумались: а что в машине можно улучшить? В то время уже остро встал вопрос программирования, пришло понимание, что программирование — это серьезная вещь. Программы стали большими. Проблем с безопасностью и в помине не было, все машины стояли в отдельной комнате, которая запиралась на ключ. Работали тогда так: приходил один программист, а когда заканчивал работу, снимал свои магнитные ленты. Потом приходил другой, магнитные ленты ставил, начинал работать. Информационная безопасность была никому не нужна.

А программирование всё больше становилось проблемой — многочисленные ошибки в программах уже мучили людей. Поэтому мы поставили задачу, которая актуальна и сегодня: сделать машину, в которой было бы реализовано действительно высокоуровневое программирование. Не мы первые подняли этот вопрос. Первой им занялась американская корпорация Burroughs («Барроуз»). В Москве кто-то купил их машину, и мы отправились на Burroughs, в Финляндию, где несколько дней общались с их главным разработчиком Робертом Бартоном. Очень толковый человек. А потом ездили в США, прямо на Burroughs. Это была очень продвинутая компания.

У нее было много пионерских нововведений, но все они не были доведены до практически приемлемого конца.

Э.П.: Но сегментную память ведь они придумали.

Б.Б.: Да, но с такими ошибками, что ее нельзя было использовать! Первое гениальное, что предложил Burroughs, — нужно поддерживать языки программирования. На самых первых вычислительных машинах были не программы, а инструкции на тему, как работать клавишами. Это был автоматизированный клавишный калькулятор. Посмотрите двоичную программу этой машины — из нее алгоритм извлечь очень трудно. Оборудования было очень мало, поэтому всё шло в угоду ему. Там и не требовалось хорошее программирование, потому что программы были очень маленькие. Когда одна машина заменялась другой, никто и не думал о сохранении программ. Зачем? Программисты тогда считались людьми второстепенными. Переписать эти программы было раз плюнуть. Сел и мгновенно переписал. А вот когда мы приступили к разработке «Эльбрус-1» (это было в 1972 году), этот вопрос стоял уже очень остро. Тогда в НАТО даже встал вопрос о кризисе программирования.

В Burroughs проблемой поддержки программирования занялись в 1960 году. Они ее решали так: сделали машину под Алгол, а этот язык создавался с учетом того, что он должен работать на существовавших в то время машинах. Но даже хороший язык без поддержки аппаратуры будет работать неэффективно. Разработчики Алгола калечили его как могли, пытаясь приладить к машине. Приведу один пример. В языках программирования есть человек номер один — Никлаус Вирт. Он бывал у нас в Москве, а я у него — выступал в Цюрихе. В свое время он создал хороший язык для программирования. Такой язык должен был, как минимум, обладать следующим свойством: в программах есть данные, есть целые и есть вещественные числа. В современных машинах нет целых и вещественных чисел — там есть биты. А язык должен понимать: то, что называется динамическими типами данных, то есть типом переменной, должно быть приклеено к ее значению. Вирт сделал язык Эйлер (Euler) с динамическими типами данных. Все аплодировали, но программы на нем очень неэффективно на машинах шли, потому что не было поддержки таких типов. Тогда он сделал шаг назад — пусть будут типы статические, то есть тип уже принадлежал не числу, а регистру или ячейке памяти. Поэтому, если вы записываете в ячейку целого типа вещественное число, кто-то должен будет преобразовать его в целое. Вернувшись к Алголу, мы сразу сообразили, что если поддерживать этот язык, то косвенно это будет означать поддержку старых машин. Именно это и привело Burroughs к плохим результатам. Тем не менее в этой области они всё равно пионеры.

Теперь давайте поговорим о памяти. В то время еще не существовало виртуальной памяти. Она появилась в Англии, в машине Atlas, где была создана страничная память, однако первую виртуальную память (но без виртуального пространства) реализовала всё-таки Burroughs, сделав правильный шаг, — память у них объектно-ориентированная. Вот есть память. Пользователь заказывает объект. Объект, допустим, занимает 15 машинных слов. Ему выделяется точно 15 слов. Кто-то попросит одно слово — ему выделят одно слово. Между объектами пустые места, поскольку память выделяется динамически. К объекту нужно обращаться через дескриптор. Они ввели дескриптор. Это была гениальная идея. Но в дескрипторе они записывали физические адреса. В первой машине В5500 у них все дескрипторы размещались в начале памяти, под них была отведена тысяча (1000) ячеек. Поэтому, если какой-либо массив уничтожался, было известно, какой дескриптор нужно было уничтожить. На момент нашей встречи c Бартоном, разработчиком машины B5500, в ней это было более-менее хорошо сделано. Но пользователи сразу сказали: плохо, потому что все дескрипторы собраны вместе. В машине B6700 программисты уже имели возможность рассылать дескрипторы по памяти. Если массив уничтожается, попробуйте найдите все дескрипторы, а в руководстве было написано: если вы не все дескрипторы уничтожили сами, это может привести к краху операционной системы.

Что же сделали мы? Мы тоже сделали объектно-ориентированную память, а поверх нее ещё и виртуальную память. Другими словами, если вы заказываете массив, то он размещается на страницах. Если он меньше страницы, то физической памяти выделяется ровно столько, сколько нужно, а конец виртуальной памяти не используется. У массива, занимающего несколько страниц, последняя страница может быть занята не полностью. Дескрипторы у нас уже с виртуальными адресами. Если вы уничтожаете массив, то виртуальную память нельзя повторно использовать, потому что дескрипторы разосланы, а физическая память сразу же повторно используется. Когда виртуальная память близка к переполнению, мы в фоновом режиме сканируем всю память, знаем все «дыры» и уничтожаем дескрипторы с этими виртуальными адресами. Все «живые» виртуальные адреса мы компактируем — уменьшаем на суммарный размер предшествующих «дыр».

Э.П.: Это такая сборка мусора?

Б.Б.: Это не сборка мусора, потому что сборка мусора — неэффективная процедура, нужно делать поиск по стекам. Кроме того, только после сборки мусора, а не уничтожения массива, освобождается физическая память, а у нас физическая память повторно может использоваться сразу после уничтожения объекта. Это только фоновая сборка виртуальной памяти.

Э.П.: То есть эта процедура на детерминированность программы не влияла.

Б.Б.: Ни в коем случае. Единственный минус — там могут возникнуть ситуации, которые рассматриваются как программные ошибки. На самом деле это великолепно работало в «Эльбрусе-1, 2». Из-за того, что Burroughs сделала виртуальную память без использования виртуального пространства, у них Фортран просто умер. У меня есть статья, в которой я это описал. Что мы сделали в «Эльбрусе-1, 2»? Мы закончили разработку механизма компактировки виртуальной памяти в 1978 году. Хотя я и критикую Burroughs, но считаю, что это была гениальная фирма. Они во всем пионеры. Мы сделали второй шаг за ними. Они даже не говорили о компьютерной безопасности. Она и не нужна была. И мы о ней не говорили, но, так как мы делали всё, исходя из очень фундаментальных принципов, оказалось, что уже «Эльбрус-1» полностью решает эту проблему. В отличие от того, что делают сейчас, программисту для обеспечения компьютерной безопасности ничего не нужно было специально предпринимать. Сегодня вопрос безопасности рассматривается очень серьезно. Специалисты одной из фирм, занимающихся информационной безопасностью, сказали нам, что всё, что сейчас делается для компьютерной безопасности, напрасная трата денег и времени. Сейчас ведь как всё происходит? Обнаруживается уязвимость, потом антивирусные компании — Касперский или McAfee — «заштопывают» эту дыру, а у атакующих за это время появляются новые средства. Поэтому уровень безопасности мало зависит от того, что устранена предыдущая угроза. Безопасность, она или есть, или ее нет вообще.

В «Эльбрусе-1, 2» в основе нашего подхода лежали самые простые вещи. Например, что является основой объекта? Есть объект и есть процедура. Объект — это пользовательский тип, а процедура — пользовательская операция. Они между собой связаны. Для объекта есть пять простых требований: всякая процедура может заказать объект и получить ссылку на него. В ссылке будет условие, что с объектом можно делать. Если объект уничтожен, то до него никто не сможет добраться. Если у тебя нет этой ссылки, то нет и доступа к объекту. Для процедур определено, что у каждой процедуры есть контекст — ее глобальные и локальные переменные и ее параметры. Процедура имеет право обращаться только к своему контексту. Конечно, у нас все данные с динамическими типами. Это необходимо хотя бы потому, что по своим базовым принципам и реализации операционная система в «Эльбрусе-1, 2» может работать исключительно в пользовательском режиме, привилегированный режим можно не вводить. К сожалению, в ОС «Эльбрус» в некоторых процедурах введен привилегированный режим, который можно легко убрать. По своим базовым принципам философия «Эльбрус» не требует введения привилегированного режима. В силу того что правильно сделаны указатели, у данных есть теги, которые показывают, что можно делать с этими данными. Если это данное — указатель, то его нельзя менять произвольным образом. Так было уже в 1978 году. Тогда мы не заботились о компьютерной безопасности. Но в этих машинах эта проблема была решена полностью. 

Э.П.: Сейчас распространены два основных типа атак — атаки с переполнением буфера и сетевые атаки на превышение возможностей обработки запросов. 

Б.Б.: С атаками последнего типа, если у компьютера не хватает производительности, ничего нельзя сделать, но информацию при этом вы не потеряете. Сравнение с Западом: полную реализацию механизма capability и полную security на его основе мы сделали в реальной машине («Эльбрус») в 1978 году, на Западе близко ничего не было и нет до сих пор. В 1981-м Intel тоже занялась этой проблемой. Тогда у нее появился процессор iAPX 432, в нем стояла контекстная защита, но была ошибка, которую спровоцировал Жак Деннис. В 1974 году он был в Москве, и мы с ним многообщались. Жак осмыслил понятие capability, означающее, что вы имеете доступ к тому, на что получили ссылку. Ссылка становилась самым главным критерием безопасности, ее подделать никто не может. Но чтобы это работало, нужно, чтобы каждое слово памяти имело тег. Жак предложил вариант метода, когда тип определяется не для каждого данного, а для всего массива (capability list), в этом случае тегов не нужно — у массива всегда есть одно дополнительное слово, в котором указан его тип. Это была колоссальная ошибка, но все почему-то за его предложение ухватились. В СССР ЦК и Совмин обратились к ученым с вопросом: может быть, нужно копировать iAPX 432, потому что это процессор с интересными данными? Я написал письмо, где ответил: ни в коем случае! Через несколько месяцев этот проект с треском провалился из-за неэффективности такого подхода. Для запуска процедуры требовалось в среднем 50 обращений в память. 

Э.П.: Скажите, Intel Fellow, что это за статус у Вас такой? 

Б.Б.:Intel Fellow — это высшая техническая должность. Переводится как «заслуженный ученый-исследователь». Это техническая элита корпорации. 

Э.П.: Такое звание Вас к чему-то обязывает в Intel? 

Б.Б.:Обычно Intel Fellow ведут активную научно-техническую деятельность. То, что мы делаем в Intel, это абсолютно признано, но опять же по моему опыту — если вы что-то сделали, то есть три составляющих этого дела: на саму технику приходится 30% усилий, на изложение результатов, чтобы они были понятны людям, — 20%, а 50% — это политическая борьба за выживание. Это везде так. 

Э.П.: Интересна история нашумевшего перехода Вашей команды в Intel. Какова была мотивация этого перехода? 

Б.Б.: В то время чрезвычайно трудно было проектировать архитектуру в России — требовалось большое финансирование, а у нас было очень много толковых людей. Коллективы в России очень хорошие, но разработка машины стоит очень больших денег, много миллиардов. Их можно окупить, если будут массовые продажи этой машины. Внутри страны эта работа не окупится — нужны фабрики высокого уровня для того, чтобы быть конкурентоспособными на мировом рынке. С западными фабриками может возникнуть проблема. В Intel таких проблем не было. Практически хороший вариант — это совместная работа. В Intel российские работы очень высоко ценятся. Есть люди, которые говорят, что из Москвы приходят здравые архитектурные идеи. Наши ребята, которые здесь работают, сейчас делают машины, которые увидят свет в 2020 году. Нужно, чтобы технологии подросли. 

Э.П.: Но Intel же перешла на 10 нм? 

Б.Б.:Да, переходит на 7 нм. Более того, технологии меньше, чем 28 нм, делают машину быстрее, но дороже. А если они меньше 5–7 нм — машина становится и дороже, и не быстрее. Мы подошли к тому, что я здесь делаю. Суперскаляр я раскритиковал, вместо него мы разработали свой подход, который дальше уже просто неулучшаемый. Конечно, теоретически это трудно доказать, но и трудно опровергнуть. Как я всегда говорю, вычислительная техника — это схема архитектуры из конечного числа дискретных компонентов. Их много, но конечное число. Теоретически конечное число дискретных элементов имеет конечное число реализаций, хотя и баснословно большое. Из этого конечного числа реализаций — одна наилучшая. Ее просто нужно найти. Первые ЭВМ в тех условиях ограничений по оборудованию были неулучшаемыми — арифметика неулучшаемая, оборудования больше чем на одну арифметику не хватает. Более того, эта архитектура универсальная — любая конкурирующая архитектура должна иметь такую же арифметику. После этого все машины, которые сейчас выпускаются, — не универсальные, потому что суперскаляр не может использовать всё доступное оборудование. Поэтому сейчас море программируемых специализированных машин. Спрашивают, может быть, специализированные машины лучше универсальных? Это сомнительное высказывание, потому что много лет никто не видел универсальной машины. Нет ее, сравнить не с чем. А то, что мы делаем, это универсальная машина, которая, я думаю, будет хороша для всех алгоритмов. По очень простому принципу нужно как сделать? Нужно, чтобы был язык, абсолютно точно излагающий алгоритм, чтобы программа приходила на компилятор, локальный для моделей, а аппаратура должна быть как конструктор Lego, легко реструктурируемаякомпилятором — никакой оптимизации в аппаратуре. Аппаратура должна быть очень простой. Как я говорю, у аппаратуры мускулы сильные, но слабые мозги, а у компилятора мускулов вообще нет. Компилятор должен выполнять оптимизацию с учетом динамической обратной связи. Если сделать такую схему, то совместимость образуется либо на уровне языка, либо на уровне двоичного кода, который приходит к компилятору. Это две разные системы. Большим преимуществом является то, что вы можете что-то менять в аппаратуре, делая соответствующие изменения в локальном для модели компиляторе. При этом будет сохраняться полная совместимость на пользовательском уровне. Это значит, что вы можете довести аппаратуру до неулучшаемого состояния. Я держу у себя номер журнала «Суперкомпьютер» из-за одного выражения в статье «Есть ли жизнь после закона Мура». 

Э.П.: Закон Мура как бы уже закончился, но его перевернули — стали говорить не о количестве транзисторов на кристалле, а о суммарной производительности. 

Б.Б.: В той статье приводится высказывание афинского философа Аристида. Он сказал: «Всё, что имеет начало, имеет и конец». Силиконовая технология это доказала. То, что мы делаем, может доказать то же самое в компьютерной архитектуре. Потому что арифметика неулучшаемая, суперскаляр практически тоже при внешних ограничениях аппаратной совместимости (нет локального компилятора), хотя это трудно доказать теоретически, но уже все разработчики понимают: всё, суперскаляр остановился. Мы это поняли еще в 1985 году. Вариант с локальным компилятором, но совместимый, будет неулучшаемым для процессоров ARM или для x86. Он тоже достигнет неулучшаемого состояния. И если совсем отбросить требование совместимости, то это будет абсолютно неулучшаемое состояние. Кремниевая технология неулучшаема, площадь кристалла ограничена. Всё, это достижение предельно возможного совершенства развития вычислительной техники, но его еще нужно достигнуть — по практическим результатам это не так далеко. Одна сторона нами сделана — полностью обеспечена безопасность, легко программировать, но нужно еще поработать над параллелизмом. 

Э.П.: А дальше, как Вы думаете, на фотонику всё перейдет? 

Б.Б.:Этого я не знаю. Непрофессионально не хочу высказываться. Если там будет что-то логически другое, то Аристид же правильно сказал. 

Э.П.: С древними греками не поспоришь. А вот всякие прорывы в технологии памяти, голографическая память могут изменить ситуацию? 

Б.Б.:То, что я рассказывал про архитектуру, верно при заданной логической структуре компонентов. 

Э.П.: Проповедовали еще вычисления в ячейках памяти. Б.Б.: Не думаю. Те, кто это проповедовал, уже сами от этой идеи отказались. Я встречался Бобом Колвеллом, который сделал суперскаляр (Р6) в 1995 году и сделал Intel великим. А сегодня считается, что быстрее процессор не сделать. Можносделать во много раз быстрее. У меня в этом плане возражений и вопросов к Intel очень много. Но сейчас такой период, что нам нужно дойти и выполнить предсказание афинского философа. 

Э.П.: Народ шутил, что Pentium был назван так в честь Пентковского. 

Б.Б.:Нет, конечно, это шутка то ли Алексея Пылкина, то ли Николая Малышева. Эта версия распространилась и даже недавно в каком-то фильме прозвучала.

Э.П.: Интересно, кто из работавших в ИТМ и ВТ, кроме Лебедева, произвел на Вас большое впечатление? 

Б.Б.:Конечно, Лев КоролевВиктор Иванников, Юлий Сахин, Андрей Соколов, выдающийся человек. Володя Пентковский, очень толковый разработчик. В команде, которая сейчас в ИНЭУМработает, — Сергей Семенихин, Владимир Волконский, Александр Ким, Владимир Фельдман, Леонид Назаров и много-много других, которых трудно всех здесь перечислить. 

Э.П.: Кроме вычислительной техники, чем Вы увлекаетесь? 

Б.Б.: Сейчас мне 82 года, а в прошлом я много спортом занимался — был серебряным призером первенства Советского Союза по альпинизму, выигрывал первенство Москвы. Альпинизмом занимался очень серьезно — ходил в группе с Евгением Таммом, который потом руководил экспедицией, по стене взошедшей на Эверест. Это всё мои друзья. Продолжительное время катался на горных лыжах, но серьезно ими не занимался. 

Э.П.: Спасибо за беседу. 

Глава из книги «Страницы истории отечественных ИТ. Том 3.»
Помещена в музей с разрешения автора