Автоматическое распараллеливание программ для распределенных систем. Статическое построение расширенного графа управления
void CountOpers () – подсчет числа операций для каждого узла графа.
void ExportData (ofstream&, ofstream&) – экспорт графа и индексной информации в потоки.
void ImportData (ifstream&) – импорт данных от блока распределения вычислений, подлежащих вставке в граф;
void Build (SgStatement*, SgStatement*, int, int) – построение графа.
void U
nparse () – произвести вставку добавленных в граф данных во внутреннее представление Sage++;
3) Класс cProgramGraphNodeSg – представляет узел графа управления.
cProgramGraphNodeSg () – конструктор класса, создает новый узел.
SgStatement *poSt1, *poSt2, *poSt3 – принимают значения после построения графа.
Для линейного участка: poSt1 – 1-й оператор блока, poSt2 – последний оператор.
Для цикла: poSt1 – оператор заголовка цикла, poSt2 – оператор, завершающий цикл (ENDDO)
Для ветвления: poSt1 – IF, poSt2 – ELSE, poSt3 – ENDIF.
int Level – уровень вложенности, внешнему уровню соответствует 0.
int IsParal – признак возможности распараллеливания.
long int LoopId – для элементов типа “цикл” содержит номер соответствующего цикла из списка.
float Ver1, Ver2 – для элементов типа “ветвление” вероятность перехода соответственно по 1-й и 2-й ветви.
float Opers[df_OPERS_COUNT] – массив, в каждом элементе которого содержится количество соответствующих индексу элемента операций в блоке. Например, Opers[0] - число сложений, Opers[1] – вычитаний.
long int Id () – уникальный номер узла.
int NodeType () – тэг типа узла.
long int ExportData (ofstream&) – экспорт узла в файловый поток, возвращает количество записанных байт.
void ImportData (ifstream&) – импорт данных из файлового потока.
void Unparse () – произвести вставку добавленных в узел данных во внутреннее представление Sage++.
4) Класс cLoopListSg – представляет список циклов программы.
cLoopListSg (cSymbolTabSg*) – конструктор класса, создает пустой список циклов, параметр – таблица символов, на которую будет ссылаться список.
cSymbolTabSg *SymTab () – таблица символов, используемая списком.
cLoopListNodeSg *CurNode () – указатель на текущий элемент списка.
int GoStart (), GoEnd (), GoRight (), GoLeft (), GoId (long int) – переместить указатель на текущий узел соответственно на 1-й узел, последний узел, влево, вправо, на узел с заданным номером. Возвращает 1 при удачном переходе, 0 в противном случае.
void Analyse () – произвести необходимый анализ элементов списка.
void Build (SgStatement*, SgStatement*, int) – построить список.
void ExportData (ofstream&) – экспорт списка в файловый поток.
5) Класс cLoopListNodeSg – представляет элемент списка циклов.
cLoopListNodeSg () – конструктор класса, создает новый элемент.
long int Id () – номер элемента.
SgStatement *poSt1, *poSt2 – ссылки соответственно на оператор заголовка цикла и на оператор завершения цикла.
cSymbolSg *poCounterSym – ссылка на переменную-счетчик цикла.
cExpressionSg *poStartExpr, *poEndExpr, *poStepExpr – начальное, конечное выражения счетчика и выражение шага цикла.
long int IterNum – количество итераций цикла.
int Level – уровень вложенности.
int IoOp, GotoOp – флаги наличия в теле цикла операторов ввода\вывода и операторов перехода за тело цикла.
cVarListElemSg *LVar[df_MAX_LRVAR_COUNT], *RVar[df_MAX_LRVAR_COUNT] – списки обращений к переменным и элементам массивов на модификацию и на чтение соответственно.
sReduct RedVar[df_MAX_REDVAR_COUNT] – список редукционных переменных, содержащихся в теле цикла.
void AnalyseHead (cSymbolTabSg *) – произвести анализ заголовка цикла.
void AnalyseBodyVars (cSymbolTabSg*) – произвести анализ обращений к переменным и элементам массивов в теле цикла.
void AnalyseRedVars (cSymbolTabSg*) – произвести поиск редукционных переменных в теле цикла.
void AnalyseIoOp () – определить присутствие в теле цикла операций ввода\вывода.
void AnalyseGotoOp () – определить присутствие в теле цикла операторов перехода за тело цикла.
long int ExportData (ofstream&) – экспорт элемента в файловый поток, возвращает количество записанных байт.
6) Класс cSymbolTabSg – представляет таблицу символов. Реализована в виде двунаправленного списка элементов класса cSymbolSg.
cSymbolTabSg () – конструктор класса, создает пустую таблицу.
cSymbolSg *FirstSym () – указатель на 1-й элемент списка.
void ExportData (ofstream&) – экспорт таблицы в файловый поток.
7 ) Класс cSymbolSg – представляет элемент таблицы символов.
cSymbolSg () – конструктор класса, создает новый элемент.
long int Id () – уникальный номер элемента.
SgSymbol *poSgSym – ссылка на соответствующий элемент таблицы символов Sage++.
int Variant () – тэг вида элемента: переменная или массив.
int Type – код типа.
char *Name – строка имени.
int Dim () – размерность (для массива).
int DimLen (int i) – длина по i-му измерению (для массива).
cSymbolSg *LinkRight () – следующий в списке элемент.
cSymbolSg *LinkLeft () – предыдущий в списке элемент.
long int ExportData (ofstream&) – экспорт элемента в файловый поток.
int operator == (cSymbolSg&), operator != (cSymbolSg&)
8) Класс cExpressionSg – представляет выражение. Текущая реализация класса позволяет хранить только выражения вида c1*V+c0, где c1,c0 – константы, V – переменная.
cExpressionSg (SgExpression*, cSymbolTabSg*) – конструктор класса, параметрами являются подлежащее разбору выражение, представленное объектом Sage++, и таблица символов, которая будет дополнена входящим в состав выражения идентификатором.
int Variant () – тэг вида выражения.
cSymbolSg *poVariable – ссылка на переменную выражения.
int IntC0 (), IntC1 () – значения констант, приведенные к типу int.
float RealC0 (), RealC1 () – аналогично, float.
double DoubleC0 (), DoubleC1 () – аналогично, double.
long int ExportData (ofstream&) – экспорт выражения в файловый поток.
int operator == (cExpressionSg&), operator != (cExpressionSg&)
9) Класс cArrayRefSg – представляет ссылку на элемент массива.
cArrayRefSg (SgArrayRefExp*, cSymbolTabSg*) – конструктор класса, параметрами являются подлежащая разбору ссылка на элемент массива, представленная объектом Sage++, и таблица символов, в которую будут добавлены входящие в ссылку переменные и имя массива.
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности