Первая используемая для этого функция – это функция Integrate()


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

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

Первая используемая для этого функция – это функция Integrate()

class Processors

{

public:

unsigned long enter_time;

unsigned long leave_time;

unsigned int number;

unsigned long MPI_time;

unsigned long SendRecv_time;

unsigned long CollectiveAll_time;

unsigned long Idle_time;

unsigned long AllToAll_time;

unsigned long CPU_time;

unsigned long Comm_time;

unsigned long Time_variation;

unsigned long Potent_sync;

unsigned long T_start;

};

В этом классе содержатся элементарные составляющие всех компонентов, собранные на каждом интервале каждого процессора.

Далее, после определения границ интервалов, происходит создание дерева интервалов. В этом дереве и будет храниться информация обо всех интервалах.

Класс tree включает методы, которые и собирают информацию из структур, собранных на трассе.

Первая группа характеристик собирается в функции

Leave(int line, char* file, long index,unsigned int proc,unsigned long time).

MPI_time Используем – getMPITimebyProc();

SendRecv_time - getSendRecvCommunicationTimebyProc();

CollectiveAll_time – getCollectiveAllByProc();

AllToAll_time - getAllToAllByProc();

Potent_sync - getPotentSyncByProc();

Time_variation - getTimeVariationByProc();

T_start - getNonBlockedTimebyProc();

Вычисление характеристик.

getMPITimebyProc() – Происходит суммирование интервалов времени, занятых под MPI-функции (интервалы получаются как разность между временем выхода и входа в MPI-функцию).

getSendRecvCommunicationTimebyProc( )- Происходит суммирование интервалов времени, вычисляемых как разность времени выхода из функции приема сообщения и времени входа в функцию посылки сообщения.

getPotentSyncByProc() – Вычисляется по-разному для операций одиночных посылок/приемов сообщений и коллективных операций. Сюда входят все случаи, когда Recv был выдан раньше Send’а. Эти «задержки» как раз и суммируются. Для коллективных же операций суммируется время «задержки» старта операции на некоторых процессорах.

getTimeVariationByProc() – Вычисляется время, рассинхронизации окончания коллективной операции.

getNonBlockedTimebyProc() – Вычисляется аналогично getMPITimebyProc(), только суммируются времена работы только не блокирующих операций.

Все эти характеристики собираются на каждом процессоре для данного интервала. Прототип всех функций одинаков:

getFunction(unsigned long enter_time, unsigned long leave_time, unsigned int proc).

Собранные «элементарные» характеристики, затем собираются в более общие по всему интервалу.

Первая используемая для этого функция – это функция Integrate().

В этой функции собираются следующие характеристики:

CPU_time

MPI_time

SendRecv_time

CollectiveAll_time

AllToAll_time

Comm_time(Общее время коммуникаций)

Idle_time(время бездействия)

Potent_sync

Time_variation

T_start

Все они уже являются характеристиками всего интервала.

Далее происходит вычисление уже не общих, а сравнительных характеристик. Зная все эти компоненты на каждом процессоре для интервала, мы находим процессоры с максимальным, минимальным значением по времени, а также среднее значения всех характеристик.

После функции Integrate() вычисляется полезное время calculateProductive(), потом время запуска - calculateExecution(),

эффективность распараллеливания - efficiency(), и, наконец, потерянное время – calculateLost().

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

Пример. Текстовый файл с итоговыми характеристиками.

Interval (LineNumber = 153 SourceFile = exch.c) Level=0 EXE_Count=1

---Main Characteristics---

Parallelization Efficiency 0.978833

Execution Time 2.079975

Processors 4

Total Time 8.

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

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

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

заработать

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