Lib-DVM - детальный дизайн (оглавление) Часть 1(1-7) Часть 2 (8-11) Часть 3 (12) (Сообщения об ошибках)
документ от: февраль, 2001 - дата последнего обновления 03.05.01 -

8 О выводе информационных сообщений системы поддержки и сообщений об ошибках

8.1 Функции вывода информационных сообщений и сообщений об ошибках

Каждое сообщение, выдаваемое системой поддержки в процессе своего функционирования, является либо информационным, либо сообщением об ошибке.

Информационные сообщения выводятся с помощью функций rtl_printf, rtl_mprintf (см.п.1.3), а также функцией pprintf со значением параметра prefix, равным 0 или 1 (см.п.7.3).

Кроме того, для вывода информационных сообщений в системе поддержки предусмотрена функция rtl_iprintf, синтаксически эквивалентная функции printf и возвращающая число выведенных символов:

int rtl_iprintf(char *format, . . . );

Информационным сообщением считается также любая трассировочная информация, выводимая функциями tprintf и dvm_trace в поток информационных сообщений системы поддержки (см. п.7.3).

Вывод сообщений об ошибках осуществляется функциями eprintf и epprintf, а также функцией pprintf со значением параметра prefix, равным 2 или 3 (см.п.7.3).

8.2 Управление стандартными выходными потоками и потоками вывода информационных сообщений и сообщений об ошибках

Направление и перенаправление стандартных выходных потоков, а также потоков, предназначенных для вывода информационных сообщений и сообщений об ошибках, осуществляется с помощью параметров, содержащихся в файлах current.par и syspar.* .

Файл current.par является файлом параметров текущего запуска системы поддержки и создаётся программой её запуска в текущей рабочей директории. Он состоит из следующей последовательности строк:

CurrentPar[0] = <параметр>;
CurrentPar[1] = <
параметр>;
. . . . . . . . . . . . . . . . . . . . . . . .
CurrentPar[n] = <
параметр>;

Расположенными справа от знака "=" параметрами, определяющими вывод информации, могут быть:

  1. +o[<путь, определяющий файл>]

Данный параметр даёт указание системе поддержки перевести поток stdout в заданный файл. Если путь, определяющий файл, не задан, то stdout переводится в файл stdout.out .

  1. +e[<путь, определяющий файл>]

Параметр задаёт перевод потока stderr в заданный файл. Если путь, определяющий файл, не задан, то stderr переводится в файл stderr.out.

  1. +i[<символы, определяющие потоки>]

Данный параметр даёт указание системе поддержки направить информационные сообщения в потоки, определяемые заданными символами.

Символами, определяющими потоки, могут быть:

"o" - поток stdout;
"e" - поток stderr;
"f" - файл.

Если задан как символ "o", так и символ "e", а потоки stdout и stderr в файлы не переведены или переведены в один файл, то вывод информационных сообщений будет осуществляться только в поток stdout (информационные сообщения не дублируются). При направлении информационных сообщений в файл (задан символ "f") его имя (путь) определяется параметром SysInfoFileName файла параметров syspar.* (см. ниже). Если не задано ни одного символа, то информационные сообщения выводиться не будут.

Перенаправление потоков stdout и stderr в файлы может быть осуществлено также с помощью следующих параметров, задаваемых в файле syspar.*:

StdOutToFile - признак перевода потока stdout в файл;
StdOutFileName - путь, определяющий файл для перевода в него потока stdout (если этот параметр не задан или задан пустой путь, то перенаправление потока stdout, если оно указано параметром StdOutToFile, будет произведено в файл stdout.out);
StdErrToFile - признак перевода потока stderr в файл;
StdErrFileName - путь, определяющий файл для перевода в него потока stderr (если этот параметр не задан или задан пустой путь, то перенаправление потока stderr, если оно указано параметром StdErrToFile, будет произведено в файл stderr.out);
DelStdStream - признак уничтожения "старых" (оставшихся от предыдущего запуска) файлов с выходными потоками.

При вводе и обработке параметров наибольший приоритет имеет самое первое указание о переводе в файл стандартного выходного потока. В частности, перенаправление потоков stdout и stderr с помощью параметров "+o" и "+e" файла current.par подавляет перевод потоков перечисленными выше параметрами файла syspar.* (файл current.par вводится и обрабатывается раньше файла syspar.*).

При отсутствии указания "+i" в файле current.par вывод информационных сообщений определяется параметрами, заданными в файле syspar.* .

Такими параметрами могут быть:

SysInfoPrint - общий признак включённого вывода информационных сообщений;
SysInfoStdOut - признак вывода информационных сообщений в поток stdout;
SysInfoStdErr - признак вывода информационных сообщений в поток stderr;
SysInfoFile - признак вывода информационных сообщений в файл.

Единичные значения параметров SysInfoStdOut и SysInfoStdErr позволяют при перенаправлении stdout в файл перенаправить информационные сообщения в этот же файл и сохранить их на экране видеомонитора (перевод вывода пользовательской программы в файл должен быть осуществлён с помощью параметра "+o" файла current.par). Манипулируя значениями этих параметров, можно добиться любой комбинации ВИДЕОМОНИТОР - STDOUT, ПЕРЕВЕДЕННЫЙ В ФАЙЛ. Если параметры SysInfoStdOut и SysInfoStdErr равны единице, а потоки stdout и stderr в файлы не переведены или переведены в один файл, то вывод информационных сообщений будет осуществляться только в поток stdout (вывод информации не дублируется).

Отметим, что направление информационных сообщений с помощью параметра "+i" файла current.par имеет приоритет над их направлением, заданным параметрами SysInfoStdOut, SysInfoStdErr и SysInfoFile файла syspar.* .

Вывод информационных сообщений в файл (SysInfoFile = 1) управляется также следующими параметрами файла syspar.*:

SysInfoFileName - путь, определяющий файл для размещения информационных сообщений;
FatInfoNoOpen - признак завершения работы при неудачном открытии файла для информационных сообщений;
SysInfoSepFile - признак накопления информационных сообщений в отдельном для каждого процессора файле;
DelSysInfo - признак уничтожения "старого" (оставшегося от предыдущего запуска) файла с информационными сообщениями.

При нулевом значении параметра FatInfoNoOpen неудачное открытие файла для информационных сообщений приведёт к выводу предупреждения в поток сообщений об ошибках и продолжению выполнения программы без вывода информационных сообщений в файл.

При нулевом значении SysInfoSepFile каждый процессор направляет информационные сообщения непосредственно в файл, заданный параметром SysInfoFileName. При единичном - каждый процессор накапливает информационные сообщения в своем временном файле, имеющем имя <внутренний номер процессора>.out. Перед завершением работы все временные файлы собираются в один (определённый параметром SysInfoFileName), а затем уничтожаются.

Все сообщения об ошибках:

Поэтому сообщения об ошибках:

Замечание 1. Вывод информационных сообщений до ввода значения параметра SysInfoPrint определяется состоянием общего признака вывода информационных сообщений в момент старта программы (до инициализации системы поддержки). Ненулевое начальное значение этого признака устанавливается в том случае, если система поддержки скомпилирована с предопределённой переменной компиляции _INIT_INFO_ . В противном случае информационные сообщения до ввода параметра SysInfoPrint не выводятся.

Замечание 2. Стандартно вывод информационных сообщений осуществляется следующим образом. До ввода параметров информационные сообщения направлены в поток stdout. Если после ввода параметров SysInfoStdOut и SysInfoStdErr окажется, что первый из них равен нулю, а второй – нет, то информационные сообщения будут перенаправлены в поток stderr. Если же оба параметра будут введены ненулевыми, а потоки stdout и stderr направлены на видеомонитор или связаны с одним и тем же файлом, то вывод информационных сообщений будет продолжен только в поток stdout.

В качестве альтернативы предусматривается вывод информационных сообщений с приоритетом потока stderr. Для этого компиляция системы поддержки должна быть произведена с определённой переменной компиляции _INFO_STDERR_ . В результате поток stderr будет играть такую же роль, что и поток stdout в рассмотренной выше стандартной схеме.

Замечание 3. Если задан вывод информационных сообщений в файл и в поток stdout (stderr), а поток stdout (stderr) переведён в этот же файл, то вывод информационных сообщений в файл блокируется (параметр SysInfoFile устанавливается равным нулю).

8.3 Классы информационных сообщений и управление их выводом

Все информационные сообщения разделены на непересекающиеся классы, каждый из которых связан с функционированием определённой компоненты системы поддержки. Вывод сообщений каждого класса управляется независимо с помощью перечисленных ниже параметров, содержащихся в файлах syspar.*, statist.*, systrace.* и usrdebug.* . По умолчанию считается, что параметр задаётся в файлах syspar.* .

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

9 Измерение времени выполнения участков пользовательской программы

Кроме основных средств анализа производительности и сбора необходимой для этого информации, система поддержки предоставляет вспомогательный механизм измерения времени выполнения участков программы пользователя, при использовании которого результаты измерений выводятся в потоки системной трассировки. Для обозначения начала и конца измеряемого участка используются макровызовы MeasureStart и MeasureFinish. Измеряемые участки могут быть вложенными:

MeasureStart; /* начало участка 1 */
....
.......................................
  MeasureStart; /* начало участка 2 */
...........................................
...........................................
 
 
    MeasureStart; /* начало участка N /
.............................
...............
............................................
MeasureFinish; /
конец участка N */
   
   
   
  ...........................................
...........................................
 
  MeasureFinish; /* конец участка 2 */
...........................................
 
MeasureFinish; /* конец участка 1 */

Макровызов MeasureStart эквивалентен обращению к функции dvm_trace (см.п.7.3) с номером события 1 (имя этого события - MeasureStart), а макровызов MeasureFinish - обращению к dvm_trace с номером события 2 (имя этого события - MeasureFinish). В качестве дополнительной информации в открытые потоки трассировки для макровызова MeasureStart выводится уровень вложенности измеряемого участка (1,2, ..., N в вышеприведенной схеме), а для макровызова MeasureFinish - уровень вложенности и время выполнения программы, прошедшее с момента макровызова MeasureStart с тем же уровнем вложенности.

Отметим, что события трассировки с номерами 1 и 2 могут быть, как и любые другие события, выключены, что дает альтернативу изъятию макровызовов MeasureStart и MeasureFinish из программы.

10 Опрос глобального и локального размеров заданного измерения заданного объекта

long GetObjectSize( ObjectRef
unsigned long
ObjRef,
Axis );

Функция GetObjectSize возвращает размер объекта, заданного ссылкой ObjRef, по измерению Axis (глобальный размер или размер нераспределённого объекта).

Объектом может быть:

Размер измерения параллельного цикла равен

ceil( (LastIndex - InitIndex + 1)/Step ) , где:

InitIndex - начальное значение индексной переменной параллельного цикла для измерения Axis;
LastIndex - конечное значение индексной переменной параллельного цикла для измерения Axis;
Step - шаг изменения индексной переменной параллельного цикла для измерения Axis;
ceil - функция нахождения наименьшего целого, не меньшего значения своего аргумента.

При нулевом значении Axis возвращается размер всего объекта (произведение размеров всех измерений).

Если ObjRef не является ссылкой ни на один из вышеперечисленных объектов, то функция возвращает нулевое значение.

long GetObjectLocSize( ObjectRef
long
ObjRef,
Axis );

Функция GetObjectLocSize аналогична рассмотренной выше функции GetObjectSize, но возвращает локальный размер измерения Axis (или локальный размер всего объекта), т.е. размер части объекта, отображённой на текущий процессор. Если объектом является многопроцессорная система, то значения, возвращаемые функциями GetObjectSize и GetObjectLocSize, совпадают.

Отметим, что локальный размер всего объекта, не имеющего локальной части на текущем процессоре, равен нулю.

Функции GetObjectSize и GetObjectLocSize не трассируются и не обрабатываются программой сбора статистики, поэтому отличаются от функций getsiz_ и locsiz_ более быстрым выполнением (см. документ "Библиотека LIB-DVM. Описание интерфейса").

11 Средства обеспечения встроенной в систему поддержки программы сбора статистической информации

11.1 Матрица характеристик выполнения текущего интервала программы пользователя

11.1.1 Первичные характеристики выполнения текущего интервала программы пользователя

Все функции системы поддержки, к которым может обращаться программа пользователя, разделены на следующие непересекающиеся группы:

MsgPasGrp - функции передачи сообщений;
StartRedGrp - функции запуска редукционных операций;
WaitRedGrp - функции ожидания завершения редукции;
RedGrp - прочие функции организации редукции;
StartShdGrp - функции запуска обмена границами распределённых массивов;
WaitShdGrp - функции ожидания завершения обмена границами;
ShdGrp - прочие функции организации обмена границами;
DistrGrp - функции распределения данных по процессорам;
ReDistrGrp - функции перераспределения данных между процессорами;
MapPLGrp - функции организации выполнения параллельных циклов;
DoPLGrp - функция опроса очередной порции витков параллельного цикла для её выполнения (функция dopl_);
PrgBlockGrp - функции организации программных блоков;
IOGrp - функции ввода/вывода;
RemAccessGrp - функции обеспечения доступа к удалённым данным;
UserDebGrp - функции динамического контроля и трассировки выполнения программы пользователя (функции взаимодействия с DVM-отладчиком);
StatistGrp - функции организации интервалов выполнения программы пользователя, предназначенных для накопления информации, необходимой для анализа её (программы) производительности;
SystemGrp - прочие функции системы поддержки (не вошедшие ни в одну из перечисленных выше групп).

Имена групп определены как именованные числовые константы языка C в файле system.def исходных текстов системы поддержки. Число групп функций задано именованной константой StatGrpCount. Соответствие <имя функции> => <имя группы> определено в файле исходных текстов intergrp.c.

Характеристики выполнения функций каждой группы накапливаются в матрице расхода времени текущего интервала IM, создаваемой при создании нового текущего интервала (интервальная матрица характеристик, матрица характеристик текущего интервала). Указатель на матрицу IM должен быть помещён при её создании в глобальную переменную

s_GRPTIMES (* CurrInterPtr)[StatGrpCount]; .

При завершении текущего интервала программа сбора статистики должна обработать содержащиеся в матрице IM данные и восстановить в переменной CurrInterPtr указатель на матрицу интервала, в который непосредственно вложен завершаемый интервал.

Матрица IM представляет собой квадратную матрицу, элементы i-й строки которой содержат характеристики выполнения i-й группы функций, вызванных непосредственно программой пользователя. Каждая функция группы i может обращаться (непосредственно или косвенно) к функциям любой группы j (возможно равенство i и j). Характеристики таких обращений накапливаются системой поддержки в элементе IM[i,j]. Таким образом, i-я строка матрицы IM содержит разложение характеристик выполнения функций группы i, вызванных непосредственно программой пользователя, по непосредственным или косвенным обращениям к функциям всех групп.

Каждый элемент IM[i,j] является структурой типа

typedef struct


{


}
double
double
double
s_GRPTIMES;
CallCount;
ProductTime;
LostTime;

где:

CallCount - характеристика числа обращений функций группы i к функциям группы j.
ProductTime - характеристика суммарного полезного времени выполнения функций группы j при вызове их функциями группы i.
LostTime - характеристика суммарного потерянного времени выполнения функций группы j при вызове их функциями группы i.

При создании матрицы IM все перечисленные выше характеристики всех её элементов должны быть проинициализированы нулевыми значениями.

Характеристика CallCount увеличивается всякий раз при выходе из функции группы j на величину 1/n (n - число процессоров, выполняющих текущую ветвь параллельной программы).

Характеристики ProductTime и LostTime увеличиваются при выходе из функции группы j на величины, соответственно, time/n и (n-1)*time/n (time – время выполнения функции группы j без учёта её обращений к функциям других групп, n – число процессоров, выполняющих текущую ветвь).

При завершении выполнения функции, вызванной непосредственно программой пользователя (функции группы i), осуществляется рассмотренное выше увеличение характеристик ProductTime и LostTime, содержащихся в элементе IM[i][i], и увеличение харакеристики CallCount, содержащейся в элементе IM[UserGrp][i] (о строке с номером UserGrp см. ниже). Это, во-первых, позволяет иметь совокупный расход времени функций группы i, вызванных программой пользователя, в одной строке матрицы IM и, во-вторых, располагать информацией о количестве вызовов функций каждой группы, произведённых непосредственно пользовательской программой.

Смысл характеристик, содержащихся в элементах упомянутой выше строки с номером UserGrp, отличается от смысла характеристик других строк матрицы IM. Характеристики ProductTime и LostTime элемента IM[UserGrp][UserGrp] являются собственными полезным и потерянным временами выполнения программы пользователя (без учёта её обращения к функциям системы поддержки). Характеристики ProductTime и LostTime всех остальных элементов строки UserGrp равны нулю. Характеристика CallCount элемента IM[UserGrp][UserGrp] имеет нулевое значение, а для всех остальных элементов IM[UserGrp][j] (j # UserGrp) содержит, как было рассмотрено выше, приведённое к одному процессору число обращений программы пользователя к функциям группы j.

11.1.2 О характеристиках группы функций передачи сообщений

Кроме рассмотренной в п. 11.1 группы функций UserGrp, характеристики выполнения программы для группы функций MsgPasGrp (передача сообщений) также отличаются от одноимённых характеристик остальных групп.

Всё время выполнения любой функции передачи сообщений считается потерянным временем, которое накапливается в характеристике LostTime в "чистом" виде, т. е. без коррекции, учитывающей число процессоров, выполняющих текущую ветвь (без домножения на коеффициент (n-1)/n). Число обращений к функциям передачи сообщений также суммируется в характеристике CallCount без предварительного деления на n. В характеристике ProductTime вместо полезного времени, приведённого к одному процессору, накапливается время реальной (фактической) рассинхронизации программы.

Время реальной рассинхронизации является интегральной мерой потерь полезного времени, вызванных неодновременным выполнением приёма сообщения одним процессором и обращением другого процессора к функции передачи этого же сообщения. Для определения этого времени система поддержки сохраняет в качестве служебной информации, сопровождающей сообщение, астрономическое время обращения к функции передачи сообщения (начало отсчёта астрономического времени на всех процессорах одно и то же, см. выравнивание времён в п.6). В зависимости от применяемой схемы передачи сообщений (см. п.5), время реальной рассинхронизации вычисляется на приёмной стороне следующим образом.

  1. Синхронный обмен сообщениями.

Время реальной рассинхронизации полагается равным абсолютному значению разности между временем обращения принимающей стороны к функции rtl_Recv и временем обращения передающей стороны к функции rtl_Send.

  1. Асинхронный обмен сообщениями.

Время реальной рассинхронизации равно разности между временем обращения передающей стороны к функции rtl_SendA и временем обращения приёмной стороны к функции rtl_RecvA. Если эта разность отрицательна, то время реальной рассинхронизации считается нулевым.

  1. Обмен сообщениями в режиме "NO WAIT".

Время реальной рассинхронизации полагается равным разности между временем обращения передающей стороны к функции rtl_Sendnowait и временем обращения приёмной стороны к функции rtl_Waitrequest. Если эта разность отрицательна, то время реальной рассинхронизации считается нулевым.

Общее время реальной рассинхронизации является суммой времён реальной рассинхронизации отдельных актов взаимодействия <передача-приём>.

11.1.3 Вычисление суммарных характеристик выполнения программы по интервальной матрице характеристик

Будем обозначать множество номеров групп функций как GNS:

GNS = { MsgPasGrp, StartRedGrp, WaitRedGrp, RedGrp, StartShdGrp, WaitShdGrp, ShdGrp, DistrGrp, ReDistrGrp, MapPLGrp, DoPLGrp, PrgBlockGrp, IOGrp, RemAccessGrp, UserDebGrp, StatistGrp, SystemGrp }

  1. Характеристика собственного полезного времени выполнения программы (без учёта обращений к функциям системы поддержки):

OUPT = IM[UserGrp][UserGrp].ProductTime

  1. Характеристика собственного потерянного времени выполнения программы (без учёта обращений к функциям системы поддержки):

OULT = IM[UserGrp][UserGrp].LostTime

  1. Характеристика полезного времени выполнения функций группы i, вызванных непосредственно программой пользователя (i # MsgPasGrp):

  1. Характеристика полезного времени выполнения функций системы поддержки, вызванных непосредственно программой пользователя:

  1. Характеристика потерянного времени выполнения функций группы i, вызванных непосредственно программой пользователя:

  1. Характеристика потерянного времени выполнения функций системы поддержки, вызванных непосредственно программой пользователя:

  1. Характеристика полезного времени выполнения программы пользователя:

UPT = OUPT + SPT

  1. Характеристика потерянного времени выполнения программы пользователя:

ULT = OULT + SLT

  1. Характеристика числа обращений к функциям системы поддержки, осуществлённых непосредственно программой пользователя:

  1. Характеристика времени реальной рассинхронизации при выполнении функций группы i, вызванных непосредственно программой пользователя:

RMTi = IM[i][MsgPasGrp].ProductTime

  1. Характеристика времени реальной рассинхронизации при выполнении программы пользователя:

  1. Характеристика собственного полезного времени выполнения функций группы j (без учёта обращений к функциям других групп) (j # MsgPasGrp):

  1. Характеристика собственного потерянного времени выполнения функций группы j (без учёта обращений к функциям других групп):

11.1.4 Вспомогательная матрица характеристик задачи пользователя

В целях контроля и отладки накопления и визуализации информации для анализа производительности в системе поддержки предусмотрена вспомогательная матрица характеристик выполнения программы пользователя:

s_GRPTIMES TaskInter[StatGrpCount][StatGrpCount]; .

Матрица TaskInter соответствует начальному интервалу выполнения программы пользователя. Накопление в ней информации осуществляется независимо от функционирования основного механизма сбора статистики. Характеристики выполнения программы, содержащиеся в элементах матрицы TaskInter, не подвергаются коррекции числом процессоров, выполняющих текущую ветвь.

При завершении выполнения программы заданная часть матрицы TaskInter выводится в поток информационных сообщений системы поддержки.

Управление накоплением информации в матрице TaskInter и её (информации) выводом осуществляется с помощью параметров TimeExpendPrint и StatGrpName файлов statist.* . При нулевом значении параметра TimeExpendPrint накопление информации в матрице TaskInter не производится. Ненулевое значение этого параметра задаёт режим накопления и определяет состав и форму выводимой информации:

1 - краткий режим вывода; выводятся: - общее время функционирования системы поддержки (System Time);
- время решения задачи (Task Time) и включённое в него время выполнения функций системы поддержки (Function Time) (без разделения на полезное и потерянное времена);
2 - в дополнение к краткому режиму выводятся характеристики столбца,
являющегося суммой столбцов матрицы
TaskInter (структуры s_GRPTIMES при суммировании элементов матрицы TaskInter складываются поэлементно);
3 - в дополнение к краткому режиму выводятся характеристики строки, являющейся суммой строк матрицы TaskInter;
4 - в дополнение к краткому режиму выводятся характеристики столбца, имя-номер которого задан значением параметра StatGrpName;
5 - в дополнение к краткому режиму выводятся характеристики строки, имя-номер ко торой задан значением параметра StatGrpName.

11.1.5 Обеспечение накопления характеристик DVM-операций ввода/вывода, реализованных в Фортране

Стандартно при вызове программой пользователя любой функции системы поддержки номер группы этой функции запоминается в глобальной переменной

int CurrOper; .

При выполнении вызванной функции и при завершении её выполнения значение переменной CurrOper используется как номер строки матрицы IM для сохранения в ней измеренных характеристик.

Выполнение DVM-операций ввода/вывода в Фортране сопровождается обращениями к функциям системы поддержки, не являющихся функциями ввода/вывода. Поэтому для правильного накопления характеристик Фортран-операций ввода/вывода необходимо:

Для выполнения перечисленных требований система поддержки предоставляет функции

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 производится только при выполнении следующих общих для всех обрабатываемых функций условий:

Перед обращением к функции 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).

Lib-DVM - детальный дизайн (оглавление) Часть 1(1-7) Часть 2 (8-11) Часть 3 (12) (Сообщения об ошибках)