これは単純なMPI "Hello、World!"プログラムです。
#include <stdio.h>
#include <mpi.h>
int main(int argc, char **argv)
{
int size, rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf("SIZE = %d RANK = %d\n",size,rank);
MPI_Finalize();
return(0);
}
ただし、コンパイルされていないようです。
Undefined first referenced
symbol in file
MPI::Datatype::Free() /var/tmp//ccE6aG2w.o
MPI::Win::Free() /var/tmp//ccE6aG2w.o
MPI::Comm::Comm() /var/tmp//ccE6aG2w.o
ld: fatal: symbol referencing errors. No output written to main
collect2: ld returned 1 exit status
私はたくさんグーグルで検索し、何千ものメーリングリストを見てきました。彼らが言う libmpi_cxx
はリンクしていません。しかし、それはコンパイラフラグにあります。
ここは --showme
データ:
mpic++ --showme:compile
-I/usr/openmpi/ompi-1.5/include -I/usr/openmpi/ompi-1.5/include/openmpi
mpic++ --showme:link
-R/opt/mx/lib -R/usr/openmpi/ompi-1.5/lib -L/usr/openmpi/ompi-1.5/lib -lmpi -lopen-rte -lopen-pal -lnsl -lrt -lm -ldl -lsocket -lmpi_cxx
私のコンパイラはg ++です。
mpi.hヘッダーファイルをすべてのヘッダーファイルの上に配置するだけで、コンパイルに問題が発生することがあります
コードをどのように実行するかわかりません。コンパイル
mpic++ your_code_file.c
実行
mpirun -np <no. of Processors> ./a.out
また、「Eclipse for ParallelApplicationDevelopers」IDEでopenmpiおよびmpiプログラムをコンパイルする方がはるかに簡単で柔軟性があります。
http://www.Eclipse.org/downloads/packages/Eclipse-parallel-application-developers/junosr1
いくつかの注意:
Open MPI 1.5は古いものです。OpenMPI 1.6.xシリーズ(現在は1.6.3ですが、注意してください)の最新バージョンにアップグレードしてください。 www.open-mpi.org Webサイトは現在、計画された年末のメンテナンスが行われており、2012年12月28日木曜日の本日遅くまでバックアップされません。
私は興味があります:なぜmpic ++でCプログラムをコンパイルするのですか? mpiccを使用するだけで済みます--C MPIラッパーコンパイラ。これで問題は確実に回避されます。ただし、この小さなC hello worldプログラムを簡単な例として使用し、実際のターゲットを使用している場合C++をコンパイルすることですMPIプログラムの場合、mpic ++が正しいラッパーです(単純なCプログラムの場合でも)。その場合は、何らかの非互換性/構成の誤りがあります。 C++コンパイラとOpen MPIがコンパイル/インストールされたC++コンパイラ。
Mpic ++ --showmeの出力を見ると、たとえば、Open MPI --- Rはデフォルトではフラグに入れられていません。どこでしたか? get this Open MPIインストール?g ++インストールと(完全に)互換性がない可能性があります(たとえば、異なるバージョンのg ++でコンパイルされた場合)。
そうは言っても、mpic ++ --showmeの出力も、行のendに-lmpi_cxxがリストされているという点で奇妙です。 rightではなく、-lmpiのleftにする必要があります。インストールがどのように中断されたかは示していませんが、それは別の考えられる原因です。
要約すると、私の答えは次のとおりです。