Взлет и падение БЭСМ-6

В Интернете распространено забавное заблуждение — что якобы у СССР были собственные прекрасные ЭВМ, которые вредители из Политбюро уничтожили, приняв решение ориентироваться на копирование западной техники — прежде всего на IBM S/360. И самое смешное в этом то, некоторые формальные основания так заявлять есть — однако если начать копать вопрос вглубь, разверзаются бездны.

Как известно, первым электронным универсальным компьютером является американский ENIAC. Машина имела впечатляющие характеристики: 18.000 электронных ламп, занимала площадь 90×15 кв.м., весила 30 т и потребляла 150 кВт. Старались не отставать от американцев и в Англии. Но в СССР работы над ЭВМ существенно задержались. Я не буду сейчас рассказывать всю историю метаний и ошибок «советской школы» ЭВМ — достаточно уже того, что из всего многообразия созданных в СССР ЭВМ при сравнении с современной им западной вычислительной техникой неизбежно остается сиять единственная «самобытная» машина — БЭСМ-6. Все остальные «советские компьютеры» сравнений не выдерживают.

Попутно я вам постараюсь объяснить, ЗАЧЕМ было принято решение о копировании IBM S/360. И ответ на это вопрос очень простой — СОФТ.

Железо сделать — особо много ума не надо, упомянутая выше серия БЭСМ-6 была технически вполне приличной машиной, архитектурно — так даже очень приличной по тем временам. Однако советские НИИ так и не смогли выродить для этой машины ни приличной операционной системы, ни приличных компиляторов с Фортрана и Кобола, не говоря уже о чем-то большем. А писанина в машинных кодах и запуск задач в монопольном режиме — это для конца 60-х годов уже выглядело архаизмом.

При этом пресловутая архитектура БЭСМ-6 в значительной степени воспроизводила архитектуру системы CDC 1604 фирмы Control Data Corporation (главный конструктор — Сеймур Крэй), серийно выпускавшейся с 1960 года (полностью совпадают некоторые важные технические характеристики, такие как уникальная для этих двух систем разрядность слова и адреса и разрядность машинных команд в слове, использование одноадресных команд с индексным регистром, регистра скрытых разрядов, кодировка символов и ты ды). Также ряд архитектурных решений БЭСМ-6 повторяет систему Atlas (британский военный суперкомпьютер) и CDC-6000 всё того же Крея. Есть мнение, что БЭСМ-6 получилась в процессе метаний — начали передирать с CDC 1604, потом кинулись внедрять туда новации с Атласа, потом еще элементы CDC-6000 и какие-то свои задумки, вдобавок не всё получалось на тогдашней советской элементной базе — стали лепить аппаратные заплатки, ну и вот вышел странный гибрид, имеющий черты исходных архитектур — но сильно перекорёженный. Об этом ниже, а пока поговорим про софт.

Очень много сил было потрачено на адаптацию стыренного с CDC транслятора Фортрана к БЭСМ-6, а когда это было сделано — внезапно выяснилось, что программы на Фортране (ворованные исходники), прекрасно работающие на CDC-1604, вылетают либо дают неверные результаты расчетов при запуске на БЭСМ-6. Разработчикам, адаптировавшим транслятор Фортрана для БЭСМ-6, была поставлена задача обеспечения полной совместимости с CDC 1604 — но они с этой задачей не справились.

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

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

Именно тогда и было принято решение — для вычмашин копировать IBM S/360, а для управляющих машин — PDP-11. Выбор архитектур был сделан исходя из наличия софта и ОС под них, а качество самих архитектур рассматривалось во вторую очередь.

Казалось бы — с софтом-то что за проблемы? Вроде как мы, русские, не тупые. Уж свой компилятор-то под свое железо собрать можно было?

Увы, всё не так просто. Единственный приличный компилятор под БЭСМ-6 — это курочкинский компилятор Алгол-60. И всё — остальное, как ни бились, было кривым куском гугна. При этом аккуратно к моменту, когда у Курочкина этот компилятор стал работать еще на БЭСМ-2 — европейцы полностью переделали Алгол, он стал называться Алгол-64, и героический труд советских программистов оказался спущен в унитаз. Ну как оказался — СССР так и сидел на этом старом Алголе до перестройки, потеряв возможность тырить алгольный софт из всякого там ЦЕРНа и так далее.

Компилятор для Алгола-64 курочкин уже не осилил.

Кроме того, имеется другая проблема: стыренный из США софт на фортране, будучи скомпилирован на БЭСМ-6, не работал. Попытки добиться его работоспособности даже затачиванием компилятора на кросс-компиляцию известной американской системы — не оказались успешными.

А перед советской вычтехникой задача стояла именно такая — сделать так, чтобы на советских машинах можно было запускать ворованный софт. В идеале — вообще без проблем, в реале — с перекомпиляцией и не слишком трудоёмкой доделкой-отладкой. Потому что писать всё своё — было утопией, это стало ясно уже к середине 60-х. И дело в конечном счете даже не в операционных системах и компиляторах — их кое-как делали свои, дело в прикладных пакетах, коих уже в 60-е годы были многие тысячи, и никакие советские НИИ были не в состоянии обеспечить софт такого качества в таком количестве. Только тырить и копировать, только так можно было обеспечить народное хозяйство современным софтом и не отстать окончательно.

Для БЭСМ-6 большим коллективом разработчиков под руководством В. Ф. Тюрина в 1971 г. была создана операционная система ДИСПАК. Она потом использовалась почти на всех ЭВМ типа БЭСМ-6 вплоть до 90-х годов, и дальше перекочевала на Эльбрус. Благодаря Диспак в 1972 году к БЭСМ смогли наконец-то подключить магнитные диски. Для тех, кто не в курсе — компы ИБМ работают с магнитными дисками с 1956 года. Это чтобы вы себе лучше представляли «передовую архитектуру» БЭСМ, и насколько она отставала от ИБМ.

Вы спросите — а как же БЭСМ-6 работала без дисков? А у нее были магнитные барабаны. 1 барабан имел емкость 16 килослов (192 килобайта) и весил чуть не полтонны.

Барабанов можно было прицепить, насколько я помню, 4 штуки максимум. При этом обычные жесткие диски ИБМ имели емкость 5 мегабайт, а большие — 30 мегабайт. Из этого понятно, что самая лучшая машина СССР БЭСМ-6 катастрофически отставала от продукции ИБМ в объеме обрабатываемых данных.

Но как же так вышло? А всё дело в том, ДЛЯ ЧЕГО строили машины серии БЭСМ. Внезапно для очень многих, их строили в качестве УПРАВЛЯЮЩИХ машин для ракетчиков — все остальные сферы применения у БЭСМ появились уже потом, по принципу «ничего лучшего все равно нету».

БЭСМ-1 была завершена осенью 1952 года и являлась скорее демонстрационной моделью, хотя и работоспособной (именно она на фото в заголовке). Известна также как БЭСМ Академии Наук (БЭСМ АН). Построена на электронных лампах (5.000 ламп — сравните с 18.000 ЭНИАК) в единственном экземпляре.

БЭСМ-2 — усовершенствованный и несколько удешевленный вариант БЭСМ-1, подготовленный для производства. Ламп стало меньше, поскольку часть из них заменили на полупроводниковые диоды. На самом деле БЭСМ-2 — это как бы «гражданский» вариант военной машины М-20, разработка которой для нужд ПВО и наведения ракет и была исходной целью. Можно встретить утверждение, что на момент окончания разработки (1958-1959 годы) М-20 являлась самым быстрым компьютером в мире. Данное утверждение, однако, не соответствует действительности: быстродействие М-20 составляло 20 тыс. операций в секунду, в то время как, например, IBM 704, выпускавшаяся с 1954 года (то есть на 5 лет раньше), имела быстродействие 40 тыс. операций в секунду, а представленная 30 декабря 1958 года и поставлявшаяся с 1959 года транзисторная ЭВМ IBM 7090 — более 220 тыс. операций в секунду.

Вариантом М-20 является машина М-40, входившая в комплекс для управления РЛС дальнего обнаружения и сопровождения цели и точного наведения противоракеты на баллистическую ракету противника. М-40 начала выполнять боевые задачи в 1957 году. Всё еще ламповая.

М-50 введена в 1959 г. и явилась модификацией ЭВМ М-40 на полупроводниках. В конечном счете из нее сделали «гражданскую версию», называвшуюся БЭСМ-4. Дальнейшее развитие — многопроцессорная 5Э92б с общим полем памяти, опять же для систем управления ракетным оружием.

В конце концов эта архитектура, будучи реализована на микросхемах, вылилась в машину 5Э26, применявшуюся для наведения ракет ЗРК С-300 первых поколений.

Для БЭСМ-4 существовало не менее 3 разных компиляторов с языка Алгол-60, компилятор Fortran, не менее 2 разных ассемблеров (дубнинский и Баяковского), компилятор с оригинального языка Эпсилон.

И вот, наконец, БЭСМ-6 была разработана в середине 1960-х годов и сдана Госкомиссии в 1967 году. С 1968 года начат серийный выпуск на заводе Счётно-аналитических машин (САМ) в Москве. Считается первой советской супер-ЭВМ второго поколения — на полупроводниковых транзисторах. Ну из тех, которые не были закрыты грифом «секретно».

БЭСМ-6 стоит особняком — она не является развитием архитектур предыдущих машин БЭСМ, но на ее облик наложились всё те же требования заказчиков. Именно этими требованиями было вызвано то, что Лебедев в создании БЭСМ-6 отталкивался от архитектуры американских машин CDC, а не от IBM.

Тут надо понимать, что Control Data Corporation делала машины для систем управления и научных расчетов — в то время как International Business Machines делала машины для бизнеса, в основном для финансовых расчетов и систем учета. Это принципиально разные сферы применения, и они накладывали свой отпечаток на архитектуры систем.

БЭСМ-6 стала еще более ярким примером такого разделения областей применения. Мало кто из «любителей БЭСМ» вообще в курсе, что в БЭСМ-6 отсутствует целочисленная арифметика. Знаете ли вы, отчего это так? Ведь в CDC-1604, появившейся на 8 лет раньше, основные характеристики которой повторяет БЭСМ-6, целочисленная арифметика была, и весьма развитая. В какой момент копирования она из БЭСМ-6 исчезла, и из-за чего?

А всё довольно просто. Основной задачей БЭСМ-6 были траекторные вычисления движения ракет. Там целочисленная арифметика не нужна. Поэтому когда Лебедев столкнулся с трудностями в совмещении двоичного и «плавающего» АЛУ — он просто выкинул двоичный вычислитель, решив эмулировать эти операции на «плавающем» вычислителе.

CDC-1604 и БЭСМ-6 были машинами с сумматором. Т.е. в них был один выделенный регистр (на самом деле 2 — аналог AL и AH в терминологии Intel 8086), в котором и производились все операции. Чем-то это похоже на стековую архитектуру JVM. Понятно, что при такой архитектуре приходится постоянно загружать и выгружать значения из памяти/в память. Для этого уже тогда применялись различные схемы адресации, и (а куда деваться) существовали т.н. индексные регистры. Причем в обеих машинах они «кривые» — не совпадают с размером слова (!) и размером регистра аккумулятора, и даже не кратны ему. В CDC-1604 и БЭСМ-6 мы имеем 15-ти битные индексные регистры и 48-битный аккумулятор.

Но это, конечно же, случайное совпадение, ага.

Зато на БЭСМ-6 были экстракоды, прямиком потыренные с британского Атласа (это суперкомпьютер, разработанный британцами для наведения ракет — позднее он использовался и для научных вычислений, но то такое).

Первый компьютер Atlas был официально введен в эксплуатацию 7 декабря 1962 года. Тогда его вычислительная мощность считалась равной четырём компьютерам IBM 7094 и почти такой же, как у компьютера IBM 7030 Stretch, являвшегося на тот момент самым быстрым суперкомпьютером в мире. Разработка БЭСМ-6 завершена в конце 1966 года, первый серийный образец выпущен в 1968 году. Вопросы?

Часто пишут, что в БЭСМ-6 была и поддержка виртуальной памяти (а в Atlas она была!), но на самом деле это не верно. С современной точки зрения «поддержка виртуальной памяти» дает нам возможность адресовать больший объем памяти, чем реально установлен на машине (к примеру — процесс может получить 4 Гб памяти, при том, что реально установлен всего гигабайт). Однако на БЭСМ-6 (поздних модификаций) сложилась парадоксальная ситуация, обратная вышеописанной. Физической памяти на машине было доступно больше, чем ее можно было адресовать! Сиречь, имея 128 килослов памяти, мы должны были по-прежнему работать с ней через 15-тибитные регистры адреса, как в CDC-1604. Из-за этого в БЭСМ-6 ввели натуральную порнуху — специальные регистры, доводившие адрес памяти до 17-битного. Это и называлось — «виртуальная память», хотя это просто плавающие страницы.

В системе Atlas адрес изначально был 24-х битным, и при попытке адресации за пределы реальной памяти супервизор подкачивал с барабана страницу с соответствующим «виртуальным адресом» в реальную (ферритовую) память, примерно так, как это происходит сейчас при подкачке страниц с диска. Т.е. механизм виртуальной памяти был уже вполне традиционным.

«Конвейер» на БЭСМ-6 подсмотрен у CDC-6600 того же Крэя — вот только у Крэя он реально обеспечивает распараллеливание исполнения (там каждый процессор имел 10 независимых функциональных блоков, могущих исполнять инструкции из конвейера параллельно), а у БЭСМ он болтается довольно бессмысленным придатком — например, если ALU умножало два числа, то ничего другого оно делать уже не могло, и конвейер стоял.

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

Разумеется, в данном случае нельзя говорить о тупом копировании. Правильно говорить о творческой переработке базовой архитектуры CDC c добавлением множества идей из других источников. Причем не всё в этой комбинации у БЭСМ-6 вышло удачно, но в целом машина работала, и работала неплохо.

Широко известное заблуждение касается наличия в БЭСМ-6 кэш-памяти. Об этом пишет чуть не каждый второй. На самом деле, назвать то, что имелось в машине «кэш-памятью» можно только с очень большой натяжкой. Примерно такой, как изобретение Рентгена Иваном Грозным (я тебя, боярин, насквозь вижу!). Да, принцип похож, но до полноценной реализации еще пахать и пахать.

Что было на самом деле? Четыре т.н. буферных регистра числа (БРЧ) куда считывались слова из памяти, чтобы потом к ним могло быстрее обратиться арифметическое устройство (АУ). Аналогично, имелось 8 (забавная асимметрия) буферных регистров записи (БРЗ) куда число помещалось перед отписыванием в память. Адрес, куда должен быть записан операнд, сохранялся в т.н. БАЗ (буферном регистре адреса записи). Если в дальнейшем оказывалось, что исполнительный адрес совпадает с одним из адресов в БАЗ/БАС-ах, операнд брался из БРЗ/БРЧ а не из памяти. Вот и вся наука.

Полноценная же реализация кэш-памяти впервые появилась в машине IBM/360-85 в 1969 году.

Второе заблуждение говорит о БЭСМ-6, как якобы предвестнице RISC-архитектуры. На этой почве тоже строится много спекуляций. Но и тут, истина довольно далеко. Безусловно, в БЭСМ-6 не слишком много команд. Можно сказать даже — мало. И, разве что по этому параметру она сближается с RISC. Другое дело, что команды эти — совсем не похожи на традиционные RISC-овские. Они имеют совершенно различную сложность и времена выполнения. Ключевыми особенностями RISC можно считать:

  1. Небольшой набор простых команд
  2. Минимизация команд работы с памятью, за счет большого числа регистров общего назначения
  3. Небольшая длительность выполнения каждой команды (1-2 такта) CPU

Ни одна из этих особенностей не присуща системе команд БЭСМ-6. Она включает как очень простые команды (запись, сложение), так и довольно сложные (деление, сборка). Время выполнения команд различается в десятки раз! Например, чтение требует 3-х тактов, сложение — 11-ти, деление — 50 (в среднем). О максимальных временах выполнения говорить не приходится вообще — там ужас, ср@ное сложение могло длиться 280 тактов.

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

Спору нет, на европейском уровне характеристики БЭСМ-6 смотрятся неплохо. Но и только. Даже не беря творения Сэймура Крэя (по сути — тоже числодробилки), обычные майнфрэймы IBM были не хуже на научных расчетах, и существенно лучше БЭСМ-6 на финансовых.

Удивляться тут нечему. Еще раз напомню, что БЭСМ-6 не имела полноценных команд целочисленной арифметики, и значит, любые арифметические команды выполнялись на вещественном сумматоре. Это приводило к тому, что даже в самом лучшем случае сложение занимало 5 тактов (в среднем — 11) а умножение — 15 тактов (в среднем — 18.5, в худшем — 162, драть!!!!). Что уж говорить о каком-нибудь сложении десятичных чисел. В результате, программы не только выполнялись медленнее, чем могли бы, но и занимали больше места.

Об этом упоминает и В.В. Пржиялковский в своем обзоре — «Проведенные в ИПМ АН СССР исследования показали, что программы, составленные для IBM-360, требуют в 1,5-3 раза меньшего объема памяти, чем программы БЭСМ-6, “Весна”, М-20».

Если же говорить о производительности в цифрах — по «популярному» тогда тесту Whetstone, БЭСМ-6 набирала примерно 0.3-0.4 миллиона операций с одинарной точностью в секунду, что было на уровне средних моделей IBM. И никаких чудес, увы…

И вот теперь мы подходим к главному. Созданная для управления ракетами, архитектура БЭСМ-6 совершенно не подходила для компьютеризации народного хозяйства, в котором требовалось решать задачи учета и контроля, а не вычисления траекторий движения тела в гравитационном поле. Зато для этих задач прекрасно подходила архитектура машин ИБМ.

Я вам больше того скажу — и для целей управления ракетами БЭСМ-6 подходила плохо из-за чудовищного разброса времени исполнения команд (Лебедев просто не понимал, насколько важно для систем реального времени иметь ПРЕДСКАЗУЕМОЕ время выполнения команд). Вот посмотрите, как устроена система команд в пресловутом микропроцессоре i8080 — там заранее четко известно, за сколько тактов выполнится та или другая команда. Разумеется, сложение аккумулятора с регистром выполняется быстрее, чем сложение его же с ячейкой памяти — но эта разница так же фиксирована. Процессор работает настолько чётко, что им можно музыку играть или синусы генерировать, основываясь только на времени исполнения команд. А в БЭСМ-6 время исполнения гуляет в зависимости от случайных явлений — попал или не попал адрес в предвыборку, даже от значения операндов время исполнения зависит.

Инженеры Интел, когда создавали свои первые микропроцессоры — ориентировались именно на управление физическими объектами, поэтому сделали их такими. А академик Лебедев ничего этого не понимал, витая в математических облаках.

Вот поэтому к концу 60-х годов СССР пришел, вообще не имея приличных машин для автоматизации учета и управления народным хозяйством, а для управления ракетами в оборонных системах имея архитектуру ЭВМ, показавшую ряд серьезных недостатков, причем недостатков неустранимых by Design — это отчетливо выяснилось при доводке систем М-40 и М-50 в системе ПРО страны.

Опираясь на это понимание, тогда и было принято решение — для вычмашин копировать IBM S/360 (это хорошая архитектура для управления нархозом, и удовлетворительная — для научной математики), а для управляющих машин выбрали PDP-11.

Между прочим, архитектура PDP-11 практически гениальна именно для тогдашней элементной базы и применения машины для real-time управления. Но это уже совсем другой разговор.

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

Материал: Proper специально для TopRu.Org
Настоящий материал самостоятельно опубликован в нашем сообществе пользователем Proper на основании действующей редакции Пользовательского Соглашения. Если вы считаете, что такая публикация нарушает ваши авторские и/или смежные права, вам необходимо сообщить об этом администрации сайта на EMAIL abuse@newru.org с указанием адреса (URL) страницы, содержащей спорный материал. Нарушение будет в кратчайшие сроки устранено, виновные наказаны.

You may also like...

новее старее
Уведомление о
Прорэбе
Прорэбе

Статья проплачена ИИ.
Иим же написана

Ոሉαዙҿτα ಭҿҝҿሉҿʓяҝα〄
Ոሉαዙҿτα ಭҿҝҿሉҿʓяҝα〄

Сам о себе написал жэж.. Аш фото приложил)
Но мы то (или не мыто?) знаем что такое ИИ..

Прорэбе
Прорэбе

Зннайм. Нонис кажъм

Ոሉαዙҿτα ಭҿҝҿሉҿʓяҝα〄
Ոሉαዙҿτα ಭҿҝҿሉҿʓяҝα〄

ой ёёёё. Как терь житьта..
comment image

Прорэбе
Прорэбе

Ригулярно

Ոሉαዙҿτα ಭҿҝҿሉҿʓяҝα〄
Ոሉαዙҿτα ಭҿҝҿሉҿʓяҝα〄

А как жэж струны души?
comment image

Gres
Gres

Котэ правокатыр, дэмонстрыруэт жэст гурузынскых протэстуущых

Прорэбе
Прорэбе

А у нас в деревне все
Слушают х…ню,
Слушают Рахманинова,
Гайдна и Шопена.
Только я считаю что
Всё это — лайно.
Я поклонник музыки иной
Люблю я грюппу Диппурплеер
Грюппу Диппурплеер
Хрюпу Диппурплеер
Крайне я люблю.

Как тарас друзьяменя
Ударили байдаркой .
Я очнулся и пошёл
В местный кабачок.
Там лабал какой то хмырь
Сонату номер пять.
Я сказал ему iбенамать
Ты сбацай грюппу Диппурплеер
Вот тебе задача
Грюппу Диппурплеер
Вот тебе полтос.

Прорэбе
Прорэбе

Возмущяццо начали
В зале зрителя:
Почему остановился неземной музлон?
И чо за хър с усами и байдаркой
Струны порасстроил нам в душáх

Александр
Александр

А где можно почитать про Алгол-64?

Александр
Александр

И, кстати, у машин типа M-20 арифметики с фиксированной запятой тоже не было.

Xenophob
Xenophob

>>советские НИИ были не в состоянии обеспечить софт такого качества в таком количестве. Только тырить и копировать, только так можно было обеспечить народное хозяйство современным софтом и не отстать окончательно

Вполне были бы в состоянии, набор софта, требуемого для решения большинства задач, в принципе не велик и вполне конечен, от токо для этого надо было исключить принцип ‘каждый суслик — агроном’, когда каждое НИИ клепало свою ЭВМ как умело и исключить бодалово между ведомствами, когда ресурсы палились абы куда, лишь бы не как у соседей.

Закрепив задачи по разработке конкретно софта за конкретным НИИ, заодно ограничив разработку архитектур двумя, максимум тремя, также закрепив их за конкретными НИИ, можно было получить требуемый результат ограниченными ресурсами.

Утопия, в общем.

goerqi
goerqi

> для управляющих машин выбрали PDP-11.
Ещё HP 21xx (М-6000/М-7000/СМ-1/СМ-2). Их было поменьше, но номенклатура УСО (устройств связи с объектом) у них была побогаче, чем у советских клонов PDP-11. Стояли на химзаводах, электростанциях, междугородных телефонных станциях, в метро…
Меня прямо умиляло название компилятора с Алгола — HPAL.
И ещё прикол — в дополнительном наборе команд был добавлен ещё один код для пары уже имеющихся команд с комментарием «добавлено для совместимости с HP 21MX».

Чтобы добавить комментарий, надо залогиниться.