MPI_Gather 2D array

N é 4, então éN_glob. Acontece que é do mesmo tamanho.p é 4.

Aqui está uma pequena parte do código:

float **global_grid;
float **gridPtr; 
lengthSubN = N/pSqrt;
subN = lengthSubN + 2;
grid = allocate2D(grid, subN, subN);
..
MPI_Type_contiguous(lengthSubN, MPI_FLOAT, &rowType);
MPI_Type_commit(&rowType);
..
gridPtr = grid;
..
MPI_Barrier(MPI_COMM_WORLD);
if(id == 0) {
    global_grid = allocate2D(global_grid, N_glob, N_glob);
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Gather(&(gridPtr[0][0]), 1, rowType,
           &(global_grid[0][0]), 1, rowType, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(id == 0)
    print(global_grid, N_glob, N_glob);

onde eu tenhop submatrizes e estou tentando reuni-los todos no processo raiz, onde a matriz global espera por eles. No entanto, apenas irá lançar um erro, alguma idéia?

Estou recebendo uma falha seg:

MAU TERMINAÇÃO DE UM DE SEUS PROCESSOS DE APLICAÇÃO PID 29058 EM EXECUÇÃO NO linux16 CÓDIGO DE SAÍDA: 139 SUA APLICAÇÃO TERMINADA COM A CORDA DE SAÍDA: Falha na segmentação (sinal 11)

EDITAR:

Eu encontrei esta perguntaFalha na segmentação MPI_Gather e eu inicializeiglobal_grid para NULL, mas sem sorte. No entanto, se eu fizer:

//if(id == 0) {
    global_grid = allocate2D(global_grid, N_glob, N_glob);
//}

então tudo funciona. Mas a matriz global não deveria viver apenas no processo raiz?

EDIT_2:

Se eu fizer:

if(id == 0) {
    global_grid = allocate2D(global_grid, N_glob, N_glob);
} else {
    global_grid = NULL;
}

então ele trava aqui:

MPI_Gather(&gridPtr[0][0], 1, rowType,
                global_grid[0], 1, rowType, 0, MPI_COMM_WORLD);

questionAnswers(1)

yourAnswerToTheQuestion