pppaDDr (1158441)
Текст из файла
16
Институт прикладной математики им. М.В.Келдыша
Российская Академия наук
Анализатор производительности параллельных программ
Детальный дизайн
Декабрь, 1999
Оглавление
1 Введение 3
2 Подсистема сбора 3
2.1 Модуль statevnt.c 3
2.2 Модуль interval.c 3
2.3 Модуль statist.c 4
2.4 Описание структур, использующихся для представления информации об интервале, общей информации о системе поддержки и времени рассинхронизации 5
3 Подсистема обработки 7
3.1 Класс Cinter, модуль inter.cpp 7
3.2 Класс CtreeInter, модуль treeinter.cpp 9
3.3 Класс Csynchro, модуль synchro.cpp 11
3.4 Класс CstatRead, модуль statread.cpp 13
3.5 Модуль statfile.cpp функция main. 16
1Введение
Анализатор производительности состоит из двух подсистем – подсистемы сбора и подсистемы обработки.
Первая подсистема обеспечивает на каждом процессоре сбор характеристик выполнения параллельной программы. Обращения к этой подсистеме происходит из Lib-DVM во время выполнения параллельной программы. Кроме того, в языках C-DVM и Fortran DVM есть средства описания интервалов выполнения программы, для которых пользователь желает получить характеристики эффективности. Компиляторы обеспечивают обращения к подсистеме сбора при начале и завершении каждого такого интервала. Собранная на каждом процессоре информация записывается в файл при завершении выполнения программы.
Вторая подсистема обеспечивает на рабочей станции обработку информации, собранной на параллельной машине, и выдачу заданных пользователем характеристик эффективности.
2Подсистема сбора
Сбор информации для отладки производительности состоит из модулей:
statevnt.c, statist.c, interval.c, strall.h, statist.h, interval.h.
Эти модули предназначены для сбора информации о временах выполнения DVM-функций и DVM-системы по интервалам, а также о временах рассинхронизаций коллективных операций и разброса времен. Собранная информация записывается в файл, имя и длина которого задается в файле с параметрами. В дальнейшем этот файл используется анализатором производительности для выдачи характеристик выполнения.
2.1Модуль statevnt.c
Этот модуль предназначен для установки признаков DVM-функциям, время начала и окончания которых, записывается в файл, по этим временам анализатор производительности выдает характеристики рассинхронизации и разброса времен для каждого интервала.
2.2Модуль interval.c
В этом модуле находятся функции, которые вызываются конвертором, для создания и завершения интервалов. Все эти функции обеспечивают запись в файлы трассировки соответствующего события.
void __callstd binter_(long *nfrag, long *val)
void __callstd bsloop_(long *nfrag)
void __callstd bploop_(long *nfrag)
| nfrag val | - номер интервала, |
Эти функции служат для создания интервалов трех типов: пользовательского, параллельного и последовательного.
void __callstd einter_(long *nfrag, long *nline)
void __callstd eloop_(long *nfrag, long *nline)
Эти функции служат для закрытия текущего интервала, первая функция закрывает пользовательский интервал, а вторая закрывает и последовательный и параллельный. Прототипы этих функций находятся в файле interval.h.
2.3Модуль statist.c
Непосредственное создание интервалов, их поиск в буфере, их завершение, а также запись в файл, как интервалов, так и времен синхронизации выполняют функции этого модуля. Внешние объявления функций модуля находятся в файле statist.h.
Система поддержки во время выполнения задачи вызывает следующие функции:
| void stat_init(void) | - эта функция расписывает буфер нулевыми значениями, инициализирует переменные, записывает в начало буфера информацию о системе поддержки (например, количество процессоров, на которых считалась задача) и создает интервал для всей программы. |
| void stat_done(void) | - эта функция закрывает интервал всей программы, если не хватило места на буфере под интервалы или времена рассинхронизации, то выдает сообщения об ошибках. |
| void stat_event(int numbevent) | - эта функция записывает в конец буфера времена начала и окончания коллективных операций. Параметр numbevent – номер ситуации. |
Интервал идентифицируется номером строки и именем файла пользовательской программы, где встретилась соответствующая конструкция и значением выражения, если интервал пользовательский. Номер строки и имя файла находятся во внешних переменных DVM_LINE[0] и DVM_FILE[0], значение выражения передается как параметр. При интервале хранятся ссылки на интервал более высокого уровня, более низкого уровня и на следующий интервал этого же уровня. Интервал становится текущим в следующих случаях: если он создан последним, если он найден в списке интервалов соответствующего уровня и его идентифицирующие значения совпадают, а в случае закрытия интервала, текущим становится интервал более высокого уровня.
Следующие функции вызываются для создания, поиска и завершения интервалов.
| void CreateInter(int typef,long val) | - размещает в буфере соответствующую запись (значения ее полей будут описаны ниже). Параметры: typef – тип интервала, val – значение выражения, которое может быть задано в интервале, созданном в программе средствами языка. Вновь созданный интервал становится текущим, времена выполнения DVM–функций записываются в текущий интервал. Если места на буфере не хватает, интервал создается в памяти. |
| int FindInter(long val) | - предназначена для поиска интервала. Вызывается перед функцией создания интервала. Возвращает код ответа 1 – интервал найден, 0 – не найден. |
| void EndInter(long nline) | - закрытие текущего интервала, для контроля передается параметр nline – номер строки начала интервала. |
| void FreeInter(void) | - освобождает память. Вызывается в конце работы, когда печатаются сообщения о нехватке места на буфере. |
2.4Описание структур, использующихся для представления информации об интервале, общей информации о системе поддержки и времени рассинхронизации
Эти описания находятся в файле strall.h. Этот файл используется и на втором этапе подсистемой обработки.
#define SZSH sizeof(short)
#define SZL sizeof(long)
#define SZINT sizeof(int)
#define SZD sizeof(double)
#define SZV sizeof(void*)
Структура общей информации, записываемой в начале каждого буфера.
| typedef struct tvms_ch { | unsigned char | reverse[SZSH] |
| rank[SZSH], | ||
| maxnlev[SZSH], | ||
| szsh[SZSH], | ||
| szl[SZSH], | ||
| szv[SZSH], | ||
| szd[SZSH], | ||
| smallbuff[SZSH] | ||
| proccount[SZL], | ||
| mpstype[SZL], | ||
| ioproc[SZL], | ||
| qfrag[SZL], | ||
| pbuffer[SZV], | ||
| lbuf[SZL], | ||
| linter[SZL], | ||
| lsynchro[SZL] | ||
| } *pvms_ch; |
| reverse[ | - признак, что информация собрана не на рабочей станции; |
Структура интервала.
В конце каждого интервала записывается имя исходного файла.
| typedef struct tinter_ch { | unsigned char | type[SZSH], |
| type | - тип интервала; |
Структура времени рассинхронизации.
| typedef struct tsyn_ch { | unsigned char | nitem[SZSH], |
| nitem | - номер коллективной операции; |
3Подсистема обработки
Этот инструмент состоит из следующих модулей: inter.cpp, treeinter.cpp, synchro.cpp, statread.cpp, statfile.cpp. Заголовочные файлы: inter.h, treeinter.h, synchro.h, statread.h, strall.h, bool.h, sysstat.h. Функция main находится в модуле statfile.cpp и у нее может быть 7 параметров, из которых первые два - обязательные. Это имя файла с собранной информацией во время выполнения программы, имя файла куда записать информацию, далее 3 символа: y/n – признаки вывода основных, сравнительных и базовых характеристик, максимальный уровень вложенности интервалов и список номеров процессоров, для которых выводить базовые характеристики.
3.1Класс Cinter, модуль inter.cpp
Этот класс содержит элементы данных, в которых содержатся все необходимые временные характеристики о работе интервала, функции-члены класса обеспечивают работу с этими данными.
| enum typegrp | {COM,RCOM,SYN,VAR,OVERLAP,CALL}; |
| enum typecom | {IO,RD,SH,RA,RED}; |
| enum typetime | {LOST, INSUFUSR, INSUF, IDLE, SUMCOM, SUMRCOM, SUMSYN, SUMVAR, SUMOVERLAP, IMB, EXEC, CPUUSR, CPU, IOTIME, START, PROC, ITER}; |
| typedef struct tident { | char | *pname, |
| pname | - имя исходного файла, где задан интервал; |
| double mgen[ITER+1] | - массив времен, для выдачи характеристик по процессорам, |
| double mcom[RED+1] | - массив времен передачи сообщений в коллективных операциях, |
| double mrcom[RED+1] | - массив времен реальной рассинхронизации, |
| double msyn[RED+1] | - массив времен рассинхронизации, |
| double mvar[RED+1] | - массив разброса времен, |
| double moverlap[RED+1] | - массив времен перекрытия операций, |
| double mcall[RED+1] | - количество вызовов коллективных операций, |
| ident idint | - информация об идентификаторе интервала. |
3.1.1Конструктор
| CInter ( | S_GRPTIMES | (*pt)[StatGrpCount], |
| (*pt)StatGrpCount | – указатель на массив времен, переписанный из файла, |
Конструктор служит для записи значений об идентификаторе интервала и некоторых характеристик, значения которых находятся в файле.
3.1.2Деструктор
~CInter(void); - деструктор освобождает память, занятую под имя исходного файла.
3.1.3Функции записи характеристик
void AddTime(typetime t2,double val);
void WriteTime(typetime t2,double val);
void AddTime(typegrp t1,typecom t2,double val);
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















