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

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

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

cSymbolTabSg*SymTab () - таблица символов.

voidPrepareConsts () - замена в теле программы обращений к константам на их значения.

voidPrepareLoops () - конвертация циклов программы к виду DO-ENDDO.

voidBuildLoopList () - построение списка циклов.

voidBuildProgGraph () - построение графа программы.

voidPrintLoopList (ostream&) - вывод в поток списка циклов для просмотра.

voidPrintProgGraph (ostream&) - вывод графа.

voidPrintSymbolTab (ostream&) - вывод таблицы имен.

voidExportData (char*) - экспорт данных в файлы.

voidImportData (char*) - импорт данных из файлов;

voidUnparse (char*) - генерация результирующего текста в файле, имя которого определяется параметром метода.

При экспорте данных в файлы образуются следующие файлы:

filename.gr - узлы графа;

filename.gri - индексный файл;

filename.lp - список циклов;

filename.st - таблица символов, где filename - параметр метода ExportData(char*).

2) Класс cProgramGraphSg - представляет расширенный граф программы.

cProgramGraphSg (cSymbolTabSg*, cLoopListSg*) - конструктор класса, создает пустой граф управления. Параметры - таблица символов и список циклов, на которые будет ссылаться граф.

cLoopListSg*LpList () - список циклов, используемый графом.

cSymbolTabSg*SymTab () - таблица имен, используемая графом.

cProgramGraphNodeSg*CurNode () - текущий узел.

intIsStart () - является ли текущий узел начальным.

intGoStart (), GoDown (), GoUp (), GoLeft1 (), GoLeft2 (),

GoRight1 (), GoRight2 (), GoId (long int) - переместить указатель на текущий узел соответственно на 1-й узел, вниз, вверх, влево по 1-й ссылке, влево по 2-й ссылке, вправо по 1-й ссылке, вправо по 2-й ссылке, на узел с заданным номером. Возвращает 1 при удачном переходе, 0 в противном случае..

voidCountOpers () - подсчет числа операций для каждого узла графа.

voidExportData (ofstream&, ofstream&) - экспорт графа и индексной информации в потоки.

voidImportData (ifstream&) - импорт данных от блока распределения вычислений, подлежащих вставке в граф;

voidBuild (SgStatement*, SgStatement*, int, int) - построение графа.

voidUnparse () - произвести вставку добавленных в граф данных во внутреннее представление Sage++;

3) Класс cProgramGraphNodeSg - представляет узел графа управления.

cProgramGraphNodeSg () - конструктор класса, создает новый узел.

SgStatement*poSt1, *poSt2, *poSt3 - принимают значения после построения графа.

Для линейного участка: poSt1 - 1-й оператор блока, poSt2 - последний оператор.

Для цикла: poSt1 - оператор заголовка цикла, poSt2 - оператор, завершающий цикл (ENDDO)

Для ветвления: poSt1 - IF, poSt2 - ELSE, poSt3 - ENDIF.

intLevel - уровень вложенности, внешнему уровню соответствует 0.

intIsParal - признак возможности распараллеливания.

long intLoopId - для элементов типа цикл содержит номер соответствующего цикла из списка.

floatVer1, Ver2 - для элементов типа ветвление вероятность перехода соответственно по 1-й и 2-й ветви.

floatOpers[df_OPERS_COUNT] - массив, в каждом элементе которого содержится количество соответствующих индексу элемента операций в блоке. Например, Opers[0] - число сложений, Opers[1] - вычитаний.

long intId () - уникальный номер узла.

intNodeType () - тэг типа узла.

long intExportData (ofstream&) - экспорт узла в файловый поток, возвращает количество записанных байт.

voidImportData (ifstream&) - импорт данных из файлового потока.

voidUnparse () - произвести вставку добавленных в узел данных во внутреннее представление Sage++.

4) Класс cLoopListSg - представляет список циклов программы.

cLoopListSg (cSymbolTabSg*) - конструктор класса, создает пустой список циклов, параметр - таблица символов, на которую будет ссылаться список.

cSymbolTabSg*SymTab () - таблица символов, используемая списком.

cLoopListNodeSg*CurNode () - указатель на текущий элемент списка.

intGoStart (), GoEnd (), GoRight (), GoLeft (), GoId (long int) - переместить указатель на текущий узел соответственно на 1-й узел, последний узел, влево, вправо, на узел с заданным номером. Возвращает 1 при удачном переходе, 0 в противном случае.

voidAnalyse () - произвести необходимый анализ элементов списка.

voidBuild (SgStatement*, SgStatement*, int) - построить список.

voidExportData (ofstream&) - экспорт списка в файловый поток.

5) Класс cLoopListNodeSg - представляет элемент списка циклов.

cLoopListNodeSg () - конструктор класса, создает новый элемент.

long intId () - номер элемента.

SgStatement*poSt1, *poSt2 - ссылки соответственно на оператор заголовка цикла и на оператор завершения цикла.

cSymbolSg*poCounterSym - ссылка на переменную-счетчик цикла.

cExpressionSg*poStartExpr, *poEndExpr, *poStepExpr - начальное, конечное выражения счетчика и выражение шага цикла.

long intIterNum - количество итераций цикла.

intLevel - уровень вложенности.

intIoOp, GotoOp - флаги наличия в теле цикла операторов ввода\вывода и операторов перехода за тело цикла.

cVarListElemSg*LVar[df_MAX_LRVAR_COUNT], *RVar[df_MAX_LRVAR_COUNT] - списки обращений к переменным и элементам массивов на модификацию и на чтение соответственно.

sReductRedVar[df_MAX_REDVAR_COUNT] - список редукционных переменных, содержащихся в теле цикла.

voidAnalyseHead (cSymbolTabSg *) - произвести анализ заголовка цикла.

voidAnalyseBodyVars (cSymbolTabSg*) - произвести анализ обращений к переменным и элементам массивов в теле цикла.

voidAnalyseRedVars (cSymbolTabSg*) - произвести поиск редукционных переменных в теле цикла.

voidAnalyseIoOp () - определить присутствие в теле цикла операций вв