В дополнение к использованию предопределенных библиотек регистрации MPE
для регистрации всех вызовов MPI, вызовы регистрации MPE могут встраиваться в
пользовательские программы MPI для определения и регистрации состояний. Эти
состояния называются состояниями, определяемыми пользователем. Состояния
могут вкладываться друг в друга, позволяя определять состояния, описывающие
процедуру пользователя, содержащую несколько вызовов MPI, и показывать как
состояние, определенное пользователем, так и содержащиеся в нем операции MPI.
Процедура MPE_Log_get_event_number может использоваться для назначения
уникальных номеров событий5 из системы MPE. Процедуры
MPE_Describe_state и MPE_Log_event могут затем использоваться
для описания пользовательских состояний. Следующий пример иллюстрирует
использование этих процедур.
int eventID_begin, eventID_end;
...
eventID_begin = MPE_Log_get_event_number ();
eventID_end = MPE_Log_get_event_number ();
...
MPE_Describe_state ( eventID_begin, eventID_end, ``Amult'', ``bluegreen''
);
...
MyAmult ( Matrix m, Vector v )
/* Записывает стартовое событие вместе с размером матрицы */
MPE_Log_event ( eventID_begin, m->n, (char *)0 );
... Код Amult, включая вызовы MPI ...
MPE_Log_event ( eventID_end, 0, (char *)0 );
Log-файл, генерируемый этим кодом, будет отмечать процедуры MPI внутри процедуры
MyAmult зелено-голубым прямоугольником. Цвет, использованный в этом коде выбран
из файла rgb.txt, предоставленного инсталляцией сервера X, т.е. `rgb.txt'
находится в каталоге `/usr/X11R6/lib/X11' в Linux.
Если бибилотека регистрации MPE `liblmpe.a' не связаны с программой
пользователя, необходимо использовать перед и после всех вызовов MPE процедуры
MPE_Init_log и MPE_Finish_log. Программы-примеры
`cpilog.c' и `fpi.f' для иллюстрации использования этих процедур MPE
находятся в каталоге исходных кодов MPE `contrib/test' или в установленном
каталоге `share/examples'.