Система построения оптимизирующих и распараллеливающих компиляторов

УДК 519.68

СИСТЕМА ПОСТРОЕНИЯ ОПТИМИЗИРУЮЩИХ И РАСПАРАЛЛЕЛИВАЮЩИХ КОМПИЛЯТОРОВ

© 2005 г. С.П. Крицкий, Б.Ю. Тапкинов

In this article the program environment is represented. It can be used for construction of optimizing and parallelizing compiler components, for optimization and parallelizing of programs, and also for training.

Введение

В настоящее время область применения многопроцессорных систем становится все шире и шире. Сегодня даже в персональных компьютерах уже используются процессоры с двухядерной архитектурой (Intel Pentium D, AMD Athlon 64 X2). Чтобы производительность параллельного компь -ютера была высокой, необходимо соответствующее программное обеспечение (ОП), которое бы максимально использовало все возможности и ресурсы машины. Для написания такого ПО используются специальные языки параллельного программирования, библиотеки и интерфейсы. Однако процесс разработки эффективных программ для параллельных ЭВМ с нуля является довольно трудоемким и требует от специалистов высокой квалификации в области параллельного программирования. Было бы намного проще написать программу на каком-нибудь привычном языке программирования, а затем с помощью специального ПО преобразовать ее в эквивалентную так, чтобы она эффективно выполнялась на параллельном компьютере. Сегодня для решения этой проблемы используются различные распараллеливающие компиляторы и системы распараллеливания программ.

Обзор

Распараллеливающие компиляторы предназначены для автоматического распараллеливания программ и, как правило, ориентированы на архитектуры конкретных компьютеров, что значительно сужает область их применения. В качестве примеров можно привести компиляторы [1] Pascal-XT, CFT, Fortran-77/VP, PFC.

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

Сегодня существует достаточно много таких систем. Из отечественных проектов можно выделить Открытую распараллеливающую систему [2], разработка которой в настоящее время активно ведется группой студентов и аспирантов механико-математического факультета РГУ под руководством Б.Я. Штейнберга. Эта система предназначена для автоматиче-

ского распараллеливания программ с процедурных языков программирования (Фортран, Паскаль, Си) на параллельные суперкомпьютеры, ориентированные на математические вычисления. Система предполагает открытость к возможным изменениям в языке исходных текстов или в суперкомпьютере за счет дописывания или замены относительно небольших программ. В частности могут постоянно дописываться дополнительные преобразования программ.

Под руководством Вл.В. Воеводина (НИВЦ МГУ) разработана исследовательская система V-Ray [3]. Она предназначена для выявления параллелизма в последовательных Фортран-программах.

В Новосибирском государственном университете под руководством В.Н. Касьянова разработаны системы: учебно-исследовательская для манипулирования программами ПРОГРЕСС [4], используемая для наглядного представления о методах реструктуризации и распараллеливания последовательных программ, написанных на таких языках, как ФОРТРАН, Модула-2, Си и др.; информационная система ТРАНСФОРМ [5], предназначенная для подготовки и поддержки специалистов по преобразованиям программ, включая распараллеливающие преобразования.

Из зарубежных следует упомянуть о системе Polaris [6], разработанной в университете Иллинойс, которая является распараллеливающим и оптимизирующим конвертером Фортран-Фортран.

Не менее известна система SUIF [7], разработанная в Стэндфордском университете и представляющая собой инфраструктуру для исследований в области распараллеливающих и оптимизирующих компиляторов.

Описание системы

Назначение, возможности, принципы работы. В данной работе представлена Система построения оптимизирующих и распараллеливающих компиляторов (СПОРК) [8]. Ее основное назначение - разработка составных частей компилятора и объединение их в единое целое. СПОРК может быть использована для оптимизации и распараллеливания программ, а также для обучения.

Разработка компилятора. Разработка компилятора в СПОРК состоит из следующих этапов: создание нового проекта компилятора; разработка новых или использование уже готовых модулей компилятора: лексический анализатор (сканер), структурная предикативная грамматика, средства анализа, преобразования, генератор кода, дополнительные модули; тестирование и отладка модулей компилятора на различных программах; сборка компилятора из готовых модулей.

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

Для написания модулей используется язык Пролог (версия Лгку/ Prolog32 [9]).

Оптимизация и распараллеливание. СПОРК может быть использована в качестве системы для оптимизации и распараллеливания программ. Система позволяет: строить промежуточное представление программ, написанных на Си++, Паскале и Фортране (используются ограниченные подмножества этих языков); применять к построенному промежуточному представлению программы, реализованные в системе оптимизирующие и распараллеливающие преобразования (в ручном или автоматическом режиме); для анализа программы строить графы: управляющий, зависимости по данным, программных зависимостей; экспортировать из внутреннего представления обратно в текст программы.

На данный момент в системе реализованы следующие преобразования: протягивание констант; подстановка вперед; удаление «мертвого» кода; удаление недостижимого кода; упрощение выражений; канонизация цикла; разрезание цикла; слияние цикла; развертка цикла.

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

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

В качестве ВП программы в СПОРК используется структурный граф (СГ) [10], вершины которого соответствуют каким-нибудь элементам программы (переменным, выражениям, операторам и т.п.), а дуги соответствуют отношениям между этими элементами. ВП является результатом синтаксического и контекстного анализа программы с помощью структурной предикативной грамматики (СП-грамматики) [10].

Структура системы. Система построения оптимизирующих и распараллеливающих компиляторов состоит из ядра, интерфейса, дополнительных модулей.

Ядро системы написано на языке Пролог в системе логического программирования Arity/Pшlog32 и включает в себя средства для работы со структурным графом; конвертер правил структурной предикативной

грамматики в правила Пролога; предикаты для взаимодействия ядра с интерфейсом системы; дополнительные предикаты.

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

Дополнительные модули так же, как и ядро, реализованы на Прологе. К ним относятся: средства анализа внутреннего представления; преобразования; средства визуализации внутреннего представления; конфигурация системы; вспомогательные предикаты.

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

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

Литература

1. Евстигнеев В.А., Мирзуитова И.Л. Анализ циклов: выбор кандидатов на распараллеливание. Препринт ИСИ СО РАН. № 58. Новосибирск, 1999.

2. Штейнберг Б.Я. // PACO'2001: Тр. междунар. конф. «Параллельные вычисления и задачи управления». 2-4 октября 2001 г. М., 2001. С. 214-220.

3. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. СПб., 2003.

4. Евстигнеев В.А., Касьянов В.Н. // Интеллектуализация и качество программного обеспечения. Новосибирск, 1994. С. 90-99.

5. Малинина Ю.В. // Проблемы конструирования эффективных и надежных программ. Новосибирск, 1995. С. 128-136.

6. Blume W., Doallo R., Eigenmann R. et al. // Computer. 1992. Vol. 29. № 12. P. 7882.

7. Wilson R.P., French R.S., Wilson C.S. et al. // SIGPLAN Not. 1994. Vol. 29. № 12. P. 31-37.

8. Тапкинов Б.Ю. // Тез. науч.-метод. конф. «Современные информационные технологии в образовании: Южный федеральный округ». Ростов-на-Дону, 2021 апреля 2006 г Ростов н/Д, 2006. С. 240-242.

9. The Arity/Prolog Language reference manual. Concord, Massachusetts, 1988.

10. Крицкий С.П. // Компьютерное моделирование. Вычислительные технологии. Ростов н/Д, 2003. С. 67-90.

Ростовский государственный университет 4 сентября 2006 г.

УДК 512-552-32 + 514-146-7

КОЛЛИНЕАЦИИ В ПЛОСКОСТЯХ НАД СЛАБО-ДИСТРИБУТИВНЫМИ СИСТЕМАМИ

© 2006 г. И.А. Хубежты

In this work projective planes over some just-distributive systems are investigated for the presence of colliniations in them.

Определение 1 [1, 2]. Алгебраическую систему B(+,) [3], операции которой подчиняются условиям:

1) В( + ) - абелева группа; 2) В(-) \ {0} есть лупа; 3) a(b +1) = ab + a, V a, b ; 4) (a + 1)b = ab + b, V a, b ;

5) уравнения ax = by + c и ya = yb + c, a ф b , однозначно разрешимы относительно х и у соответственно, назовем слабо-дистрибутивным телом. Определение 2 [1, 2]. Если в системе B

(или 4)), 5) в опр. 1 и aa- = a~la = 1, то ее будем называть правой (левой) слабо-дистрибутивной ^VW-системой C (+, •) (C2 (+, •)).

Определение 3 [3, 4]. Система X

Веблен-Веддербарновой или VW-системой.

Определение 4 [1, 2]. Левую (правую) VW-систему, в которой

aa= a~la = 1, Va ф 0, будем называть левой (правой) IPoVW-системой

Xj(+, •) (X2(+, •)).

Определение 5 [1, 2]. Систему Д(+, •) (A2(+, •),) в которой операции

сложения и умножения связаны одним слабым {a(b + 1) = ab + a)} (или (a + 1)b = ab + b)} и одним общим {(a + b)c = ac + bc (или a(b + c) = = ab + ac), Va,b,c} дистрибутивными законами и имеют место:Д(+)-

абелева группа, Д (•) \ {0} - лупа и aa-1 = a_1a = 1, назовем соответственно левой (или правой) ^VW-системой с a(b + 1) = ab (или a(b + 1)b =

= ab + b).