Автоматическое распараллеливание программ для распределенных систем. Статическое построение расширенного графа управления

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

ода\вывода.

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++ и составление списка объявленных констант и их значений.
  • Обход всех операторов программы и поиск во входящих в них выражениях использования каждой из констант.
  • При положительном результате поиска, производится рекурсивный обход дерева разбора выраж