2012-07-03 50 views
17

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?

+0

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

Trả lời

0

mpicc đã được sử dụng gcc như một backend

+1

Lạ lùng, 'mpicc' của tôi đang sử dụng' icc' làm phụ trợ ... –

0

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ó.

21

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-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-showme:link để nhận các tùy chọn tự động).

2

mpicc -compile_info cho MPICH.

0

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:

đội

Open 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.

Các vấn đề liên quan