2012-05-16 48 views
7

Có cách nào tôi có thể biên dịch mã với mã OpenMP thành C (Với phần OpenMP được dịch sang đồng bằng C), để tôi có thể biết được loại mã nào được tạo bởi OpenMP. Tôi đang sử dụng trình biên dịch gcc 4.4.Biên dịch mã OpenMP thành mã C

+2

Tôi nghĩ rằng câu hỏi này giả định rằng trình biên dịch gcc dịch các cuộc gọi OpenMP thành C. Tôi khá nghi ngờ rằng nó và hầu hết các trình biên dịch OpenMP khác, dịch nguồn thành assembly bao gồm các cuộc gọi đến các hàm hệ thống. Tôi khá chắc chắn trình biên dịch của bạn sẽ sản xuất danh sách lắp ráp; đó có thể là những gì bạn cần làm việc. Tôi xem với sự quan tâm cho một câu trả lời mà chứng minh mong đợi của tôi sai. –

+0

Afaik, bạn có thể xem mã nguồn từ trình biên dịch gcc, ví dụ: omp.h và các tệp nguồn tương ứng của thư viện (libgomp) để xem những pragmas này làm gì. Nhưng không có thói quen thay thế trước khi gọi trình biên dịch c. xem [tại đây] (http://gcc.gnu.org/onlinedocs/libgomp/Implementing-FOR-construct.html#Implementing-FOR-construct) – Bort

Trả lời

3

Có ít nhất http://www2.cs.uh.edu/~openuh/ OpenUH (thậm chí liệt kê ở http://openmp.org/wp/openmp-compilers/), có thể

phát ra được tối ưu hóa C hoặc Fortran 77 mã có thể được biên soạn bởi một trình biên dịch bản địa trên các nền tảng khác.

Cũng có: http://www.cs.uoi.gr/~ompi/ OMPi:

Trình biên dịch OMPi mất mã nguồn C với #pragmas OpenMP và tạo ra chuyển mã C đa luồng, sẵn sàng được biên dịch bởi trình biên dịch có nguồn gốc của hệ thống.

và OdinMP:

OdinMP/ĐCSTQ được viết bằng Java cho lý do tính di động và có một chương trình C với OpenMP chỉ thị và tạo ra một chương trình C cho chủ đề POSIX.

Tôi nên nói rằng gần như không thể dịch mã openmp thành Plain C; bởi vì đồng bằng cũ C không có hỗ trợ của các chủ đề và tôi nghĩ rằng OpenMP source-to-source dịch không nhận thức được C11 được nêu ra. Chương trình OpenMP có thể được dịch sang C với các chủ đề POSIX hoặc C với một số thư viện thời gian chạy (như libgomp). Ví dụ, OpenUH có thư viện riêng sử dụng pthreads.

6

Giống như bình luận khác chỉ ra gcc không dịch chỉ thị OpenMP để đồng bằng C.

Nhưng nếu bạn muốn để có được một ý tưởng về những gì gcc không có chỉ thị của bạn, bạn có thể biên dịch với các tùy chọn -fdump-tree-optimized. Điều này sẽ tạo ra biểu diễn trung gian của chương trình ít nhất là C.

Có nhiều giai đoạn mà có thể được đổ (kiểm tra man page của gcc), ở giai đoạn tối ưu hóa các chỉ OpenMP đã được thay thế bằng các cuộc gọi đến các thư viện runtime GOMP. Nhìn vào biểu diễn đó có thể cung cấp cho bạn một số thông tin chi tiết về những gì đang xảy ra.

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