2014-12-06 27 views
0

在我的程序中我使用4個過程,通過i值填充大小爲i + 1的數組,但是當我使用Gatherv函數顯示RECEIVED表時ca不給我正確的結果:[0] [1] [ - 858993460] [2] [2] [ - 858993460] [3] [3] [3] [ - 858993460]Gatherv函數

#include "mpi.h" 
#include <stdio.h> 
int main(int argc, char *argv[]) 
{ 
int buffer[10]; 
int rank, size, i,receive_counts[4] = { 1, 2, 3,4 },receive_displacements[4] = { 0, 1, 3, 6 }; 
MPI_Init(&argc, &argv); 
MPI_Comm_size(MPI_COMM_WORLD, &size); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
if (size != 4) 
{ 
    if (rank == 0) 
    { 
     printf("Please run with 4 processes\n"); fflush(stdout); 
    } 
    MPI_Finalize(); 
    return 0; 
} 
for (i = 0; i<=rank; i++) 
{ 
    buffer[i] = rank; 
} 
printf("\n"); 
MPI_Gatherv(buffer, rank, MPI_INT, buffer, receive_counts, receive_displacements, MPI_INT, 0, MPI_COMM_WORLD); 
if (rank == 0) 
{ 
    for (i = 0; i<10; i++) 
    { 
     printf("[%d]", buffer[i]); 
    } 
    printf("\n"); 
    fflush(stdout); 
} 
MPI_Finalize(); 
return 0; 
} 

回答

0

看來你使用該example作爲起點。

由於rank+1元件從每個處理的代替rank發送的MPI_Gatherv()第二個參數應作相應的修改:

MPI_Gatherv(buffer, rank+1, MPI_INT, buffer, receive_counts, receive_displacements, MPI_INT, 0, MPI_COMM_WORLD);