2012-07-03 16 views
17

gccでMPIをコンパイルすることができるかどうかは知っていますか? gccmpiccを使用する必要があります。gccでMPIをコンパイルするには?

+0

それは可能ですが、なぜあなたはしたいですか?通常、ラップされたコンパイラ(ここではmpicc)ははるかに便利で、何らかの方法で最適化されています。 – Hbcdev

答えて

0

mpiccはすでにはい、あなたは確かにmpiccラッパーの利便性なしMPIプログラムをコンパイルすることができ、バックエンド

+1

奇妙なことに、私の 'mpicc'は' icc'をバックエンドとして使っています... –

0

としてgccを使用しています。ほとんどの実装では、mpiccは、環境変数を設定し、さまざまなライブラリを見つけてリンクするシェルスクリプト(またはこれに類するもの)です。そうしないと、Makefileに入れられるかもしれないすべてのものがあります。

mpiccスクリプトのインスタンスを見つけて解体することをお勧めします。

21

mpiccは、コンパイラの特定のセットを囲む単なるラッパーです。ほとんどの実装では、mpiccラッパーは-showme(Open MPI)または-show(Open MPI、MPICHおよび派生)のような特別なオプションを理解しています。このオプションは、ラッパーがバックエンドコンパイラに渡すオプションの完全なリストを提供します。

たとえば、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 

(それは本当に私は読みやすさを向上させるためにここに分かれている一行です)

また、特定の場合インテルCコンパイラiccをバックエンドとして使用されていることコンパイラですが、GCCを使用する亜種もあります。またmpicc -showme:compileで(通常CFLAGSとして知られている)comple相に必要なオプションのリストを取得することができます。

$ 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、中:

... 
CFLAGS += $(shell mpicc -showme:compile) 
LDFLAGS += $(shell mpicc -showme:link) 
... 

は、私の知る限りでは -showme:compile-showme:link-showで呼び出されたときにMPIおよびその他の実装が唯一のオプションの完全なリストを与える開くことが特定されています。

mpiccを使用する方が良いと思いますが、MPI設定の何かが変更された場合、すぐにラッパーに反映されるため、手動でビルドスクリプト/ Makefileを変更する必要があります-showme:compileおよび-showme:linkを入力してオプションを自動的に取得します)。

2

mpicc -compile_info(MPICH)。

0

はい、gccを実際に使用できます。私の場合は(Ubuntuの上)mpiccのはGCCの単なるラッパーである。しかし、ここではコマンドmpicc -showmeの出力は次のとおりです。

gcc -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/include -I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -pthread -Wl,-rpath -Wl,/usr/lib/openmpi/lib -Wl,--enable-new-dtags -L/usr/lib/openmpi/lib -lmpi 

Open MPI docsにいる間:

オープンMPIチームは強く単にそのあなたをお勧めしますOpen MPIの "ラッパー"コンパイラを使用して、MPIアプリケーションをコンパイルします。つまり、gccを使用してプログラムをコンパイルするのではなく、mpiccを使用します。

上記の文を繰り返します。Open MPIチームは、MPIアプリケーションのコンパイルとリンクにラッパーコンパイラを使用することを強く推奨します。 自分自身が「ラッパーコンパイラを使いたくない!」と言ったら、私たちにユーモアを与えて試してみてください。彼らがあなたのために働くかどうか見てください。彼らがあなたのために働かない場合は、私たちに知らせてください。 多くの人が "ラッパーコンパイラを吸う" 1990年代半ばに実装されていないラッパー・コンパイラーによる悪い行為に対する考え方。最近は物事ははるかに良いです。ラッパーコンパイラはほとんどすべての状況を処理することができ、Open MPI固有のコンパイラおよびリンカフラグを手動でハードコードしようとするよりはるかに信頼性が高くなります。 これは、複数のプロジェクトの複数のラッパーコンパイラを入れ子にするなど、ラッパーコンパイラを使用すると問題が発生する可能性がある、非常にごくわずかな状況があります。したがって、Open MPIは、MPIアプリケーションをコンパイルするために必要なコマンドラインフラグを見つけるための回避策を提供します。

この回答はあなたにとって役に立ちます。

関連する問題