Исследование эффективности параллельной программы с целью выявления и устранения "узких мест", а, в конечном счете, с целью уменьшения времени выполнения программы, называется профилированием параллельной программы.
Профиль параллельной программы – это последовательность событий при выполнении программы с указанием того, сколько времени требует каждая стадия вычислений и каждая коммуникационная операция. Основное назначение профилировщика параллельной программы состоит в сохранение последовательности событий и представление информации о событиях в удобном для пользователя виде. Профилировщики организуют хранение информации о событиях и привязанных к ним временных метках в специальных файлах журнала.
Для стандарта MPI создана библиотека профилирования MPE (Multi-Processing Environment). MPE обеспечивает разные способы генерирования файлов профиля параллельной программы. Эти файлы могут быть визуализированы одним из графических инструментальных средств, распространяемых вместе с MPE. Заметим, что библиотека MPE вложена в коммуникационную библиотеку MPICH.
В MPE в виде трех различных библиотек оформлены следующие функции:
Библиотека для определения времени выполнения процедур библиотеки MPI.
Данная библиотека не требующие явной модификации кода программы. Регистрация осуществляется путем замещения вызовов функций библиотеки MPI на соответствующие профилирующие функции. Профилировочная версия каждой процедуры MPI вызывает функцию PMPI_Wtime (которая возвращает текущее время) перед и после каждого вызова соответствующей MPI-процедуры. Эти времена записываются для каждого из процессов в отдельный файл. Эти файлы можно использовать для создания отчета по всему приложению или по отдельным процессам.
Библиотека для создания файла журнала и его визуализации.
Данная библиотека включает в себя, во-первых, функции автоматического профилирования (автоматической регистрации событий). Во время выполнения программы при каждом вызове MPI-процедуры происходят автоматические обращения к подпрограммы MPI_Log_event, чтобы записать в память информацию об этом событии. Затем информация из памяти с помощью функции MPI_Finalize собирается и записывается в файл. Во время вычислений с помощью вызова MPI_Pcontrol (0) можно выключить, а с помощью вызова MPI_Pcontrol (1) включить регистрацию (по умолчанию регистрация включена).
Во-вторых, данная библиотека позволяет вставлять в пользовательскую программу вызовы следующих регистрирующих подпрограмм MPE для регистрации состояний, определенных пользователем:
MPE_Log_get_event_number();
MPE_Describe_state();
MPE_Describe_event();
MPE_Log_event().
Подпрограмма MPE_Log_get_event_number используется для того, чтобы получить уникальный номер события из системы MPE.
Полагается, что события не имеют продолжительности. Чтобы измерить продолжительность некоторого состояния программы, необходимо определить событие, интерпретируемое как начало состояния, и событие, интерпретируемое как окончание состояния. Состояние описывается процедурой MPE_Describe_state, которая принимает события начала и окончания этого состояния. Для увеличения наглядности процедура MPE_Describe_state также добавляет название события и цвет, которым состояние будет обозначено при визуализации.
Соответствующая процедура MPE_Describe_event обеспечивает описание типа события.
Процедуры MPE_Describe_state и MPE_Describe_event вызываются только в главном процессе.
Процедура MPE_Log_event вызывается в каждом процессе для регистрации сообщения, указанного в процедурах MPE_Describe_state, MPE_Describe_event.
Заметим, что профилирование увеличивает время исполнения программы и искажает ее профиль. Для повышения точности измерений важно, чтобы регистрация события была быстрой операцией. Процедура MPE_Log_event сохраняет малое количество информации в памяти и поэтому требует минимального времени для выполнения.
Визуализация файла журнала может быть осуществлен при помощи разнообразных программных средств. Например, в MPICH для этой цели существует инструмент, который называется UpShot. Состояния процессов в UpShot показаны с помощью параллельных осей времени для каждого процесса. Окно внизу экрана показывает гистограмму продолжительностей процессов.
Библиотека для анимации процесса работы программы в реальном времени.
Графическая библиотека MPE дает возможность просто осуществить анимацию процессов передачи сообщений и их интенсивность в реальном времени.