Князева М.А. Управление знаниями о преобразованиях

advertisement
УПРАВЛЕНИЕ ЗНАНИЯМИ О ПРЕОБРАЗОВАНИЯХ ПРОГРАММ С
ПЕРЕМЕННЫМ НАБОРОМ ТРАНСФОРМАЦИЙ
М.А. Князева
Введение
Одним
из
подходов
к
разработке
компьютерных
программ
является
трансформационный подход, при котором разрабатываемая программа создаётся путём
преобразования из других программ за счет применения набора трансформаций.
Преобразованием
программ называется любая функция h: П → П, где  -
множество всех семантически корректных программ, а h – корректное (обобщающее,
сужающее, эквивалентное) преобразование такое, что для любой исходной программы
πП результирующая программа h(π) вычисляет (обобщает, сужает, эквивалентно) π.
Обычно
преобразование
программ
h
рассматривается
как
суперпозиция
элементарных преобразований – трансформаций. Трансформация состоит из формулы
трансформации и формулы контекстного условия (условия применимости этой
трансформации).
К преобразованиям программ относятся: трансляция программ, их оптимизация и
распараллеливание, реинжениринг программ при их переносе в новое операционное
окружение, модификация программ при их сопровождении и др.
Наиболее часто трансформационный подход используется при трансляции с
оптимизацией и распараллеливании программ. Основная цель использования таких
преобразований – это улучшение качества программ. С усложнением архитектуры
компьютеров усложняются и языки программирования, что влечет за собой снижение
качества как исходных, так и объектных программ.
Исследование преобразований программ в нашей стране началось ещё в 50-х годах
прошлого столетия. Первоначально изучались эквивалентные преобразования схем
программ. В дальнейшем в развитие теории и практики преобразований при трансляции,
оптимизации и распараллеливании программ внесли большой вклад ученые Московской,
Санкт-Петербургской,
Новосибирской,
Киевской
и
Ростовской-н/Д
школ
программирования. В настоящее время проблема преобразований программ особенно
активно изучается в связи с распространением суперкомпьютеров с распределённой
памятью (в том числе – кластерных систем).
Большое внимание исследованию преобразований программ уделяется зарубежными
учёными. Создаются каталоги преобразований программ, разрабатываются методы
потокового
анализа,
создаются
программные
системы
для
автоматического
распараллеливания программ и среды для изучения трансформаций программ.
Теоретические
достижения
в
области
трансляции,
оптимизации
и
распараллеливании программ уже нашли свое практическое применение в современных
оптимизирующих и распараллеливающих компиляторах, а также в системах построения
трансляторов (СПТ). В настоящее
время для большинства распространенных языков
программирования и платформ существуют компиляторы с большим, но фиксированным
набором трансформаций и встроенной стратегией его применения. Обычно при
разработке сложных
и трудоемких программных систем с заранее неизвестными
свойствами проводится их макетирование, чтобы возможно более полно установить эти
свойства. Однако до настоящего времени не предложено никаких средств макетирования
блоков оптимизации и блоков распараллеливания в компиляторах, что не позволяет
заранее оценить эффект выполняемых ими преобразований. Кроме того, компилятор
является плохо модифицируемой программой - изменение набора преобразований в нем
практически невозможно. С учетом весьма длительных сроков его разработки такой
компилятор уже к моменту своего ввода в эксплуатацию может устареть по отношению
аппаратному обеспечению и продолжать устаревать в процессе эксплуатации. При
разработке блоков оптимизации и распараллеливания в компиляторах необходимы
инструментальные
средства
как
для
предварительного
исследования
и
оценки
эффективности используемых преобразований программ, так и для быстрой модификации
этих блоков в процессе эксплуатации компилятора.
Предварительные исследования успешности применения одного фиксированного
набора трансформаций проводились (с помощью оптимизирующего компилятора)
неоднократно: измерялся эффект оптимизации (отношения времени работы/объёма
памяти неоптимизированной программы к тому же показателю оптимизированной
программы) для одной трансформации, для комбинации двух трансформаций и даже для
комбинации многих трансформаций. Следует отметить, однако, что для проведения таких
экспериментов специально подбирались программы, к которым была применима только
выбранная
трансформация,
а
при
изучении
последовательности
трансформаций
подбирались такие программы, к каждой из которых была применима только эта
последовательность. Оценить же, насколько удачно были выбраны для этого компилятора
набор трансформаций и стратегия его применения, оказалось невозможным: необходимо
было сравнить результаты работы этого компилятора с аналогичными результатами
работы других оптимизирующих компиляторов, в которых использованы другие наборы
трансформаций и другие стратегии их применения.
Для решения проблемы
уменьшения
трудозатрат
улучшения качества оптимизирующего компилятора и
при
реализации
новых
трансформаций
и
развитии
оптимизирующего компилятора в Институте микропроцессорных вычислительных систем
РАН разработан способ организации трансформаций в виде так называемых управляемых
пакетов оптимизаций. К сожалению, пока этот способ не может служить основой для
разработки требуемого инструментального средства для проведения исследований
сменных наборов трансформаций.
Значительно больший интерес с этой точки зрения представляет открытый, наиболее
развитый промышленный оптимизирующий компилятор GNU Compile Collection (GCC).
Этот компилятор имеет большое количество опций, что позволяет настраивать его как по
входной язык, так и на целевую архитектуру. Его открытость обеспечивает возможность
развития компилятора по 5 направлениям: новые языки программирования, новые
алгоритмы оптимизации, новые платформы, улучшение (модификации) библиотек
времени исполнения и ускорение процесса отладки. Наличие в его составе утилиты
Acovea (Analysis of Compiler Options via Evolutionary Algorithm)
обеспечивает
возможность автоматически подбирать наилучший набор опций в компиляторе под
заданную архитектуру. Использование при компиляции этого набора минимизирует время
работы скомпилированной программы на этой архитектуре. Наборы опций генерируются
генетическим алгоритмом. Однако проблемы распараллеливания в GNU не решаются.
Разрабатываются системы, позволяющие выпускать очередные версии компиляторов
с добавленными модулями оптимизирующих и распараллеливающих трансформаций
программ. Многие современные компиляторы разрабатываются по технологии Front-end /
Back-end, преследующей следующие цели: разбив компилятор на законченные блоки,
предоставить разработчику возможность использовать внешние модули (анализаторы,
оптимизаторы, генераторы) и работать с большим количеством целевых платформ,
добиваясь при этом
значительного увеличения жизненного цикла компилятора и
отдельных его блоков.
Для предварительного исследования и оценки эффективности используемых
распараллеливающих трансформаций программ также необходимы инструментальные
средства. В этом направлении достигнуты определенные результаты. Можно указать
целый ряд систем, разработанных и/или разрабатываемых с исследовательскими целями.
В НИВЦ МГУ (г. Москва) разрабатывается комплекс инструментальных средств V-Ray –
исследовательская
система
для
выявления
возможностей
параллелизма
в
последовательных Фортран- и Си-программах. Он направлен на автоматизацию создания
эффективных параллельных программ для параллельных вычислительных систем с общей
и распределенной памятью.
ПРОГРЕСС – инструментальное средство для изучения известных и разработки
новых последовательностей оптимизирующих и реструктурирующих трансформаций
программ, а также для быстрого прототипирования распараллеливающих компиляторов разрабатывается в ИСИ СО РАН (г. Новосибирск). Начальная версия этого средства
ориентирована на работу с программами на языках Фортран_77 и Модула-2.
В Стэнфордском университете (США) разработана система SUIF - инфраструктура
для исследований в области распараллеливающих и оптимизирующих компиляторов с
языков Фортрана и Си, платформа для исследования методов компиляции для
высокопроизводительных машин.
Система FAUST, созданная в Иллинойском университете (США) – интегрированное
окружение
для
параллельного
программирования,
ориентированное
на
научные
приложения. Она предоставляет исследователю меню определённых трансформаций
программ на языках Фортран и Си, включающее векторизацию цикла, распараллеливание,
перестановку циклов, разбиение на блоки и некоторые машинно-ориентированные
преобразования.
Однако каждая из этих систем позволяет проводить исследования программ только
на тех языках, которые в ней поддерживаются, и только с такими наборами
трансформаций,
которые хранятся в библиотеке трансформаций во внутреннем
представлении. Поэтому изменение содержимого этой библиотеки при проведении
исследований весьма проблематично. Ещё более проблематичным представляется
проведение такой последовательности трансформаций, которая нужна исследователю.
Даже с помощью меню, которое предоставляет система FAUST, нельзя изменить набор
трансформаций,
поэтому
пользователь
этой
системы
сможет
составить
последовательность трансформаций только из элементов этого набора.
Для исследования трансформаций программ в настоящее время разрабатывается
класс
систем
трансформаций
программ,
в
которых
оптимизирующие
и
распараллеливающие преобразования программ задаются пользователем в непроцедурном
виде и которые основаны на идее трансформационной машины, предложенной А.П.
Ершовым.
Трансформационная машина – абстрактное вычислительное устройство,
командами которого являются трансформации из некоторого фиксированного набора
(базовые трансформации), а данными – преобразуемые программы. Примерами систем
трансформаций программ могут служить система СОКРАТ (ИСИ СО РАН, г.
Новосибирск) и МСТП
-многоцелевая система трансформаций программ (Южный
Федеральный Университет, г. Ростов-на-Дону), основанная на непроцедурном описании
выполняемых трансформаций в виде схемных правил и позволяющая описывать
преобразования многосвязных программных структур, а также CIP – проект Мюнхенского
технического университета. Эти системы выполняют отдельные трансформации,
задаваемые пользователем, но не обеспечивают выполнение последовательностей
различных трансформаций, поэтому их использование для исследований весьма
ограничено.
Для
изучения
трансформаций
программ,
кроме
этого,
разрабатываются
интегрированные среды. Примером такой среды является IRE - среда, разрабатываемая в
Институте системного программирования РАН.
Для того, чтобы можно было проводить экспериментальное исследование
переменных наборов трансформаций программ при их оптимизации и/или их
распараллеливании,
а
также
проводить
макетирование
блоков
оптимизации
компиляторов, необходимо искать новые подходы к разработке методов и средств
исследования преобразований программ. Один из них – декларативный.
Работа выполнена при финансовой поддержке ДВО РАН, инициативный научный
проект «Интернет-система управления информацией о преобразованиях программ».
Требования к преобразователю программ с переменным набором трансформаций
На основе проведенного анализа в области преобразования программ определены
требования к преобразователю программ с переменным набором трансформаций.
1.В существующих оптимизирующих компиляторах
и системах преобразований
используются фиксированные наборы преобразований программ. Поэтому должен быть
разработан преобразователь, позволяющий проводить исследования
с переменным
набором трансформаций.
2.В существующих оптимизирующих компиляторах
и системах преобразований
используются фиксированные стратегии применения трансформаций. Поэтому должен
быть разработан преобразователь, позволяющий задавать произвольные
стратегии
трансформаций.
3.Чтобы обеспечить возможность исследования стратегий применения преобразований
программ и свойств самих преобразований, должен быть разработан преобразователь,
позволяющий визуализировать истории применения преобразований программ.
4.Чтобы использовать в исследованиях вновь создаваемые преобразования программ,
должен
быть
разработан
преобразований программ.
преобразователь,
позволяющий
задавать
описания
5.Чтобы использовать в исследованиях новые методы потокового анализа программ,
должен быть разработан преобразователь позволяющий пользователям задавать методы
потокового анализа программ.
Определение
1.
Под
преобразованием
программ
с
переменным
трансформаций будем понимать отображение TV: (P×N) → P, где P –
набором
множество
программ на языке L, N - множество наборов элементарных трансформаций программ.
Определение 2. Назовём стратегией
s(n)
на заданном наборе элементарных
трансформаций n конечную последовательность этих трансформаций, составленную из
фиксированного их набора n.
Определение 3. Преобразователь с переменным набором n трансформаций TVS(n)
= (TV, S (n)) – это абстрактное устройство, которое предназначено для преобразования
заданной программы путем интерпретации заданной
стратегии
s (n)
из множества
стратегий S (n).
С целью повышения эффективности работы преобразователя предлагается в явном
виде использовать семантику и специфику предметной области преобразований
программ. Для этого вся информация для работы преобразователя представляется в виде
онтологии
[1] на языке прикладной логики [2] и находится в базе знаний программ на
языках высокого уровня, в базе знаний о методах потокового анализа программ, в базе
знаний о трансформациях программ в декларативном представлении [3]. Ниже
представлена
архитектура
преобразователя
программ
с
переменным
набором
трансформаций.
Архитектура преобразователя программ с переменным набором трансформаций
Архитектура преобразователя для исследований в области преобразований программ
представлена на рис. 1.
На вход преобразователю подается набор, стратегия преобразования программ и
программа на языке высокого уровня (ЯВУ). На выходе преобразователя формируются
истории преобразований программ и программа на языке высокого уровня, которая
получена из входной программы в результате применения к ней трансформаций из
входного набора в соответствии с заданной стратегией.
Преобразователь программ состоит из (1) средств декомпозиции программ на языке
высокого уровня и их преобразования в универсальное представление, (2) средств
преобразования программ в универсальном представлении, (3) средств визуализации
историй преобразований программ и (4) средств генерации программ из универсального
представления на языки программирования высокого уровня.
Средства декомпозиции программ на языке высокого уровня и их преобразования в
универсальное представление осуществляют преобразование входной программы на ЯВУ
в универсальное представление. Программа в универсальном представлении может быть
сохранена в базе программ для повторного исследования в эксперименте.
Средства преобразования программ в универсальном представлении включают: (1)
интерпретатор стратегии преобразования; (2) анализатор потока управления и потока
данных программ; (3) проверку контекстных условий трансформаций и выполнение
трансформаций.
Набор преобразования и
стратегия
преобразования
программ
Входная программа на
языке
программирования
высокого уровня
Средства декомпозиции
программ на языке высокого
уровня и их преобразования в
универсальное представление
База программ в терминах
онтологии языка
программирования высокого
уровня
Средства преобразования
программ в универсальном
представлении
Интерпретатор стратегии
преобразования
База знаний о
методах потокового
анализа программ
Анализатор потока
управления и потока
данных программ
Проверка контекстных
условий трансформаций и
выполнение
трансформаций
Средства
визуализации
историй
преобразований
программ
Средства генерации программ
из универсального
представления на языки
программирования высокого
уровня
Истории преобразований
программ
Рис.1.
Архитектура
База знаний о
трансформациях
программ
преобразователя
Выходная программа на
языке программирования
высокого уровня
программ
с
переменным
набором
трансформаций
Интерпретатор
стратегии
преобразования
задает
порядок
выполнения
трансформаций в соответствии со стратегией. Анализатор потока управления и потока
данных программ управляется стратегией применения преобразований и базой знаний о
методах потокового анализа программ: он расширяет единое представление программы
значениями терминов потокового анализа программ. Преобразователь программ
управляется стратегией применения преобразований и базой знаний о трансформациях
программ: он формирует единое представление программы после выполнения над ней
очередной трансформации.
Средства визуализации позволяют
отображать информацию об
историях
преобразований программ и создавать графические представления единого представления
программ.
Средства
генерации
программ
из
программирования высокого уровня
универсального
представления
на
языки
осуществляют преобразование программы из
универсального представления на ЯВУ.
Заключение
Преимущества предложенной концепции преобразователя программ с переменным
набором трансформаций следующие: стратегия преобразования программ задается явно и
может изменяться; набор трансформаций не является фиксированным; набор методов
потокового анализа программ не является фиксированным; упрощается процесс
пополнения или модификации набора трансформаций и методов потокового анализа
программ за счет универсального представления программ; декларативное описание
знаний в базах знаний преобразователя позволяет задавать преобразования в наглядной
непроцедурной форме вместо того, чтобы реализовывать необходимые алгоритмы.
Список литературы
1. Гаврилова Т.А., Хорошевский В.Ф. Базы знаний интеллектуальных систем. СПб.Питер, 2000.
2. Клещев А.С., Артемьева И.Л. Необогащенные системы логических соотношений. Ч.1. //
НТИ. Сер.2. 2000. №7. С. 18-28.3.
3. Вагин В.Н., Головина Е.Ю., Загорянская А.А., Фомина М.В. Достоверный и
правдоподобный вывод в интеллектуальных системах /Под ред. В.Н. Вагина, Д.А.
Поспелова.- М.: ФИЗМАТЛИТ, 2004.-704 с.- ISBN 5-9221-0474-8.
Download