私だけでスクリプトをコンパイルするとき
#include <mpi.h>
そのようなファイルやディレクトリは存在しないことがわかります。しかし、mpi.hへのパスを含めると
#include "/usr/include/mpi/mpi.h"
(パスが正しい)それは返します:
In file included from /usr/include/mpi/mpi.h:2087:0,
from lbm.cc:7:
/usr/include/mpi/openmpi/ompi/mpi/cxx/mpicxx.h:35:17: fatal error: mpi.h: No such file or directory
#include "mpi.h"
^
compilation terminated.
誰でもこれを修正する方法を知っていますか?
問題は、ほぼ間違いなく、MPIコンパイララッパーを使用していないことです。MPIプログラムをコンパイルするときは、MPIラッパー:
mpicc
mpiCC
、mpicxx
、mpic++
mpifort
、mpif77
、mpif90
これらのラッパーは、プログラムをコンパイルするときに、適切なコンパイラフラグ、ライブラリ、インクルードディレクトリ、ライブラリディレクトリなどがすべて含まれるように、すべての汚い作業を行います。
私のシステムでは、Linuxパッケージが欠落していました。
Sudo apt install libopenmpi-dev
pip install mpi4py
(それを使用して、成功したかどうかを確認するための適切なインスタントテストの例)
成功しました。
Debianには次のものが含まれているようです。
Mpicなどの各シンボリックリンクをテストし、それがHDF5-openmpi対応のmpi.hを見つけるのに役立つかどうかを確認します。
Debianには代替システム経由でシンボリックリンクが含まれていますが、H5public.hヘッダーで参照されているHDF5 openmpiパッケージとmpi.hの間の適切なパスを見つけることができません。
上記のように、
/usr/lib/openmpi/include
インクルードパスでこれを処理します(私の場合)
私のシステムではUbuntu 16.04。私はインストールしました:
Sudo apt install libopenmpi-dev
mpiCCを使用してコンパイルした後、動作します
以下を実行できます。
$ mpicc -showme
結果:
gcc -I/Users/<USER_NAME>/openmpi-2.0.1/include -L/Users/<USER_NAME>/openmpi-2.0.1/lib -lmp
このコマンドは、mpiccをコンパイルするために必要なライブラリを表示します
例:
$ mpicc -g -I/Users/<USER_NAME>/openmpi-2.0.1/include -o [nameExec] [objetcs.o...] [program.c] -lm
$ mpicc -g -I/Users/<USER_NAME>/openmpi-2.0.1/include -o example file_object.o my_program.c otherlib.o -lm
このコマンドは、たとえばプログラムで実行可能ファイルを生成します。次を実行できます。
$ ./example