46725 (588437), страница 4

Файл №588437 46725 (Автоматическое распараллеливание программ для распределенных систем. Статическое построение расширенного графа управления) 4 страница46725 (588437) страница 42016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

Общим для всей системы ограничением является также ее достаточно высокая чувствительность к плохой структурированности программы, а именно:

  • в программе не должны присутствовать операторы прекращения выполнения;

  • запрещены операторы перехода, за исключением выхода из тела цикла на первый за концом цикла оператор по условию.

Другим существенным требованием является запрет на использование COMMON-областей.

Ограничения, накладываемые в данной дипломной работе:

  • выражения в заголовках циклов (начальное, конечное, шаг) могут быть только линейными относительно некоторой переменной, т.е. иметь вид C1*V+C0, где C1 и C0 – константы, V - переменная;

  • индексные выражения в обращениях к массивам должны удовлетворять тому же условию;

  • отсутствие аппарата поиска зависимостей по данным влечет необходимость вставки пользователем комментария “DEPENDENCE” в теле цикла, содержащего зависимость.

    1. 3.2 Описание классов

В рамках дипломной работы реализовано два набора классов:

  1. Классы, выполняющие построение внутреннего представления, экспорт данных для блока распределения вычислений и данных, последующий импорт результатов работы этого блока и генерацию текста на FortranDVM.

  2. Классы, используемые в блоке распределения вычислений и данных. Выполняют импорт внутреннего представления и воссоздают его структуру, а также производят экспорт результатов работы этого блока.

Рассмотрим назначение классов 1-го набора и их наиболее важные члены.

1) Класс cSourceProgramSg – представляет исходную последовательную программу. Обработка входной программы должна начинаться с создания объекта этого класса.

cSourceProgramSg (char *projfile) – конструктор класса, projfile – имя файла проекта Sage++; в этом конструкторе происходит открытие проекта, разбор входящего в него файла исходной программы, создание незаполненных графа, списка циклов и таблицы символов.

SgStatement *FirstSt () – 1-й оператор программы.

SgStatement *LastSt () - последний оператор программы.

cProgramGraphSg *PrgGraph () – граф программы.

cLoopListSg *LpList () – список циклов.

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

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

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

void BuildLoopList () – построение списка циклов.

void BuildProgGraph () – построение графа программы.

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

void PrintProgGraph (ostream&) – вывод графа.

void PrintSymbolTab (ostream&) – вывод таблицы имен.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int GoStart (), GoDown (), GoUp (), GoLeft1 (), GoLeft2 (),

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

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

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

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

void Build (SgStatement*, SgStatement*, int, int) – построение графа.

void Unparse () – произвести вставку добавленных в граф данных во внутреннее представление 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++, и таблица символов, в которую будут добавлены входящие в ссылку переменные и имя массива.

SgArrayRefExp *poSgArrRef – исходный объект Sage++.

cSymbolSg *poSym – идентификатор массива.

int SubscrNum – количество индексных выражений в ссылке.

cExpressionSg* SubscrList [df_MAX_DIM] – массив индексных выражений.

long int ExportData (ofstream&) – экспорт в файловый поток.

int operator == (cArrayRefSg&)

Характеристики

Список файлов ВКР

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7026
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее