Вычислительный центр им. А.А. Дородницына РАН    

Раздел виртуального курса
Параллельное программирование в интерфейсе MPI


Вопросы по теме "Управление группами и коммуникаторами в MPI"

  1. Какое из утверждений верно?

    Одна группа может иметь много коммуникаторов?
    Один коммуникатор может иметь много групп?

  2. Где эта программа зависает, и почему?
          include "mpi.h"
    
          main(int argc, char **argv)
          {  
             int irank,ntask,i;
             int igrp,newgrp,newcomm;
             int list[32];
       
             MPI_Init(&argc, &argv);
             MPI_Comm_size(MPI_COMM_WORLD,&ntask);
             MPI_Comm_rank(MPI_COMM_WORLD,&irank);
    
             if(irank==0)
             {
                //do work associated with master task
             }
             else
             {
                //create group for workers
                for(i=1;i< ntask;i++)
                {
                   list[i-1]=i;
                }
                MPI_Comm_group(MPI_COMM_WORLD,&igrp);
                MPI_Group_incl(igrp,ntask-1,list,&newgrp);
                MPI_Comm_create(MPI_COMM_WORLD,newgrp,&newcomm);
                //do work associated with workers
             }
             MPI_Finalize();
          }
    

    При вызове MPI_Comm_group; все задачи должны вызвать эту функцию
    При вызове MPI_Group_incl; все задачи должны вызвать эту функцию
    При вызове MPI_Comm_create; все задачи должны вызвать эту функцию

  3. Следующий фрагмент кода выполняется на 5 задачах. Сколько коммуникаторов создано вызовом MPI_Comm_split?
      MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    
      if (rank < 3) color = 0;
      else color = rank;
      key = -1 * rank;
    
      MPI_Comm_split (MPI_COMM_WORLD, color, key, &new_comm);
    

    1
    2
    3
    4

  4. Для того же фрагмента кода, что и в предыдущем вопросе ответьте на следующий вопрос: Каков ранг в новом коммуникаторе, new_comm, у задачи с рангом 0 в MPI_COMM_WORLD?

    0
    2
    3
    4


    ФИО: