MPI Scatter несколько раз от root - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над проектом с MPI, но столкнулся с проблемой при попытке написать программу.

В настоящее время у меня есть следующее

    int rank, numRanks;
    MPI_Init(NULL, NULL);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &numRanks);

    if(rank == 0){
       //do some initialisation
    }

    //logic begins
    if(rank == 0){
        for(i=0 to 10){
           //some basic checks
           MPI_Scatter() /* scattering an array to all processes */
           MPI_Bcast() /* sending a value to all processes */

           //some heavy computations on the part of the array
           MPI_Barrier()
           MPI_Reduce() /* reducing the output of all processes' heavy computation to a single number */
           printf(valueFromReduce)
    }
    else{
        //some heavy computations on the part of the array (same code as the one in rank 0)
        MPI_Barrier()
    }

Идея кода заключается в следующие:

  1. инициализировать
  2. l oop несколько раз

    2.1. root процесс выполняет некоторые базовые c проверки / вычисления

    2.2. root разбивает массив на все процессы для ускорения интенсивных вычислений

    2.3. все процессы выполняют вычисления для своей части массива

    2.4. выходы преобразуются в процесс ранга 0 после каждого вычисления и печатаются

В настоящее время проблема кода связана с рассеянием и трансляцией данных - дочерние процессы начинают выполняться до широковещательной передачи / разброс выполняется.

Можно ли разбрасывать / транслировать данные с ранга 0 на все ранги?

...