MPIをコンパイルできるかどうかは誰にもわかりgcc
ませんか?gcc
いいえ、を使用する必要がありますmpicc
。
6 に答える
mpicc
特定の一連のコンパイラの単なるラッパーです。ほとんどの実装では、ラッパーがバックエンド コンパイラに渡すオプションの完全なリストを提供する(Open MPI) または(Open MPI、MPICH、および派生物)mpicc
などの特別なオプションをラッパーが認識します。-showme
-show
たとえば、Open MPI では、ラッパーは、プレーン テキストの構成ファイルを読み取り、さらにコンパイラに渡されるコマンド ライン オプションを構築する C++ プログラムです。mpicc -showme
そのようなオプションの完全なリストを示します:
$ mpicc -showme
icc
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
(読みやすくするためにここで分割したのは、実際には 1 行です)
特定のケースでは、Intel C Compilericc
がバックエンド コンパイラとして使用されますが、GCC を使用するバリアントもあります。次のコマンドを使用して、完了フェーズ (通常は として知られるCFLAGS
) に必要なオプションのリストを取得することもできmpicc -showme:compile
ます。
$ mpicc -showme:compile
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
と同様に、リンカーに渡す必要があるオプションのリスト (として知られていますLDFLAGS
) mpicc -showme:link
:
$ mpicc -showme:link
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
Makefile
これらは、たとえば aで次のように使用できます。
...
CFLAGS += $(shell mpicc -showme:compile)
LDFLAGS += $(shell mpicc -showme:link)
...
私の知る限り、 Open MPI-showme:compile
および-showme:link
その他の実装に固有のものは、 で呼び出された場合にのみオプションの完全なリストを提供します-show
。
mpicc
MPIセットアップで何かが変更された場合、ビルドスクリプトMakefile
を手動で変更する必要がある間、ラッパーにすぐに反映されるため、直接使用する方が良いと思います(使用-showme:compile
し-showme:link
てオプションを自動的に取得しない限り) )。
mpicc -compile_info
MPICH 用。
mpicc
はい、ラッパーの利便性がなくても MPI プログラムをコンパイルできます。ほとんどの実装mpicc
では、環境変数を設定し、さまざまなライブラリを見つけてリンクするシェル スクリプト (または類似のもの) があり、それ以外の場合は Makefile に入れる可能性のあるすべてのものがあります。
スクリプトのインスタンスを見つけてmpicc
分解することをお勧めします。
mpicc
はすでにgcc
バックエンドとして使用されています