gcc
でMPIをコンパイルすることができるかどうかは知っていますか? gcc
、mpicc
を使用する必要があります。gccでMPIをコンパイルするには?
答えて
mpicc
はすでにはい、あなたは確かにmpicc
ラッパーの利便性なしMPIプログラムをコンパイルすることができ、バックエンド
奇妙なことに、私の 'mpicc'は' icc'をバックエンドとして使っています... –
としてgcc
を使用しています。ほとんどの実装では、mpicc
は、環境変数を設定し、さまざまなライブラリを見つけてリンクするシェルスクリプト(またはこれに類するもの)です。そうしないと、Makefileに入れられるかもしれないすべてのものがあります。
mpicc
スクリプトのインスタンスを見つけて解体することをお勧めします。
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
を入力してオプションを自動的に取得します)。
mpicc -compile_info
(MPICH)。
はい、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アプリケーションをコンパイルするために必要なコマンドラインフラグを見つけるための回避策を提供します。
この回答はあなたにとって役に立ちます。
- 1. GCCでObjective C++をコンパイルするには?
- 2. はGCCでクラスをコンパイル
- 3. mingwを使ってMPIをコンパイルする
- 4. はSTDをコンパイル:: gccの
- 5. __stdcallでdllをコンパイルするGCC
- 6. gccでSIMDコードをコンパイルする方法
- 7. GCCでPARDISOリニアソルバテストケースをコンパイル
- 8. GCCでリストイテレータをコンパイルするときのテンプレートコンパイル時エラーGCC
- 9. Archlinuxのgcc 7.2でgcc 6.4.0をコンパイルする方法
- 10. LinuxでCとGtk +をGCCでコンパイルするには?
- 11. gccで.c、.h、.soファイルをコンパイルするには?
- 12. gccを静的ライブラリでコンパイルするには?
- 13. gcc linuxで複数の.cと.hファイルをコンパイルするには?
- 14. 共有ライブラリでgccをコンパイルするには?
- 15. GCCは、コンパイル済みのアセンブリ
- 16. GCCクロスコンパイラのコンパイル方法は?
- 17. gccでコンパイルする(Windows上のcygwin)
- 18. gccでコンパイル中のバスエラー
- 19. GCC問題:次のコードは、gccでコンパイルされません
- 20. gccコンパイルの問題
- 21. p3dfftドライバをコンパイルするときに未解決のMPI Fortranシンボル
- 22. GCCを使ってCでライブラリをコンパイルする方法は?
- 23. GCCプログラムをコンパイルできません
- 24. gccでDocxFactoryベースのアプリケーションをコンパイル
- 25. "gcc"を使ってコンパイルできない
- 26. GCCでC++をコンパイルするときにC11ヘッダーをインクルードする方法は?
- 27. mpi(AGMG)を使用するライブラリをコンパイルします
- 28. MPIの編集とコンパイルFORTRANコード
- 29. OpenSolaris 2008.11でgccでコンパイルするときに未解決のシンボル
- 30. OpenMPIでOpenMPを使用してMPIプログラムをコンパイルできない
それは可能ですが、なぜあなたはしたいですか?通常、ラップされたコンパイラ(ここではmpicc)ははるかに便利で、何らかの方法で最適化されています。 – Hbcdev