rtsDDr (1158447), страница 7
Текст из файла (страница 7)
s_GRPTIMES TaskInter[StatGrpCount][StatGrpCount]; .
Матрица TaskInter соответствует начальному интервалу выполнения программы пользователя. Накопление в ней информации осуществляется независимо от функционирования основного механизма сбора статистики. Характеристики выполнения программы, содержащиеся в элементах матрицы TaskInter, не подвергаются коррекции числом процессоров, выполняющих текущую ветвь.
При завершении выполнения программы заданная часть матрицы TaskInter выводится в поток информационных сообщений системы поддержки.
Управление накоплением информации в матрице TaskInter и её (информации) выводом осуществляется с помощью параметров TimeExpendPrint и StatGrpName файлов statist.* . При нулевом значении параметра TimeExpendPrint накопление информации в матрице TaskInter не производится. Ненулевое значение этого параметра задаёт режим накопления и определяет состав и форму выводимой информации:
| 1 | | краткий режим вывода; выводятся: | - общее время функционирования системы поддержки (System Time); |
| - время решения задачи (Task Time) и включённое в него время выполнения функций системы поддержки (Function Time) (без разделения на полезное и потерянное времена); | |||
| 2 | | в дополнение к краткому режиму выводятся характеристики столбца, | |
| 3 | | в дополнение к краткому режиму выводятся характеристики строки, являющейся суммой строк матрицы TaskInter; | |
| 4 | | в дополнение к краткому режиму выводятся характеристики столбца, имя-номер которого задан значением параметра StatGrpName; | |
| 5 | | в дополнение к краткому режиму выводятся характеристики строки, имя-номер ко торой задан значением параметра StatGrpName. | |
11.1.5Обеспечение накопления характеристик DVM-операций ввода/вывода, реализованных в Фортране
Стандартно при вызове программой пользователя любой функции системы поддержки номер группы этой функции запоминается в глобальной переменной
int CurrOper; .
При выполнении вызванной функции и при завершении её выполнения значение переменной CurrOper используется как номер строки матрицы IM для сохранения в ней измеренных характеристик.
Выполнение DVM-операций ввода/вывода в Фортране сопровождается обращениями к функциям системы поддержки, не являющихся функциями ввода/вывода. Поэтому для правильного накопления характеристик Фортран-операций ввода/вывода необходимо:
-
установить в начале операции ввода/вывода значение переменной CurrOper, равным IOGrp (выполняется функция ввода/вывода);
-
не менять значение переменой CurrOper при обращении программы пользователя к любой функции системы поддержки до завершения операции ввода/вывода;
-
отменить запрет изменения значения переменной CurrOper при завершении операции ввода/вывода.
Для выполнения перечисленных требований система поддержки предоставляет функции
void biof_(void);
и
void eiof_(void); .
Обращение к функции biof_ осуществляется программой пользователя в начале операции ввода/вывода. Функция biof_ присваивает переменной CurrOper значение, равное IOGrp, и устанавливает в единицу значение глобальной переменной
unsigned char CurrOperFix; .
При ненулевом значении переменной CurrOperFix значение переменной CurrOper не меняется при обращении программы пользователя к функциям системы поддержки.
Функция eiof_ предназначена для оповещения системы поддержки о завершении операции ввода/вывода. Её выполнение заключается в присвоении переменной CurrOperFix нулевого значения, разрешающего изменение значения переменной CurrOper.
11.2Средства внешнего управления программой сбора статистики
Внешнее управление функционированием программы сбора статистики осущ ествляется с помощью следующих задаваемых в файлах statist.* параметров:
| Is_DVM_STAT | | признак включенного сбора статистики; |
| StatBufLength | | длина буфера для сбора статистики в байтах для одного процессора; |
| StatFileName | | имя файла, в который будут выгружены буфера сбора статистики из всех процессоров решающего поля; |
| DelStatist | | признак уничтожения "старого" (оставшегося от предыдущего запуска) файла с накопленной статистикой; |
| IsTimeExpend | | признак подсчёта расхода времени программы пользователя (признак накопления характеристик ProductTime и LostTime в интервальной матрице характеристик IM); |
| IsSynchrTime | | признак подсчёта времени реальной рассинхронизации (признак накопления характеристики ProductTime в столбце MsgPasGrp интервальной матрицы хактеристик IM); |
| IsTimeVariation | | признак подсчёта времени потенциальной рассинхронизации и разброса времён; |
| MaxIntervalLevel | | максимально допустимый уровень вложенности интервалов выполнения программы пользователя. |
11.3Инициализация программы сбора статистики
При инициализации программы сбора статистики получают значения, соответствующие рассмотренным в п.11.2 внешним параметрам, следующие глобальные переменные:
| char *StatBufPtr | | указатель на буфер для сбора статистической информации; |
| long StatBufLength | | длина в байтах буфера для сбора статистической информации. |
После инициализации перечисленных выше глобальных переменных для более конкретной настройки сбора статистики осуществляется обращение к функции
void stat_init(void); (файл statist.c).
Функция stat_init должна, в частности, предоставить системе поддержки начальную интервальную матрицу характеристик (инициализировать указатель CurrInterPtr, см. п. 11.1.1).
После выхода из функции stat_init сбор статистики считается системой поддержки включённым.
11.4Обработка программой сбора статистики обращений к функциям системы поддержки
После выхода из рассмотренной в п.11.3 функции stat_init система поддержки начнёт производить накопление характеристик выполнения программы пользователя в предоставленной ей интервальной матрице характеристик.
Подсчёт характеристик в матрице IM осуществляется при обращении и возврате из любой функции системы поддержки, доступной программе пользователя. Вход и выход из части функций системы поддержки требуют, однако, дополнительной обработки. К таким функциям относятся функции, времена обращений и возврата из которых необходимы для вычисления потенциальной рассинхронизации и разброса времён программы пользователя. При обращении и/или возврате из такой функции система поддержки производит обращение к функции
void stat_event(int EventNumber); (файл statist.c),
где EventNumber номер наступившего события трассировки. Параметр EventNumber однозначно определяет как обрабатываемую функцию, так и тип наступившего события (вход в обрабатываемую функцию или выход из неё).
Обращение к функции stat_event по событию EventNumber осуществляется лишь в том случае, если EventNumber-й элемент глобального массива
unsigned char IsStat[];
не равен нулю. Ненулевое значение байта IsStat[EventNumber] (1-255) определяет конкретный вариант обработки события с номером EventNumber функцией stat_event. Инициализация массива IsStat осуществляется в модуле системы поддержки statevnt.c, где для входа и выхода каждой функции системы поддержки, доступной программе пользователя, задаётся нулевое или ненулевое значение соответствующего элемента массива IsStat.
Кроме того, обращение к функции stat_event производится только при выполнении следующих общих для всех обрабатываемых функций условий:
-
включён подсчёт времени реальной рассинхронизации и разброса времён (параметр запуска системы поддержки IsTimeVariation задан ненулевым);
-
обрабатываемая функция вызвана непосредственно программой пользователя или функцией системы поддержки dopl_ для запуска или ожидания обмена границами;
-
обрабатываемая функция не является функцией, вызванной программой пользователя при выполнении DVM-операции ввода/вывода в Фортране (значение глобальной переменной CurrOperFix равно нулю, см. п. 11.1.5).
Перед обращением к функции stat_event система поддержки осуществляет запись в глобальную переменную
ObjectRef StatObjectRef;
ссылку на текущий обрабатываемый объект. Таким объектом, в зависимости от наступившего события, может быть:
-
многопроцессорная система;
-
представление абстрактной машины;
-
распределённый массив;
-
карта отображения распределённого массива;
-
параллельный цикл;
-
редукционная переменная;
-
редукционная группа;
-
группа границ распределённых массивов.
Для распределённого массива в переменную StatObjectRef записывается 0-е слово его заголовка.
Ссылка на текущий обрабатываемый объект, содержащаяся в переменной StatObjectRef, может использоваться программой сбора статистики для получения справочной информации об объекте с помощью функций системы поддержки.
Отметим, что перед обращением к функции stat_event система поддержки запоминает текущее астрономическое время в глобальной переменной
double Curr_dvm_time; .
Поэтому при выполнении функции stat_event опроса текущего времени с помощью функции dvm_time не требуется.
11.5Завершение работы с программой сбора статистики
При завершении пользовательской программы система поддержки производит обращение к функции
void stat_done(void); (файл statist.c)
для завершающей обработки программой сбора статистики собранной информации (если такая обработка требуется). После выхода из этой функции система поддержки запишет буфера накопления статистики всех процессоров в двоичный файл, имя которого определено параметром внешнего управления StatFileName (см. п.11.2). Буфера процессоров расположатся в этом файле непрерывно в порядке возрастания их (процессоров) внутренних номеров. Далее сбор статистики считается выключенным.
11.6Доступ к некоторой системной информации
Могущие оказаться необходимыми характеристики системы поддержки и аппаратурно-программной среды, в рамках которой она функционирует, содержатся в следующих глобальных переменных.
| long | MPS_TYPE | | тип системы передачи сообщений. Может принимать значения (указаны именованные константы): EMP_MPS_TYPE, GNS_MPS_TYPE, ROU_MPS_TYPE, MPI_MPS_TYPE, PVM_MPS_TYPE. |
| long | ProcCount | | число процессоров выделенного задаче решающего поля (число процессоров начальной процессорной системы). |
| long | CurrEnvProcCount | | число процессоров, выполняющих текущую ветвь параллельной программы. |
| unsigned char | VMSRank | | размерность многопроцессорной системы, в которой функционирует система поддержки (размерность начальной процессорной системы). |
| long | VMSSize[] | | массив, i-й элемент которого содержит размер начальной процессорной системы по измерению i+1 (0 ≤ i ≤ VMSRank-1). |
| int | MPS_CurrentProc | | внутренний номер текущего процессора. |
| int | MPS_IOProc | | внутренний номер процессора ввода/вывода начальной процессорной системы. |
| int | DVM_IOProc | | внутренний номер процессора ввода/вывода текущей процессорной системы. |
| int | MPS_CentralProc | | внутренний номер центрального процессора начальной процессорной системы. |
| int | DVM_CentralProc | | внутренний номер центрального процессора текущей процессорной системы. |
| double | Curr_dvm_time | | текущее время системы поддержки (результат последнего опроса времени функцией dvm_time). |
12Сообщения об ошибках, возникающих при работе системы поддержки
Сообщения об ошибках, возникающих в процессе функционирования системы поддержки, делятся (по степени серьезности последних) на предупреждения и сообщения об ошибках, прерывающих выполнение программы. Ошибки, прерывающие выполнение программы, могут быть обычными, ответственность за которые лежит (скорее всего) на пользователе, и фатальными, требующими, возможно, участия разработчика или его представителя.














