Perguntas sobre o executor MPI_Scatter e sua alocação de buffer de envio

Meu primeiro pensamento foiMPI_Scatter e a alocação de buffer de envio devem ser usadas emif(proc_id == 0), porque os dados devem ser dispersos apenas uma vez e cada processo precisa apenas de uma parte dos dados no buffer de envio, no entanto, não funcionou corretament

Parece que a alocação de buffer de envio eMPI_Scatter deve ser executado por todos os processos antes que o aplicativo dê cert

Então eu perambulo, qual é a filosofia para a existência deMPI_Scatter já que todos os processos têm acesso ao buffer de envi

ualquer ajuda será grat

Editar Código que escrevi assim:

if (proc_id == 0) {
    int * data = (int *)malloc(size*sizeof(int) * proc_size * recv_size);
    for (int i = 0; i < proc_size * recv_size; i++) data[i] = i;

    ierr = MPI_Scatter(&(data[0]), recv_size, MPI_INT, &recievedata, recv_size, MPI_INT, 0, MPI_COMM_WORLD);
}

Eu pensei que isso é suficiente para os processos raiz espalharem dados, o que os outros processos precisam fazer é apenas receber dados. Então eu coloqueiMPI_Scatter, juntamente com a definição e alocação do buffer de envio, noif(proc_id == 0) declaração. Nenhum erro / aviso de compilação / tempo de execução, mas o buffer de recebimento de outros processos não recebeu sua parte correspondente dos dado

questionAnswers(1)

yourAnswerToTheQuestion