Có ai biết nếu có thể biên dịch MPI với gcc
? Tôi cần sử dụng gcc
, không mpicc
.Làm thế nào để biên dịch MPI bằng gcc?
Trả lời
mpicc
đã được sử dụng gcc
như một backend
Lạ lùng, 'mpicc' của tôi đang sử dụng' icc' làm phụ trợ ... –
Vâng, bạn chắc chắn có thể biên dịch một chương trình MPI mà không cần sự tiện lợi của mpicc
wrapper. Trên hầu hết các triển khai mpicc
là một kịch bản lệnh shell (hoặc tương tự) đặt các biến môi trường, tìm và liên kết các thư viện khác nhau, tất cả các loại công cụ mà bạn có thể đưa vào Makefile.
Tôi khuyên bạn nên tìm một phiên bản của tập lệnh mpicc
và giải mã nó.
mpicc
chỉ là trình bao bọc xung quanh một bộ trình biên dịch nhất định. Hầu hết các cài đặt có trình bao bọc mpicc
hiểu một tùy chọn đặc biệt như -showme
(Mở MPI) hoặc -show
(Mở MPI, MPICH và dẫn xuất) cung cấp danh sách đầy đủ các tùy chọn mà trình bao bọc chuyển sang trình biên dịch phụ trợ.
Ví dụ, trong Open MPI, trình bao bọc là các chương trình C++ đọc tệp cấu hình văn bản thuần túy và xây dựng các tùy chọn dòng lệnh được chuyển tiếp tới trình biên dịch. mpicc -showme
cho thấy danh sách đầy đủ các tùy chọn như:
$ 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
(nó thực sự là một dòng duy nhất mà tôi đã chia đây để cải thiện khả năng đọc)
Nó là trường hợp đặc biệt Intel C Compiler icc
được sử dụng như là phụ trợ trình biên dịch nhưng chúng tôi cũng có các biến thể sử dụng GCC. Bạn cũng có thể nhận được danh sách các tùy chọn cần thiết cho giai đoạn comple (thường được gọi là CFLAGS
) với 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
cũng như danh sách các tùy chọn mà bạn cần phải vượt qua để mối liên kết (được gọi là LDFLAGS
) với 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
Đây có thể được sử dụng, ví dụ: trong một Makefile
, như thế này:
...
CFLAGS += $(shell mpicc -showme:compile)
LDFLAGS += $(shell mpicc -showme:link)
...
Theo như tôi biết -showme:compile
và -showme:link
cụ thể để mở MPI và triển khai khác chỉ cung cấp đầy đủ danh sách các tùy chọn khi được gọi với -show
. Tôi vẫn nghĩ rằng tốt hơn nên sử dụng trực tiếp mpicc
vì nếu điều gì đó xảy ra trong cài đặt MPI, nó sẽ được phản ánh ngay trong trình bao bọc trong khi bạn phải thay đổi tập lệnh xây dựng/Makefile
theo cách thủ công (trừ khi bạn sử dụng -showme:compile
và -showme:link
để nhận các tùy chọn tự động).
mpicc -compile_info
cho MPICH.
Có, bạn có thể sử dụng gcc thực sự.Nhưng trong trường hợp của tôi (trên Ubuntu) mpicc chỉ là một wrapper của gcc, đây là đầu ra của lệnh 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
Trong thời gian ở Open MPI docs:
độiOpen MPI khuyên bạn chỉ đơn giản sử dụng các trình biên dịch "wrapper" của Open MPI để biên dịch các ứng dụng MPI của bạn. Tức là, thay vì sử dụng (ví dụ) gcc để biên dịch chương trình của bạn, hãy sử dụng mpicc.
Chúng tôi lặp lại câu lệnh trên: Nhóm MPI mở mạnh đề nghị sử dụng trình biên dịch bao bọc để biên dịch và liên kết các ứng dụng MPI. Nếu bạn thấy mình nói, "Nhưng tôi không muốn sử dụng trình biên dịch bao bọc!", Hãy làm hài lòng chúng tôi và thử chúng. Xem họ có làm việc cho bạn không. Hãy chắc chắn cho chúng tôi biết nếu họ không làm việc cho bạn. Nhiều người căn cứ "trình bao bọc trình bao bọc của họ!" tâm lý về hành vi xấu từ trình biên dịch wrapper kém triển khai vào giữa những năm 1990. Mọi thứ ngày nay tốt hơn nhiều; trình biên dịch wrapper có thể xử lý hầu như mọi tình huống, và đáng tin cậy hơn nhiều so với việc bạn cố gắng mã hóa cứng trình biên dịch và trình liên kết cụ thể mở MPI cờ thủ công. Điều đó đang được nói, có một số - rất, rất ít - tình huống khi sử dụng trình biên dịch trình bao bọc có thể có vấn đề - chẳng hạn như lồng nhiều trình biên dịch bao bọc của nhiều dự án. Do đó, Open MPI cung cấp một giải pháp thay thế để tìm ra những cờ dòng lệnh bạn cần để biên dịch các ứng dụng MPI.
Đây là câu trả lời hữu ích cho bạn.
- 1. làm thế nào để biên dịch MPI và phiên bản không MPI của cùng một chương trình với automake?
- 2. Mở MPI "Xin chào, Thế giới!" không biên dịch
- 3. Làm thế nào để biên dịch OpenCV bằng libjpeg-turbo?
- 4. Làm cách nào để biên dịch thư viện trên C bằng GCC?
- 5. Làm cách nào để biên dịch cho Windows trên Linux bằng gcc/g ++?
- 6. Làm thế nào để biên dịch C và Gtk + với GCC trên Linux?
- 7. Làm thế nào để thực thi thứ tự bit struct với trình biên dịch GCC?
- 8. Làm thế nào để biên dịch GCC mà không có _alloca?
- 9. Làm thế nào để biên dịch nhiều tệp .c và .h trong linux gcc?
- 10. Làm thế nào để biên dịch RarCrack trên Mac OSX?
- 11. GCC biên dịch một dll với __stdcall
- 12. Làm thế nào để biên dịch nhị phân tĩnh?
- 13. C89 vs c99 Trình biên dịch GCC
- 14. Hiệu suất biên dịch mã bằng biên dịch biên dịch
- 15. Cách tính thời gian biên dịch gcc?
- 16. Làm cách nào để biên dịch C++ bằng Clang?
- 17. Biên dịch chéo: GCC bỏ qua --sysroot
- 18. lỗi biên dịch gcc từ python
- 19. Không thể biên dịch C++ với gcc
- 20. Làm thế nào để vượt qua một cờ biên dịch để thử nghiệm trình biên dịch ban đầu cmake?
- 21. Làm thế nào để tôi nhận được các autotools để biên dịch với trình biên dịch Intel?
- 22. Làm thế nào để (cross-) biên dịch tăng KHÔNG CÓ python?
- 23. Trình biên dịch C++ tốt cho GCC
- 24. Làm thế nào để cài đặt CLang bằng cách sử dụng nhị phân biên dịch sẵn?
- 25. Làm cách nào để biên dịch asm do GCC tạo ra?
- 26. Làm thế nào để biên dịch boost_thread với "-pthread" thay vì "-mthread"?
- 27. Làm thế nào để biên dịch chéo Git cho ARM?
- 28. Làm cách nào để thêm biểu tượng vào tệp thực thi được biên dịch mingw-gcc?
- 29. Làm cách nào để chỉ định các phần đầu ra trong các tệp C được biên dịch bằng GCC?
- 30. Tại sao và làm thế nào để GCC biên dịch một hàm có câu lệnh trả về bị thiếu?
Có thể nhưng tại sao bạn muốn? Thông thường, trình biên dịch được bao bọc (mpicc ở đây) thuận tiện hơn nhiều và sẽ được tối ưu hóa theo một cách nào đó. – Hbcdev