web-dev-qa-db-ja.com

Open MPI "Hello、World!"はコンパイルされていません

これは単純な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 ++です。

10
efpies

mpi.hヘッダーファイルをすべてのヘッダーファイルの上に配置するだけで、コンパイルに問題が発生することがあります

コードをどのように実行するかわかりません。コンパイル

mpic++ your_code_file.c

実行

mpirun -np <no. of Processors> ./a.out
10
DOOM

また、「Eclipse for ParallelApplicationDevelopers」IDEでopenmpiおよびmpiプログラムをコンパイルする方がはるかに簡単で柔軟性があります。

http://www.Eclipse.org/downloads/packages/Eclipse-parallel-application-developers/junosr1

1
user1436187

いくつかの注意:

  1. Open MPI 1.5は古いものです。OpenMPI 1.6.xシリーズ(現在は1.6.3ですが、注意してください)の最新バージョンにアップグレードしてください。 www.open-mpi.org Webサイトは現在、計画された年末のメンテナンスが行われており、2012年12月28日木曜日の本日遅くまでバックアップされません。

  2. 私は興味があります:なぜmpic ++でCプログラムをコンパイルするのですか? mpiccを使用するだけで済みます--C MPIラッパーコンパイラ。これで問題は確実に回避されます。ただし、この小さなC hello worldプログラムを簡単な例として使用し、実際のターゲットを使用している場合C++をコンパイルすることですMPIプログラムの場合、mpic ++が正しいラッパーです(単純なCプログラムの場合でも)。その場合は、何らかの非互換性/構成の誤りがあります。 C++コンパイラとOpen MPIがコンパイル/インストールされたC++コンパイラ。

  3. Mpic ++ --showmeの出力を見ると、たとえば、Open MPI --- Rはデフォルトではフラグに入れられていません。どこでしたか? get this Open MPIインストール?g ++インストールと(完全に)互換性がない可能性があります(たとえば、異なるバージョンのg ++​​でコンパイルされた場合)。

  4. そうは言っても、mpic ++ --showmeの出力も、行のendに-lmpi_cxxがリストされているという点で奇妙です。 rightではなく、-lmpiのleftにする必要があります。インストールがどのように中断されたかは示していませんが、それは別の考えられる原因です。

要約すると、私の答えは次のとおりです。

  1. Open MPIをアップグレードして、問題が解決するかどうかを確認してください。
  2. Open MPIのインストールがシステムと互換性があることを再確認してください。
1
Jeff Squyres