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。
mpiccMPIセットアップで何かが変更された場合、ビルドスクリプトMakefileを手動で変更する必要がある間、ラッパーにすぐに反映されるため、直接使用する方が良いと思います(使用-showme:compileし-showme:linkてオプションを自動的に取得しない限り) )。
mpicc -compile_infoMPICH 用。
mpiccはい、ラッパーの利便性がなくても MPI プログラムをコンパイルできます。ほとんどの実装mpiccでは、環境変数を設定し、さまざまなライブラリを見つけてリンクするシェル スクリプト (または類似のもの) があり、それ以外の場合は Makefile に入れる可能性のあるすべてのものがあります。
スクリプトのインスタンスを見つけてmpicc分解することをお勧めします。
mpiccはすでにgccバックエンドとして使用されています