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