1

ヘルプ!

MPIコードを実行しているときに、「プロセスの1つが正常に終了しました:クリーンアップしています...完了を待機しているプロセスマネージャーエラー」というランタイムエラーが返されました。エラープロセスの数とその方法を確認したいのですが。

さらに、4X4(各4プロセスを使用する4台のマシン)を使用する場合は問題ありませんが、4X6以上(4X8)を使用する場合はエラーが発生します。

私のreduceコードは以下のとおりです。

#include <stdio.h>
int main(void)
{
   int num,rank;
   scanf("%d %d",&num, &rank);
   int depth = 1;
   int flag = 0;
   while(num > 1) {
      if(rank < num){
          flag = num % 2;
          if(rank % 2 != 0){
              //MPI_Send(to (rank-1)*depth);
              printf("Send to %d\n", (rank - 1) * depth);
              rank *= num;
              break;
          }
          else{
              if(!(flag && (rank == (num - 1)))) {
                  //MPI_Recv(from (rank+1)*depth);
                  printf("Recv from %d\n", (rank+1)*depth);
              }
              rank /= 2;
          }
          depth *= 2;
      }
      num = num / 2 + flag;
  }
  return 0;
}

ありがとうございました!

4

1 に答える 1

0

問題が何らかの MPI エラーに関連している場合 (たとえば、存在しないランクにメッセージを送信しようとした場合)、 を使用して独自の MPI エラー ハンドラを作成する必要がありますMPI_Comm_create_errhandler。ここで、エラーが発生したランクの番号を出力できます。ただし、問題を解決するには、コードをデバッガーで実行する必要があります。

于 2012-04-17T05:32:21.253 に答える