MPI初心者です。ここでは、MPI が実行できるかどうかをテストするための非常に単純なプログラムを作成しました。ここに私のhello.cがあります:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
MPI_Barrier(MPI_COMM_WORLD);
printf("Process %d on %s out of %d\n", rank, processor_name, numprocs);
MPI_Finalize();
}
私はノードをテストするために使用します。ホストファイルは次のとおりです:node1 node2
したがって、node1 と node2 という名前の 2 台のマシンがあります。パスワードなしでお互いにsshできます。
次のように入力してプログラムを起動しますmpirun -np 2 -f hostfile ./hello
。
実行可能な hello は、両方のマシンの同じディレクトリにあります。
次に、実行した後、エラーが発生します。
PMPI_Barrier の致命的なエラー: その他の MPI エラー、エラー スタック: PMPI_Barrier(425)....................: MPI_Barrier(MPI_COMM_WORLD) が失敗しました MPIR_Barrier_impl(331)....: 集合 MPIR_Barrier_impl(313) 中の失敗... .: MPIR_Barrier_intra(83)....: dequeue_and_set_error(596): ランク 0 の通信エラー PMPI_Barrier の致命的なエラー: その他の MPI エラー、エラー スタック: PMPI_Barrier(425)....: MPI_Barrier(MPI_COMM_WORLD ) failed MPIR_Barrier_impl(331)....: 集合中の失敗 MPIR_Barrier_impl(313)....: MPIR_Barrier_intra(83)....: dequeue_and_set_error(596): ランク 1 との通信エラー
MPI_Barrier() をコメントアウトすると、正常に動作します。マシン間の通信に問題があるようですか?または、openmpi を正しくインストールしていませんか? 何か案は?
Ubuntu 12.10 を使用しています
いくつかのヒントが得られました: これは MPICH2 ではうまく機能しません。openmpi を使用すると機能します。sudo apt-get install mpich2 だけで MPICH をインストールしました。私は何かが恋しいですか?mpich2 のサイズは openmpi よりもはるかに小さい