私はMPI初心者です。私のプログラムは1から100までの合計を計算しますが、エラーを返すため、なぜ私は理解できません。 MPI_ReduceとMPI_Bcastを学習していますので、できる限り使用してみてください。 これは私のプログラムです。mpiでのMPI_ReduceとMPI_Bcastについての質問mpich
// include something
int main (int argc, char * argv[])
{
int rank, size, root = 0;
int i,j,k,S[100],n=100,p, sum;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
//get n
if(rank==root){
n=100;
}
//send data to all process
MPI_Bcast(&n, n, MPI_INT,root, MPI_COMM_WORLD);
p=n/rank;
while(p>0){
for(i=1;i<p;i++){
for(k=0;k<rank;k++){
S[k]=i+i*rank;
}
}
p=p/2;
}
//get data from all process
MPI_Reduce(S, &sum, n, MPI_INT, MPI_SUM, root, MPI_COMM_WORLD);
if(rank==root){
printf("Gia tri cua S trong root: %d", sum);
}
MPI_Finalize();
return 0;
}
そして、これは私のエラーです:
job aborted:
[ranks] message
[0] process exited without calling finalize
[1-4] terminated
---- error analysis -----
[0] on DESKTOP-GFD7NIE
mpi.exe ended prematurely and may have crashed. exit code 0xc0000094
---- error analysis -----
私はまた、MPIについては明らかではない何かを持っている、私はあなたが私が把握役立つことを願って:
1)私は、このようなコードがある場合:
//include something
int main(){
MPI_Init(&argc, &argv);
int rank, size, root = 0;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
//code 1
if(rank==0){
//code 2
}
}
これは、すべてのプロセスがコード1を実行し、ランク0のみがコード2を実行することを意味します。正しいですか?
2)thisによると、関数MPI_Reduce(const void * sendbuf、void * recvbuf、int count、MPI_Datatypeデータ型、MPI_Op op、int root、MPI_Comm comm)はrecvbufを持ちます。しかし、私はそれをはっきりと理解していません。変数がsendbufなどのデータを受け取るのでしょうか?
ありがとうございました。
可能な重複[MPI \ _Reduce、期待どおりに動作しません](https://stackoverflow.com/questions/13666002/mpi-reduce-doesnt-work-as-expected) – Zulan