Определено два уровня сбора отладочной информации. По-умолчанию собирается информация только об операциях коммуникаций между процессами (имя MPI функции, ранк процесса источника/приемника сообщения, время исполнения и позиция в коде). Если этого не достаточно для анализа поведения программы, пользователь может указать дополнительную информацию для сбора. Указания делаются с помощью языка отладки.
Языка отладки состоит из инструкций, которые вставляются в исходный код программы. Каждая инструкция является комментарием языка программирования (в данном случае С) и имеет следующий вид:
Подобный подход позволяет не переписывать код программы целиком. Пользователь лишь расставляет комментарии, понятные только препроцессору. Так, например, чтобы посчитать количества итераций цикла, пользователь должен поместить следующую инструкцию в начало тела цикла:
Ожидаемая система межпроцессного взаимодействия также может быть описана с тем, чтобы отладчик произвел ее сравнение с тем, что получилось при исполнении программы. Система коммуникаций задает отношение на множестве процессов. Отношение процессов задается множеством пар вида (ранк источника, ранк приемника). Для описания отношений в языке отладки предусмотрено ряд инструкций.
Препроцессор распознает инструкции языка отладки и заменяет их соответствующими выражениями языка программирования. Также заменяются функции MPI функциями-обертками. Каждая функция-обертка имеет дополнительный параметр - позиция функции в исходном коде программы.
На текущий момент собирается информация и производится анализ только следующих функций MPI
|
MPI_Init MPI_Finalize MPI_Send MPI_Recv MPI_Bcast MPI_Reduce |
MPI_Isend MPI_Irecv MPI_Wait MPI_Scatter MPI_Scatterv |
MPI_Gather MPI_Gatherv MPI_Comm_dup MPI_Cart_create MPI_Comm_split MPI_Comm_free |
Установление размера буфера MON для хранения отладочной информации перед запиью в файл. Размер задается в килобайтах. Размер по умолчанию - 32КБ. Изменения производятся только до вызова функции MPI_Init
Установление интервала сбора данных о загрузки операционной системы (load avarage). Интервал задается в секундах. Минимальный интервал равен 1 секунде. Значение по умолчунию - 5 секунд.
Установление интервала "бездействия" - максимального времени, в течении которого должна быть выполнена хотя бы одна операция коммуникации. Интервал задается в секундах. Минимальный интервал равен 1 секунде. Значение по умолчунию - 5 секунд.
Установление интервала ожидания завершения операции коммуникации - максимальное время исполнения функции по приему, передачи данных, синхронизации. Полезно для отслеживания "мертвых" блокировок. Интервал задается в секундах. Минимальный интервал равен 1 секунде. Значение по умолчунию - 5 секунд.
Фиксирование факта достижения какого-либо участка кода
Подсчет количества достежений какого-либо участка кода
Разметка кода производится инструкцией

Инструкция SCOMMSET устанавливает ограничения на пересылку сообщений через коммуникатор. Инструкция SCOMMRST эти ограничения снимает. Считается, что если ограничения не заданы, то возможны пересылки сообщений любому процессу и прием от любого процесса используя заданый коммуникатор. В противном случае допустимы только пересылки, которые описаны с помощью инструкции SCOMMSET.
Если при задании/сбросе проверки системы коммуникаций не задан коммуникатор COMM, операция применяется к коммуникатору MPI_COMM_WORLD.