Простые профилирующие оболочки для mpich распространяются как код определения
оболочки. Этот код пропускается через утилиту wrappergen для генерации
кода С (см. разд. 5.7). Любое количество определений оболочки можно
использовать совместно, так что возможен любой уровень вложенности профилирующих
обрамлений при использовании wrappergen.
Несколько примеров определений обрамления представлены в mpich:
timing
Использует MPI_Wtime () для определения общего количества
вызовов каждой функции MPI, и времени, затраченного на эту функцию. Она
просто проверяет таймер перед и после вызова функции. Она не отнимает время,
потраченное на вызов других функций.
logging
Создает log-файл для всех
вызовов функций pt2pt.
vismess
Создает окно X, которое выдает простую
визуализацию всех прошедших сообщений.
allprof
Все вышеперечисленное. Этот пример показывает, как можно
комбинировать профилирующие библиотеки.
Замечание: Эти обрамления не используют никаких специальных возможностей mpich,
кроме графики и регистрации MPE в `vismess' и `logging'
соответственно. Они должны работать с любой реализацией MPI.
Вы можете встраивать эти обрамления вручную в Ваше приложение, что потребует
трех этапов в построении Вашего приложения:
Создание исходного кода для требуемого обрамления с помощью
wrappergen. Это разовая задача.
Компиляция кода обрамления. Убедитесь в наличии необходимых
параметров строки компиляции. `vismess' и `logging' требуют
библиотеку MPE (`-lmpe'), а определение оболочки `vismess' требует
наличия DMPE_GRAPHICS во флагах компилятора С.
Компоновка скомпилированного кода оболочки, профилирующей версии
библиотеки mpi, и любых других необходимых библиотек (`vismess' требует
X) с Вашим приложением. Нужной командой будет:
$ (CLINKER) <объектные файлы приложения...>
<объектный код обрамления>
<другие необходимые библиотеки (-lmpe)>
<профилирующая бибилотека mpi (-lpmpich)>
<стандартная библиотека mpi (-lmpi)>
Чтобы упростить ее, были созданы несколько примеров разделов make-файлов в
каталоге
`mpe/profiling/lib':