Автоматическое распараллеливание программ для распределенных систем. Статическое построение расширенного графа управления
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
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 () - определить присутствие в теле цикла операций вв