Средства разработки приложений



              

Синхронная модель команды "шаг"


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

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

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

Пример 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. Тогда для последовательности шагов параллельной программы для различных процессов текущими будут следующие строки:




Содержание  Назад  Вперед