Автоматизация программирования в Институте прикладной математики (ИПМ) им. М.В. Келдыша РАН

Автоматизация программирования в Институте прикладной математики (ИПМ) им. М.В. Келдыша РАН

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

Особое внимание уделено работам по автоматизации создания бортового ПО орбитального корабля БУРАН и ПО для испытаний и предстартовой подготовки многоразовой космической системы ЭНЕРГИЯ-БУРАН.

Статья завершается анализом современных тенденций в архитектуре ЭВМ и проблем автоматизации параллельного программирования.

Зарождение нового научного направления – «автоматизация программирования»

Работы по автоматизации программирования в нашем Институте всегда велись в тесном сотрудничестве с прикладными специалистами и с разработчиками ЭВМ. С момента организации Института в 1953 г. перед ним стояли задачи, связанные с проведением численных расчетов на грани возможностей имевшейся вычислительной техники и требовавшие огромные усилий по созданию соответствующих программ. М.В. Келдыш уделял самое серьезное внимание вопросам вычислительной техники и программирования. В 1953 г. он организовал в ИПМ первый в СССР отдел программирования, который сначала возглавлял Алексей Андреевич Ляпунов, а с 1954 г. по 2007 г. – Михаил Романович Шура-Бура.

В 1952–1953 учебном году А.А. Ляпунов прочитал в МГУ первый в стране спецкурс по программированию, в котором он изложил предложенный им операторный метод программирования. В основе этого метода лежала идея "крупноблочного" описания алгоритма.

Идея создания программной системы, производящей полную реализацию всех операторов, была высказана С.С. Камыниным и Э.З. Любимским летом 1954 года. А осенью был готов первый вариант такой «программирующей программы». О ней было сообщено на научном семинаре под руководством М.В. Келдыша, который сразу оценил идею как открытие самостоятельного научного направления.

К весне 1955 года был создан второй, более полный вариант «программирующей программы», который использовался для решения многих производственных задач и послужил прототипом при создании аналогичных программ для разных отечественных ЭВМ. С тех пор исследования и разработки по автоматизации программирования стали постоянной и традиционной темой в ИПМ, а создание в 1963 г. в Институте одного из первых в мире трансляторов с полной версии Алгола-60 следует рассматривать как одно из крупнейших достижений автоматизации программирования, завершившее период его становления.

Языки и компиляторы

Вслед за созданием транслятора с языка Алгола-60 последовала разработка компиляторов с разных языков на разные машины, что привело к идее создания алгоритмического машинно-ориентированного языка – АЛМО (С.С. Камынин, Э.З. Любимский), одновременно используемого и в качестве промежуточного языка компиляции, и как язык реализации самих компиляторов. Если есть N языков и М машин, то вместо создания N*M компиляторов достаточно создать их N+M. Наиболее распространенная в настоящее время компиляторная система GCC построена по такому принципу и поддерживает 7 языков программирования и свыше 30 типов машин.

Очень успешной оказалась разработка в конце 60-х годов Валентином Федоровичем Турчиным функционального языка обработки символьной информации РЕФАЛ. На многих ЭВМ была выполнена его эффективная реализация и в течение десятилетий он используется при создании компиляторов.

Работы по компьютерной графике привели к созданию в начале 70-х годов библиотеки ГРАФОР, широко использовавшейся во многих организациях. В настоящее время активно развивается новое направление компьютерной графики, связанное с моделированием распространения, отражения и поглощения света в различных средах.

Автокод БЕМШ и язык системного программирования АСТРА (В.М. Михелев, В.С. Штаркман) также очень широко использовались на БЭСМ-6.

Выполненные в Институте работы по созданию пакетов прикладных программ позволили решить ряд крупных практических задач математической физики. Первым из таких пакетов стал пакет Сафра (Д.А. Корягин).

Система управляемой виртуальной памяти (Э.З. Любимский, Н.А. Коновалов) обеспечила использование в Фортран-программах на ЭВМ БЭСМ-6 не 32 тысячи слов прямо адресуемой ОП, а 100 тысяч слов, что позволило решать гораздо более сложные задачи. Предложенная тогда идея расширения стандартных языков программирования оптимизирующими указаниями, не видимыми для обычных компиляторов, была спустя 20 лет применена при создании DVM-системы параллельного программирования.

Операционные Системы

В 1965 году под руководством В.С.Штаркмана была разработана первая в нашей стране операционная система – ОС для ЭВМ «Весна».

Операционная система ОС ИПМ для БЭСМ-6 (Э.З. Любимский, И.Б. Задыхайло, С.С. Камынин) была одной из наиболее развитых операционных систем своего времени и содержала многие элементы будущих операционных систем.

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

Создание системы СУПРОЗ – отражение огромного внимания М.В. Келдыша к вопросам организации использования ЭВМ. В конце мая 1978 г. в кабинете М.В. Келдыша обсуждался этот вопрос, а осенью перед нами была поставлена задача автоматизации прохождения задач на ЭВМ. Созданная в начале 80-х годов система СУПРОЗ позволяла распределять машинное время и специальное время приоритетного обслуживания между группами пользователей и конкретными пользователями, что обеспечивало гибкое управление предоставлением машинных ресурсов. Система использовалась в ИПМ и на факультете ВМК МГУ. Сейчас остро ощущается отсутствие подобных возможностей на современных ЭВМ коллективного пользования.

Работы по сетям ЭВМ (А.Н. Мямлин, В.И. Сулханов, В.С. Штаркман) выполнялись, прежде всего, для поддержки баллистико-навигационного обеспечения космических полетов. Хочется отметить, что Удаленный Вызов Процедур, положенный в основу сетей СЕКОП и РУСЛАН – был предложен на несколько лет раньше, чем за рубежом появилась первая публикация о подобном подходе.

Работы по метакомпьютингу и ГРИДу были развернуты в Институте по инициативе Д.А. Корягина, в настоящее время Институт участвует в крупнейшем проекте по созданию общеевропейской сетевой инфраструктуры ГРИД.

В 1983–1984 гг. была разработана бортовая ОС многоразового корабля БУРАН, которая обеспечивала выполнение в режиме реального времени алгоритмов управления бортовыми системами и взаимодействие вычислительного комплекса с ЦУПом.

ОС для ЭВМ, состоящей из многих сотен транспьютероподобных отечественных процессоров, которая разрабатывалась в начале 90-х годов (В.Н. Ильяков), была первой для нас ОС для ЭВМ с массовым параллелизмом.

Совместное с НИЦЭВТом создание суперЭВМ ЕС-1191 очень тесно объединяло работы по архитектуре многопроцессорной ЭВМ, языкам параллельного программирования и операционной системе (И.Б. Задыхайло, Н.А. Коновалов, В.Д. Емельянов).

Созданная в 2000 г. для многопроцессорной ЭВМ с распределенной памятью МВС-1000 система управления прохождением задач СУППЗ постоянно развивается и используется в настоящее время на различных параллельных ЭВМ в ряде организаций (ИПМ РАН, МСЦ РАН и др.).

Создание систем автоматизации разработки ПО «Бурана»

Ярким подтверждением высочайшей квалификации системных программистов ИПМ стало создание в 1983–1987 годах специализированных языков ПРОЛ2 (Н.А. Коновалов, В.М. Михелев) и ДИПОЛЬ (М.Р. ШураБура), позволившее своевременно разработать ПО бортового вычислительного комплекса многоразового корабля БУРАН и ПО наземного комплекса для проверки и предстартовой подготовки космической системы ЭНЕРГИЯ-БУРАН. Наверное, трудно назвать другой такой случай, когда роль автоматизации программирования была продемонстрирована столь убедительно.

В начале 1983 года возникла критическая ситуация с созданием программного обеспечения Бурана. Технология разработки алгоритмов управления и проверки бортовых систем (БС) была такова – разработчики БС из нескольких организаций записывали алгоритмы в виде блок-схем, а программисты из НПО АП переводили их на ассемблер бортового и наземного вычислительных комплексов, а затем отлаживали их на стендах. Опыт горизонтально-летных испытаний корабля Буран показал, что для создания ПО требуется привлечь дополнительно свыше 1000 программистов.

Разработчики Бурана обратились за помощью к Президенту АН А.П. Александрову, он привлек директора ИПМ А.Н. Тихонова, и в марте 1983 года мы оказались в НПО АП на обсуждении сложившейся ситуации. В тот же день стало ясно, что правильное решение – это создание специализированных языков и трансляторов с них. Привлечение 1000 программистов было бы неверным решением – обучить их и организовать их работу в короткие сроки было нереально, к тому же не хватало стендов, на которых можно было отлаживать программы. В мае такой язык для бортового вычислительного комплекса был нами разработан, и уже в июне вышло решение правительства о перераспределении работ, по которому программирование на новом языке поручалось организациям – разработчикам БС. В конце 1983 года первая версия системы автоматизации программирования и отладки была передана в организации НПО Энергия, НПО Молния и НПО АП. Язык позволял программировать не только управляющие алгоритмы, но и создавать программные модели БС. Система обеспечила проведение предварительной отработки и отладки на универсальных ЭВМ.

Позже были реализованы и средства автоматизации разработки ПО наземного комплекса для проверки и предстартовой подготовки космической системы.

Параллельные ЭВМ и автоматизация параллельного программирования

В начале 80-х годов в институте начались работы по созданию проекта СуперЭВМ для решения сложных вычислительных задач (К.И. Бабенко, А.В. Забродин, И.Б. Задыхайло, А.Н. Мямлин), состоящей из большого числа процессоров с распределенной памятью.

Однако приступить к реальному воплощению проекта удалось только в начале 90-х годов. Совместно с НИИ КВАНТ в 90-е годы были созданы параллельные ЭВМ МВС-100 и МВС-1000 (А.В. Забродин)

В 1985 г. был разработан декларативный язык НОРМА (И.Б. Задыхайло), а позже – система НОРМА, которая является уникальной системой параллельного программирования, основанной на декларативном языке и доведенной до практического применения.

Тогда же – в середине 90-х годов – были разработаны языки параллельного программирования Фортран-GNS, Си-GNS, Фортран-DVM, Си-DVM (Л.А. Поздняков, Н.А. Коновалов). Все эти 4 языка представляют собой расширения стандартных языков Фортрана и Си, первые два – конструкциями передачи сообщений, а DVM-языки – оформленными в виде спецкомментариев спецификациями параллельного выполнения.

Современные ЭВМ и проблемы параллельного программирования

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

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

Мы считаем наиболее перспективными три направления автоматизации.

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

Во-вторых, использование языков с неявным параллелизмом – языков, при использовании которых программа не содержит никаких конструкций, отражающих архитектуру параллельной ЭВМ. Таким языком, например, является язык НОРМА. Мы предлагаем использовать и привычные последовательные языки Фортран и Си. Программист должен выбрать подходящий вычислительный метод и записать алгоритм, руководствуясь некоторыми правилами – например, не усложнять программу ради экономии памяти. И тогда такую программу можно автоматически отображать на ЭВМ разной архитектуры.

И третье направление – помочь программисту распараллелить его последовательную программу или дополнительно распараллелить его параллельную программу, например, некоторые фрагменты MPI-программы отобразить на графические ускорители.

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

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

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

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

Наверное, сегодня надо сочетать волевые решения и материальное стимулирование использования новых методов и инструментов.

Заключение

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

Об авторе: Институт прикладной математики им. М.В. Келдыша РАН
Москва, Россия
krukov@keldysh.ru
Материалы международной конференции Sorucom 2014 (13-17 октября 2014)
Помещена в музей с разрешения авторов 31 мая 2015