Пример использования отладчика

 

Возьмем в качестве примера программу решения СЛАУ методом Гаусса (см. приложение).

Шаг 1. (создание проекта)

Любой проект, хоть и не большой, желательно чтобы находился в своей директории. Поэтому создаем какую-нибудь директорию, например, gauss и помещаем туда файл M_Gaus1.c. Если в проекте есть несколько файлов, директорий, все они должны быть собраны в одной папке

Шаг 2. (обработка кода)

Если это необходимо, в код вносятся инструкции на языке отладки для более детального анализа программы. Мы выполним только разметку кода, указав где делается прямой и обратный ход в методе Гаусса. Во взятом примере это уже сделано. Стоит отметить, что все инструкции языка отладки являются комментариями языка программирования и игнорируются компилятором.

Шаг 3. (обработка кода)

После того, как сделаны все указания по сбору отладочной информации необходимо запустить препроцессор с тем, чтобы произвести замену инструкций языка отладки на инструкции языка программирования и заменить вызовы MPI, сбор информации о которых производится. Для этого необходимо выполнить команду

./gepard_pars.pl _путь_до_проекта_/gauss

В результате исполнения этой команды появится директория gaus.gprd, в которой помимо файлов проекта появится header файл и файл базы данных проекта (.fdb).

Шаг 4. (Компиляция)

Компиляция программы выполняется обычным образом. На этапе линковки программы необходимо подключить библиотеку mon.a В нашем случае компиляция может быть выполнена командой

mpicc -o M_Gaus1 M_Gaus1.c _путь_до_библиотеки/mon.a
Шаг 5. (Исполнение программы)

Исполнение полученного в результате компиляции файла производится обычным способом:

mpirun -np 4 M_Gaus1

В данном случае запуск должен производиться строго на 4 виртуальных процессорах (особенность программы. Не отладчика!)

Шаг 6. (Анализ)

После исполнения программы в директории, откуда производился запуск, появится 4 файла с отладочной информацией, по одному на каждый виртуальный процессор. Имя файла строится по правилу: _имя программы_.grd._ранк_процесса_. В нашем случае это файлы: M_Gaus1.grd.0, M_Gaus1.grd.1, M_Gaus1.grd.2, M_Gaus1.grd.3. Для анализа необходимо объединить все эти файлы в один. Например, командой

cat M_Gaus1.grd.* > M_Gaus1.grd

после чего можно используя программу gprd_ta производить анализ полученных данных. Для того, чтобы программа анализа могла представлять более полную информацию, необходимо файл базы данных проекта (.fdb) переименовать в M_Gaus1.fdb и поместить его в директорию с файлом с отладочной информацией.

Вывод списка секций

		arom> gprd_ta -b M_Gaus1.grd
		Valide section(s):
		0       GPRD_MAIN_SECT
		1       right_move
		2       back_move
		
Секция GPRD_MAIN_SECT присутствует всегда. Вся программа

Вывод списка функций в секции right_move

		arom> gprd_ta -f -B 1 M_Gaus1.grd
		Function stats. Section "right_move"
		Process rank 0
		        30 MPI_Send
		Process rank 1
		        10 MPI_Recv
		        20 MPI_Send
		Process rank 2
		        20 MPI_Recv
		        10 MPI_Send
		Process rank 3
		        30 MPI_Recv
		

Вывод статистики по приему-передачи сообщений в секции back_move

		arom> gprd_ta -s -B 1 M_Gaus1.grd
		Send/Reciev table. "right_move" section
		    |     0   |     1   |     2   |     3   |
		----+---------+---------+---------+---------+
		   0|   0/   0|  10/   0|  10/   0|  10/   0|
		   1|   0/  10|   0/   0|  10/   0|  10/   0|
		   2|   0/  10|   0/  10|   0/   0|  10/   0|
		   3|   0/  10|   0/  10|   0/  10|   0/   0|