В этом классе в качестве вспомогательного используется класс Processors


перейти к полному списку дипломных проектов

Ссылка на скачивания файла в формате .doc находится в конце странички

В этом классе в качестве вспомогательного используется класс Processors

Вторая – анализ собранных данных. Третья – визуализация.

5.3.1 Сбор трассы

При каждом запуске параллельной программы в режиме трассировки, создается группа файлов с информацией обо всех ключевых событиях в трассе. Тут есть времена и параметры всех событий, которые имели место при выполнении программы. К этим данным есть возможность доступа через специальные функции интерфейса. Также можно получить информацию для разного рода вспомогательных таблиц (имена используемых функций, исходных файлов и т.п.).

Далее полученные данные поступают на вход модулям анализа и сбора характеристик.

5.3.2 Анализ

В соответствии с описанной в пункте 4.2 методикой, вся программа будет разбита на систему интервалов, точнее дерево интервалов. Корнем дерева будет вся программа, она считается интервалом нулевого уровня.

Далее в соответствии с вложенностью интервалы первого уровня и т.д.

Как указать границы интервалов?

Для этого используются пара функций MPI_Send() и MPI_Recv() для указания начала интервала, и такая же пара для указания его окончания. При этом посылка и прием сообщения происходят самому себе и от самого себя (имеется ввиду, что в качестве номера отправителя/получателя используется номер самого процесса). Кроме того, тэг сообщения имеет следующий вид:

TAG = 0x(aa)(id)(aa/bb).

Тэг является четырехбайтным целым числом. Первый байт у «нашего» тэга – это 0xaa. Это позволяет отличить его от обычных посылок/приемов сообщений. Последний байт может быть 0xaa – символизирует начало интервала, 0xbb – конец интервала. Внутри специальный идентификатор интервала (2 байта), его можно использовать, например, для того, чтобы отдельно выделить итерации цикла.

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

он всегда попадает в трассировку (некоторые специальные функции вроде MPI_Pcontrol() в текущей версии трассировщика не попадают).

занимает относительно немного времени (порядка 100 тиков процессора).

прост в использовании и не требует дополнительных средств, помимо стандартных MPI-функций.

Таким образом, программист может добавить в свой код границы интересующих его областей программы (в нашей терминологии интервалы).

Далее по этим тэгам среди всех событий будут найдены те, которые являются границами интервалов и будут определены их идентификаторы.

Для этого вводится специальный класс:

class Margin

{

public:

Margin(bool ,unsigned long ,int ,unsigned int ,int);

friend bool operator <( const Margin s1, const Margin s2)

bool enter_leave;

unsigned long time;

int identity;

unsigned int proc;

unsigned int scl;

};

И функция:

vector* createMargins(void);

которая и вычисляет=> определяет необходимые границы вместе со всеми параметрами.

После определения границ, создается структура дерево, в которой хранятся все данные обо всех интервалах.

Кратко об используемых структурах данных.

Создан специальный класс tree:

class tree

{

public:

static int Intervallevel; // current interval level

static int IntervalID; // current interval ID

long index;

int level; // Interval level

int EXE_count;

int source_line;

string source_file;

int ID;

//Characteristics for every interval

unsigned long Exec_time;

unsigned long Productive_time;

double Efficiency;

unsigned long CPU_time;

unsigned long MPI_time;

unsigned long Lost_time;

unsigned long Comm_time;

unsigned long SendRecv_time;

unsigned long CollectiveAll_time;

unsigned long Idle_time;

unsigned long AllToAll_time;

unsigned long Time_variation;

unsigned long Potent_sync;

unsigned long T_start;

vector < pair >* cmp_pairs;

//for intelval's tree

tree* parent_interval;

int count;

vector nested_intervals;

vector Procs;

};

Этот класс содержит информацию обо всех характеристиках данного интервала, описанных в 5.2. Кроме того, в нем есть информация о родительском узле дерева, а также обо всех «листьях-потомках».

В этом классе в качестве вспомогательного используется класс Processors.

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

Содержание дипломной работы

Поэтому главным недостатком выбора одной из них в качестве модели программирования является то, что такая модель непривычна и неудобна для программистов, разрабатывающих вычислительные программы
Создание, уничтожение нитей, распределение на них витков параллельных циклов или параллельных секций – всё это брал на себя компилятор
Когда показывать? Важно показывать то, что полезно в данный момент для отладки эффективности, чтобы не загромождать пользователя излишней информацией
Существуют следующие составляющие потерянного времени: потери из-за недостатка параллелизма, приводящего к дублированию вычислений на нескольких процессорах (недостаточный параллелизм)
Этот интервал может включать в себя несколько интервалов следующего (первого) уровня
В последнем случае причина может быть очень простой – неверное задание матрицы процессоров при запуске программы или неверное распределение данных и вычислений
Он может ограничить, например, количество регулярно повторяющихся внешних итераций до одной - двух итераций
3 Устройство анализатора Итак, анализатор состоит из трех основных компонент
В этом классе в качестве вспомогательного используется класс Processors
Первая используемая для этого функция – это функция Integrate()
000898 0 0
Выводы: Отладка эффективности параллельных программ – процесс очень сложный и трудоемкий Развитые средства анализа эффективности могут существенно ускорить этот процесс
Операции получения/ожидания/посылки-получения с блокировкой MPI_Recv, MPI_Wait, MPI_Waitany, MPI_Waitall, MPI_Waitsome, MPI_Probe, MPI_Sendrecv, MPI_Sendrecv_replace темно-синий 5

заработать

Закачай файл и получай деньги