rtsDDr (1158447), страница 6
Текст из файла (страница 6)
Отметим, что события трассировки с номерами 1 и 2 могут быть, как и любые другие события, выключены, что дает альтернативу изъятию макровызовов MeasureStart и MeasureFinish из программы.
10Опрос глобального и локального размеров заданного измерения заданного объекта
| long GetObjectSize( | ObjectRef | ObjRef, |
Функция GetObjectSize возвращает размер объекта, заданного ссылкой ObjRef, по измерению Axis (глобальный размер или размер нераспределённого объекта).
Объектом может быть:
-
распределённый массив (тогда ссылка это первое слово его заголовка);
-
представление абстрактной машины;
-
многопроцессорная система;
-
параллельный цикл.
Размер измерения параллельного цикла равен
ceil( (LastIndex - InitIndex + 1)/Step ) , где:
| InitIndex | | начальное значение индексной переменной параллельного цикла для измерения Axis; |
| LastIndex | | конечное значение индексной переменной параллельного цикла для измерения Axis; |
| Step | | шаг изменения индексной переменной параллельного цикла для измерения Axis; |
| ceil | | функция нахождения наименьшего целого, не меньшего значения своего аргумента. |
При нулевом значении Axis возвращается размер всего объекта (произведение размеров всех измерений).
Если ObjRef не является ссылкой ни на один из вышеперечисленных объектов, то функция возвращает нулевое значение.
| long GetObjectLocSize( | ObjectRef | ObjRef, |
Функция 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 | CallCount; |
где:
| 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), время реальной рассинхронизации вычисляется на приёмной стороне следующим образом.
-
Синхронный обмен сообщениями.
Время реальной рассинхронизации полагается равным абсолютному значению разности между временем обращения принимающей стороны к функции rtl_Recv и временем обращения передающей стороны к функции rtl_Send.
-
Асинхронный обмен сообщениями.
Время реальной рассинхронизации равно разности между временем обращения передающей стороны к функции rtl_SendA и временем обращения приёмной стороны к функции rtl_RecvA. Если эта разность отрицательна, то время реальной рассинхронизации считается нулевым.
-
Обмен сообщениями в режиме "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 }
-
Характеристика собственного полезного времени выполнения программы (без учёта обращений к функциям системы поддержки):
OUPT = IM[UserGrp][UserGrp].ProductTime
-
Характеристика собственного потерянного времени выполнения программы (без учёта обращений к функциям системы поддержки):
OULT = IM[UserGrp][UserGrp].LostTime
-
Характеристика полезного времени выполнения функций группы i, вызванных непосредственно программой пользователя (i MsgPasGrp):
SPTi =
jGNS
jMsgPasGrpIM[i][j].ProductTime
-
Характеристика полезного времени выполнения функций системы поддержки, вызванных непосредственно программой пользователя:
SPT =
iGNS
iMsgPasGrpSPTi
-
Характеристика потерянного времени выполнения функций группы i, вызванных непосредственно программой пользователя:
SLTi =
jGNSIM[i][j].LostTime
-
Характеристика потерянного времени выполнения функций системы поддержки, вызванных непосредственно программой пользователя:
SLT =
iGNSSLTi
-
Характеристика полезного времени выполнения программы пользователя:
UPT = OUPT + SPT
-
Характеристика потерянного времени выполнения программы пользователя:
ULT = OULT + SLT
-
Характристика числа обращений к функциям системы поддержки, осуществлённых непосредственно программой пользователя:
jGNSIM[UserGrp][j].CallCount
-
Характеристика времени реальной рассинхронизации при выполнении функций группы i, вызванных непосредственно программой пользователя:
RMTi = IM[i][MsgPasGrp].ProductTime
-
Характеристика времени реальной рассинхронизации при выполнении программы пользователя:
RMT =
iGNSRMTi
-
Характеристика собственного полезного времени выполнения функций группы j (без учёта обращений к функциям других групп) (j MsgPasGrp):
OSPTj =
iGNSIM[i][j].ProductTime
-
Характеристика собственного потерянного времени выполнения функций группы j (без учёта обращений к функциям других групп):
| OSLTj = | | IM[i][j].LostTime |
11.1.4Вспомогательная матрица характеристик задачи пользователя
В целях контроля и отладки накопления и визуализации информации для анализа производительности в системе поддержки предусмотрена вспомогательная матрица характеристик выполнения программы пользователя:














