Программа пользователя должна иметь возможность управлять профилированием во время своего исполнения. Обычно это необходимо для достижения (по крайней мере) следующих целей:
Эти требования удовлетворяются при использовании функции MPI_PCONTROL, синтаксис которой представлен ниже.
MPI_PCONTROL(level, ...)
IN | level | уровень профилирования |
int MPI_Pcontrol(const int level, ...)
MPI_PCONTROL(LEVEL)
INTEGER LEVEL, ...
void Pcontrol(const int level, ...)
MPI библиотеки непосредственно не используют эту подпрограмму, они просто возвращаются немедленно к коду пользователя. Однако возможность обращения к этой процедуре позволяет пользователю явно вызвать блок профилирования.
Поскольку MPI не контролирует реализацию профилирующего кода, нельзя точно определить семантику, которая будет обеспечивать вызовы MPI_PCONTROL. Эта неопределенность распространяется на число аргументов функции и на их тип.
Однако, чтобы обеспечить некоторый уровень мобильности кода пользователя относительно различных библиотек профилирования, необходимо, чтобы определенные значения уровня имели следующий смысл:
Также требуется, чтобы после выполнения MPI_INIT по умолчанию было установлено профилирование (как если бы была выполнена операция MPI_PCONTROL с аргументом 1). Это позволяет пользователю связаться с библиотекой профилирования и получить результат профилирования без модификации их исходного текста.