私はここで多くの同様のスレッドを見ましたが、私の問題は、私のプログラムが実際には異なる設定で実行されていることです。例えばMPIエラー:(セグメンテーションフォールト:11)
:私のマトリックスは、2つのコアの1024x1024
ある:エラー4 11
、8、16等が正常に動作します。
マトリックス2048x2048
:任意のコア設定について
:エラー11
私はこれがなぜ起こるか、各プロセスが計算する2048 /(総プロセス)X 2028行列を取っている理解していません。そしてそれは正しく働くはずです。
これは私が私の行列を宣言する方法です:
int temp[wp][hp];
のために受け取る:
rc = MPI_Recv(&temp[0][0], wp*hp, MPI_INT, i, tag, MPI_COMM_WORLD, &status);
して送信用:私はそれを得ることはありません
rc = MPI_Send(&temp[0][0], wp*hp, MPI_INT, 0, tag, MPI_COMM_WORLD);
、それがあるべきワーキング。ポインタが関係しているのではないかと思いますか?
CおよびC++は、 2つの異なる言語。 'wp'や' hp'が変数ならば、これは: 'int temp [wp] [hp];'は法的なC++ではありません。 – PaulMcKenzie
また、 '2048 * 2048 * sizeof(int)' - それが何であるか、配列がローカルであるかグローバルに宣言されているかを考慮してください。それがローカルの場合。あなたはスタックを吹き飛ばしているかもしれません。 – PaulMcKenzie
@PaulMcKenzieそれはCです、あなたは正しいです。私は、あなたがグローバルに、あるいはローカルで何を意味するのかよく分かりません。 '' temp''はmain()の中で宣言され、すべてのプロセスにアクセス可能です。 8つのプロセスがあれば、この行列は256x2048でなければなりません。最後の行列は '' im''と呼ばれ、2048x2048で、すべてのプロセスにもアクセス可能ですが、実際にはマスタープロセスだけが最後に使用します。 –