におけるグローバル変数の定義:一つは気付くことができるよう私は次のサンプルコードを書かれているMPI
#include <stdio.h>
#include <mpi.h>
double x;
int main (int argc, char **argv) {
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank==0) x=10.1;
MPI_Barrier(MPI_COMM_WORLD);
printf("%f\n", x);
MPI_Finalize();
return 0;
}
を、このプログラムは、実際には、Xと呼ばれるグローバル変数を定義し、ゼロ番目のスレッドは、それにいくつかの値を代入しようとします。各スレッドは、変数xのアドレス、すなわちを出力するように私は私のコードを変更するより興味深い
10.1
0
0
0
、:私は4つのコアのSMP(対称型マルチプロセッシング)マシン上で、このプログラムの実行を持っているとき、私は次のような結果を得ます& x、それらはすべて同じものを印刷します。
私の質問は、SMPシステム上のいくつかのスレッドが同じ値を共有していない間に変数のアドレスに同じ値を共有する可能性があることです。
私の次の質問は、上記のコードをどのように変更して次の結果が得られるかです。
10.1
10.1
10.1
10.1
本当にスレッドではなくプロセスなので、変数はおそらく同じアドレスと異なる値を持ちますか? –
@Joachim:プロセスやスレッドであるかどうかを知るにはどうすればよいですか? – Mehrdad
現在のMPI実装では、各ランクは別のプロセスです。 –