Автоматическое распараллеливание программ для распределенных систем. Статическое построение расширенного графа управления
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
ода\вывода.
voidAnalyseGotoOp () - определить присутствие в теле цикла операторов перехода за тело цикла.
long intExportData (ofstream&) - экспорт элемента в файловый поток, возвращает количество записанных байт.
6) Класс cSymbolTabSg - представляет таблицу символов. Реализована в виде двунаправленного списка элементов класса cSymbolSg.
cSymbolTabSg () - конструктор класса, создает пустую таблицу.
cSymbolSg*FirstSym () - указатель на 1-й элемент списка.
voidExportData (ofstream&) - экспорт таблицы в файловый поток.
7 ) Класс cSymbolSg - представляет элемент таблицы символов.
cSymbolSg () - конструктор класса, создает новый элемент.
long intId () - уникальный номер элемента.
SgSymbol*poSgSym - ссылка на соответствующий элемент таблицы символов Sage++.
intVariant () - тэг вида элемента: переменная или массив.
intType - код типа.
char*Name - строка имени.
intDim () - размерность (для массива).
intDimLen (int i) - длина по i-му измерению (для массива).
cSymbolSg*LinkRight () - следующий в списке элемент.
cSymbolSg*LinkLeft () - предыдущий в списке элемент.
long intExportData (ofstream&) - экспорт элемента в файловый поток.
intoperator == (cSymbolSg&), operator != (cSymbolSg&)
8) Класс cExpressionSg - представляет выражение. Текущая реализация класса позволяет хранить только выражения вида c1*V+c0, где c1,c0 - константы, V - переменная.
cExpressionSg (SgExpression*, cSymbolTabSg*) - конструктор класса, параметрами являются подлежащее разбору выражение, представленное объектом Sage++, и таблица символов, которая будет дополнена входящим в состав выражения идентификатором.
intVariant () - тэг вида выражения.
cSymbolSg*poVariable - ссылка на переменную выражения.
intIntC0 (), IntC1 () - значения констант, приведенные к типу int.
floatRealC0 (), RealC1 () - аналогично, float.
doubleDoubleC0 (), DoubleC1 () - аналогично, double.
long intExportData (ofstream&) - экспорт выражения в файловый поток.
intoperator == (cExpressionSg&), operator != (cExpressionSg&)
9) Класс cArrayRefSg - представляет ссылку на элемент массива.
cArrayRefSg (SgArrayRefExp*, cSymbolTabSg*) - конструктор класса, параметрами являются подлежащая разбору ссылка на элемент массива, представленная объектом Sage++, и таблица символов, в которую будут добавлены входящие в ссылку переменные и имя массива.
SgArrayRefExp*poSgArrRef - исходный объект Sage++.
cSymbolSg*poSym - идентификатор массива.
intSubscrNum - количество индексных выражений в ссылке.
cExpressionSg*SubscrList [df_MAX_DIM] - массив индексных выражений.
long intExportData (ofstream&) - экспорт в файловый поток.
intoperator == (cArrayRefSg&)
intoperator != (cArrayRefSg&)
10) Класс cVarListElemSg - представляет элемент списка обращений к переменным и массивам.
cVarListElemSg (SgVarRefExp*, cSymbolTabSg*), cVarListElemSg (SgArrayRefExp*, cSymbolTabSg*) - конструкторы класса, 1-й для разбора обращения к переменной, параметрами являются ссылка на переменную, представленная объектом Sage++, и таблица символов, в которую будут добавлены идентификаторы; 2-й для разбора ссылки на массив, параметры имеют тот же смысл.
intVariant () - тэг вида элемента (ссылка на переменную или на массив).
cSymbolSg*poSym - идентификатор переменной для ссылки 1-го вида.
cArrayRefSg*poArr - ссылка на массив для 2-го вида.
long intExportData (ofstream&) - экспорт в файловый поток.
intoperator == (cVarListElemSg&)
intoperator != (cVarListElemSg&).
Для каждого из описанных классов существует его аналог во втором наборе, имеющий такое же имя за исключением постфикса Sg. В классах-аналогах отсутствуют методы для построения структур и конструкторы разбора. Корректная инициализация объектов этих классов производится только за счет введенных методов импорта из файлового потока. В классе cProgramGraphNode добавлены члены-данные для хранения директив FortranDVM, формирование которых осуществляет блок распределения вычислений и данных, и методы для их вставки, а также реализован экспорт этих комментариев в файл.
3.3 Алгоритмы
Реализованные в дипломной работе классы блока статического построения расширенного графа управления программы и вспомогательных структур данных содержат большое число членов-методов, решающих задачи разной сложности. Остановимся на деталях реализации некоторых из них.
На самом внешнем уровне программы построения и экспорта всех структур находится функция main(). Ее основное содержание заключается в следующих строках:
cSourceProgramSg TestProg(projfile);
TestProg.PrepareAll();
TestProg.BuildAll();
TestProg.PrintAll(cout);
TestProg.ExportData(trgfile);
В первую очередь создается объект класса cSourceProgramSg, параметром конструктора которого является имя файла-проекта Sage++. Далее вызываются методы этого класса:
PrepareAll() - предварительная обработка Sage++ представления исходного приложения;
BuildAll() - построение всех структур;
PrintAll(cout) - вывод в поток cout построенных структур для просмотра;
ExportData(trgfile) - экспорт данных в файлы.
void cSourceProgramSg::PrepareAll()
Вызывает методы того же класса:
PrepareConsts(); - подготовка констант.
PrepareLoops(); - подготовка циклов.
void cSourceProgramSg::PrepareConsts()
Осуществляет замену обращений к константам их значениями. Алгоритм:
- Просмотр таблицы имен Sage++ и составление списка объявленных констант и их значений.
- Обход всех операторов программы и поиск во входящих в них выражениях использования каждой из констант.
- При положительном результате поиска, производится рекурсивный обход дерева разбора выраж