有誰知道是否可以用gcc
來編譯MPI?我需要使用gcc
,沒有mpicc
。如何用gcc編譯MPI?
回答
mpicc
已經使用gcc
作爲後端
奇怪,我的'mpicc'使用'icc'作爲後端... –
是的,你當然可以編譯MPI程序沒有mpicc
包裝的便利性。在大多數實現中,mpicc
是一個shell腳本(或類似的),用於設置環境變量,查找和鏈接各種庫,以及其他所有可以放入Makefile的東西。
我建議你找到mpicc
腳本的一個實例,解構它。
mpicc
只是圍繞某一套編譯器的包裝。大多數實現都有他們的mpicc
包裝理解一個特殊選項,如-showme
(Open MPI)或-show
(Open MPI,MPICH和派生),它提供了包裝器傳遞給後端編譯器的完整選項列表。
例如,在打開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
獲得所需COMPLE階段(通常稱爲CFLAGS
)選項列表:
$ 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
是特定於Open MPI和其他實現只有當-show
叫給的選項的完整列表。
我仍然認爲直接使用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
開放MPI團隊強烈建議您只需使用Open MPI的「包裝器」編譯器來編譯您的MPI應用程序。也就是說,不是使用(例如)gcc編譯你的程序,而是使用mpicc。
我們重複上述說法:Open MPI團隊強烈建議使用包裝編譯器來編譯和鏈接MPI應用程序。 如果您發現自己說「但我不想使用包裝編譯器!」,請幽默我們並嘗試它們。看看他們是否適合你。一定要讓我們知道他們是否不適合你。許多人基於他們的「包裝編譯器吸!」!在20世紀90年代中期由於執行不力的封裝編譯器對不良行爲的心態。這些日子好多了,包裝器編譯器幾乎可以處理任何情況,並且比您嘗試手動對Open MPI特定的編譯器和鏈接器標記進行硬編碼更可靠。這就是說,使用包裝器編譯器可能會產生一些問題 - 例如嵌套多個項目的多個包裝器編譯器的情況非常少。因此,Open MPI提供了一種解決方法,以找出編譯MPI應用程序所需的命令行標誌。
這個答案對您有用。
- 1. 如何更改默認的GCC編譯器以便在Linux上使用MPI CentOS
- 2. 用MPI支持編譯Valgrind
- 3. 用gcc編譯.c
- 4. 如何使用備用GCC編譯器編譯/鏈接
- 5. 如何使用gcc編譯glib
- 6. 如何使用gcc編譯SIMD代碼
- 7. 如何使用GCC編譯C庫?
- 8. 如何用共享庫編譯gcc?
- 9. 如何用靜態庫編譯gcc?
- 10. 如何在OpenWRT中使用gcc編譯
- 11. 如何用GCC編譯Objective-C代碼?
- 12. 編譯編譯器錯誤編譯GCC
- 13. 編譯gcc-4.1
- 14. 如何在Windows編譯器和GCC編譯器中使用SSE?
- 15. 使gcc編譯C使用gcc規則
- 16. 編譯MPI/VTK Hello World
- 17. 編譯哈斯克爾-MPI
- 18. 使用gcc編譯SCOL
- 19. 使用Code Sourcery編譯GCC
- 20. GCC使用__stdcall編譯dll
- 21. 交叉編譯使用GCC
- 22. Ada - 用GCC編譯Ada
- 23. 編譯的std :: regex_iterator用gcc
- 24. 編譯-ansi -pedantic -Wall用gcc
- 25. 用GCC編譯WIN32代碼
- 26. 使用gcc編譯makefile UNIX
- 27. 用gcc編譯時出錯
- 28. 編譯模塊LUA用gcc
- 29. 使用gcc編譯DLL
- 30. 編譯類與GCC
這是可能的,但你爲什麼要?通常情況下,封裝的編譯器(這裏是mpicc)更方便,並且會以某種方式進行優化。 – Hbcdev