Рефераты. Команда "шаг" в параллельных отладчиках

Команда "шаг" в параллельных отладчиках

Команда "шаг" в параллельных отладчиках

А.Я. Калинов, К.А. Карганов, К.В. Хоренко

Аннотация.

В статье рассматривается новая схема команд перемещения в параллельных отладчиках на примере команды "шаг". Основное отличие предложенной схемы от существующих заключается в том, что отладчик на основе модели параллельной программы анализирует момент завершения "шага" программы, чем приближает отладку параллельной программы к отладке последовательной программы. Рассмотрены проблемы, возникающие при реализации данной схемы для отладчика MPI-программ, и описана ее реализация в отладчике mpC-программ.

1. Введение

Одной из важнейших возможностей, предоставляемых отладчиком, является возможность управления выполнением программы. Семантика команд управ-ления выполнением в последовательных отладчиках (когда отлаживается один процесс с одним потоком управления) достаточно ясна. Например, семантика команды пошагового выполнения последовательной программы заключается в следующем - выполнить операторы текущей строки и прервать выполнение отлаживаемой программы. Если операторы текущей строки не выполнены, то пользователь анализирует причину (например, ожидание взаимодействия с внешним миром, длинный счет и т.д.) и предпринимает или не предпринимает какие-либо действия. Причины невыполнения шага последовательной программы назовем "последовательными". Естественное расширение этой семантики на случай параллельного отладчика (когда отлаживается несколько потоков управления, возможно, в нескольких процессах) - выполнить операторы текущих строк для выделенных потоков управления и прервать их выполнение. Однако, в случае параллельного отладчика, некоторые потоки могут не выполнить шаг не только по "последовательным", но и по "параллельным" причинам, связанным с взаимодействием между потоками/процессами параллельной программы.

Большинство существующих параллельных отладчиков являются много-целевыми, не ориентированными на поддержку какого-либо конкретного параллельного языка программирования или коммуникационного пакета. В них применяется комбинация двух основных схем реализации команды "шаг":

синхронная - команда выдается для всех процессов группы, ожидается завершение шага для всех процессов группы, имеется возможность принудительного прерывания - основная схема в Mantis [1,2];

асинхронная - команда выдается для всех процессов группы завершивших предыдущий шаг на данный момент, управление в отладчике передается пользователю без ожидания окончания выполнения команды - основная схема в TotalView [3].

При этом ответственность за анализ и обработку всех "параллельных" причин незавершения шага возлагается на пользователя.

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

В данной статье обсуждается возможность реализации синхронной модели выполнения команды "шаг", которая отличается от традиционной тем, что:

последовательная команда "шаг" выполняется только теми процессами, которые завершили выполнение предыдущей команды перемещения;

"тривиальные параллельные" причины незавершения шага обрабатываются отладчиком.

Рассматриваются проблемы, возникающие при реализации такой модели для отладчика MPI-программ, и описывается ее реализация для параллельного отладчика для языка mpC [4,5], который является составной частью интегри-рованной системы разработки и выполнения mpC программ mpC Workshop. Статья организована следующим образом: в первом параграфе дается определение параллельной команды "шаг", которое демонстрируется на примере простой MPI-программы. Во втором параграфе анализируется возможность учета "тривиальных причин" незавершения шага для MPI-программ. Третий параграф дает введение в язык параллельного програм-мирования mpC. В четвёртом параграфе описывается mpC-отладчик.

2. Синхронная модель команды "шаг" с обработкой "тривиальных причин" незавершения шага на примере MPI-программ

Введём определение команды синхронной команды "параллельного шага". Примем, что для выполнения команды "шаг параллельной программы" группой процессов каждому процессу из группы, завершившему предыдущие команды перемещения, необходимо выполнить действия, определяемые командой "шаг" последовательного отладчика ("последовательной" команды "шаг"). Шаг параллельной программы будем считать завершённым, если каждый процесс отлаживаемой программы:

а) выполнил действия, предписанные последней данной ему "последо-вательной" командой перемещения (возможно, не командой "шаг") или б) остановился и не может продолжить выполнение без дополнительных действий со стороны пользователя по отношению к другим процессам отлажи-ваемой программы.

Назовем "тривиальной параллельной" причиной незавершения параллельной команды шаг процессом ожидание синхронизации с другими процессами, про которую известно, что она не произойдет на данном шаге параллельной программы.

Пример 1. Рассмотрим пошаговое выполнение следующей MPI-программы:

/* 0*/ #include "mpi.h"

/* 1*/ int main(int argc, char **argv) {

/* 2*/ int rank, i;

/* 3*/ MPI_Init(&argc, &argv);

/* 4*/ MPI_Comm_rank(MPI_COMM_WORLD, &rank);

/* 5*/ if (rank == 1) {

/* 6*/ MPI_Status stat;

/* 7*/ MPI_Recv(&i,1,MPI_INT,0,0,MPI_COMM_WORLD,&stat);

/* 8*/ }

/* 9*/ if (rank == 0) {

/*10*/ i = 0;

/*11*/ MPI_Send(&i,1,MPI_INT,1,0,MPI_COMM_WORLD);

/*12*/ }

/*13*/ MPI_Finalize();

/*14*/ return 0;

/*15*/ }

Пусть отладчик является "умным", то есть обрабатывающим "тривиальные параллельные" причины незавершения шага и интерпретирует вычисление управляющего выражения условного оператора как самостоятельный шаг. Пусть, кроме того, команды выдаются для всех процессоров отлаживаемой программы, и текущей строкой для всех процессов является строка 3. Тогда для последовательности шагов параллельной программы для различных процессов текущими будут следующие строки:

Шаг




2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.