2017-03-18 13 views
0

現在、C++でMPIライブラリを使用している間に共有メモリを偽装しようとしています。私はサイズn + 1の配列Aを持っています。ここでnはユーザーから与えられ、プロセッサ0はその配列の整数を生成します。私はプロセッサ0が他のすべてのプロセスで作成した配列を共有する必要があります。その結果、私は他の人にBcastします...しかし、私は各プロセッサが自分のアレイをプリントアウトさせるために行くと、ゼロではないプロセッサから信号11(セグメンテーションフォルト)が得られます。私がそのセクションをコメントアウトすると、問題なく実行されます。私は私の配列が送信され、すべてのプロセッサに正しく格納されていることを確認することができたいと思います。整数の配列をMPIで共有する(C++)

int *A=new int[n+1]; 
if(my_rank==0) 
{ 
    srand(1251); 
    A[0]=0; 
    for(int i=1; i<=n; i++){ 
    A[i]=rand()%100;} 
    MPI_Bcast(&A, n+1, MPI_INT, 0, MPI_COMM_WORLD); 
} 
else { 

    MPI_Bcast(&A, n+1, MPI_INT, 0, MPI_COMM_WORLD); 

    } 

cout<<"My rank is "<<my_rank<<" and this is my array:"<<endl; 
for (int i=0; i<=n; i++) 
{cout<<A[i]<<" "<<endl;} 
cout<<endl; 
+0

また、各プロセスはn –

答えて

1

あなたは間違ってMPI_Bcastにアドレスとして&Aを渡しています。これはポインタのアドレスであり、MPIはデータのアドレス、すなわちAを必要とする。

MPI_Bcast(A, n+1, MPI_INT, 0, MPI_COMM_WORLD); 

移動if/elseブロックの外のコード。これは、すべてのランクに対して同じ呼び出しです。

+0

の値を知っており、AとAを変更しました。しかし、ブロッキング関数呼び出しであるため、0以外のプロジェクトのBcastコールは必要ありませんか? –

+0

**すべての**プロセスで 'MPI_Bcast'が呼び出され、パラメータはすべて同じなので、コードの無条件部分に入れることができます。 – Zulan

関連する問題