プロが教えるわが家の防犯対策術!

以下のプログラムで,ランク0の3次元配列rec_f[][][]に,ランクpの3次元配列id[][][]を,要素ごとではなく,そのままコピーすることを考えています.

しかし,途中出力したid[6][24][3]とrec_f[6][24][3]が異なる値になってしまい,その理由が分かりません.

宜しければ,原因と修正箇所をご教示頂けないでしょうか.
宜しくお願い致します.

if(my_rank != 0)
{
MPI_Isend(id, lx * my * mz, MPI_INT,
   dest, 0, MPI_COMM_WORLD, &request);
if(my_rank == 2) cout << id[6][24][3] << " ";
}
else
{
  for(i = 1; i < lx - 1; i ++)
{
 for(p = 1; p <= p_num-1; p++)
  {
  source = p;
  MPI_Irecv(rec_f, lx * my * mz, MPI_INT, source, 0,    
                 MPI_COMM_WORLD, &request);
 if(p == 2) cout << rec_f[6][24][3] << " ";

  }
}
MPI_Wait(&request,&status);

A 回答 (1件)

MPIは無関係な気がします。



配列rec_fと配列idの型は何でしょうか?

型によっては「代入する前の計算結果と、代入した後の変数で、値が異なる」と言う事が起きます。

この回答への補足

ご回答ありがとうございます.
配列rec_fと配列idの型はどちらもint型で定義しています.

補足日時:2009/07/02 03:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!