11

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

4

3 に答える 3

13

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

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

mpic++ your_code_file.c

実行

mpirun -np <no. of Processors> ./a.out
于 2012-12-25T09:19:22.577 に答える
2

いくつかのメモ:

  1. Open MPI 1.5 は古くからあることに注意してください。Open MPI 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 プログラムをコンパイルすることである場合は、(単純な C プログラムであっても) mpic++ を試すのが適切なラッパーです。その場合は、C++ コンパイラと、Open MPI がコンパイル/インストールされた C++ コンパイラとの間に、ある種の非互換性や設定ミスがあります。

  3. mpic++ --showme の出力を見ると、Open MPI の何らかのパッケージ ディストリビューションがあるように見えます。たとえば、-R はデフォルトではフラグに含まれていません。この Open MPI インストールはどこで入手しましたか? g++ のインストールと (完全に) 互換性がない可能性は十分にあります (たとえば、別のバージョンの g++ でコンパイルされた場合など)。

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

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

  1. Open MPI をアップグレードしてみて、問題が解決するかどうかを確認してください。
  2. Open MPI のインストールがシステムと互換性があることを再確認してください。
于 2012-12-27T21:03:16.090 に答える
1

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

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

于 2012-12-25T09:41:05.307 に答える