1. Переставьте вызовы функций в следующем фрагменте таким образом, чтобы заведомо не возникла тупиковая ситуация.
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank==0){
MPI_Send(a, n, MPI_DOUBLE, 1, 1, MPI_COMM_WORLD);
MPI_Recv(a, n, MPI_DOUBLE, 1, 1, MPI_COMM_WORLD, &status);
}
if(rank==1){
MPI_Send(a, n, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD);
MPI_Recv(a, n, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD, &status);
}
2. Смоделируйте вызов функции
MPI_Send(&a, 1, MPI_INT, rank+1, 5, MPI_COMM_WORLD);
при помощи неблокирующей функции MPI_Isend.
3. Напишите на месте пропуска, обозначенного «???», корректный вариант вызова функции, чтобы осуществить рассылку от процесса c номером 0 всем процессам коммуникатора.
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank==0) MPI_Bcast (buf, 1, MPI_FLOAT, 0, MPI_COMM_WORLD);
else{
???
}
4. Пусть в программе выполняется следующий фрагмент:
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_split(MPI_COMM_WORLD, rank, rank, &comm);
А) Сколько новых коммуникаторов будет создано?
Б) Сколько процессов будет входить в каждый из создаваемых коммуникаторов?
5. Пусть в программе выполняется следующий фрагмент:
blocklens[0]=2;
blocklens[1]=4;
types[0]=MPI_INT;
types[1]=MPI_FLOAT;
displs[0]=0;
displs[1]=2*sizeof(int);
MPI_Type_create_struct(2, blocklens, displs, types, &newtype);
Сколько байт данных будет пересылаться при пересылке 5 элементов типа newtype?
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |