Cách chạy MPI-3.0 trong chế độ bộ nhớ dùng chung như OpenMP


14

Tôi đang song song mã để giải quyết một cách số lượng mô hình cân bằng dân số 5 chiều. Hiện tại tôi có mã song song MPICH2 rất tốt trong FORTRAN nhưng khi chúng tôi tăng giá trị tham số, các mảng trở nên quá lớn để chạy trong chế độ bộ nhớ phân tán.

Tôi có quyền truy cập vào một cụm có 15 nút, trong đó mỗi nút có hai CPU 8 lõi và 128GB RAM. Tôi muốn viết một chương trình với MPI-3.0 ở chế độ bộ nhớ dùng chung để mỗi quá trình không tạo ra bản sao riêng của từng mảng.

Trước khi tôi có thể chạy bất cứ thứ gì trên cụm, tôi phải kiểm tra nó trên máy tính để bàn chạy Ubuntu. Nó thực chất là một lưỡi của cụm trong đó có hai CPU 8 nhân và RAM 128 GB. Tôi sẽ viết và kiểm tra mã của tôi trên đó, vì vậy hãy đưa ra phản hồi của bạn đối với các chương trình đang chạy trên máy tính Ubuntu.

Tôi đã đọc được rằng có một cách để chạy MPI-3.0 ở chế độ bộ nhớ dùng chung như OpenMP thay vì chế độ bộ nhớ phân tán mặc định của nó.

Câu hỏi:

  1. Làm thế nào tôi sẽ phải thay đổi mã của tôi? Tôi có cần thêm các cuộc gọi vào các chức năng MPI khác như thế MPI_WIN_ALLOCATEnào không?

  2. Làm cách nào để biên dịch mã của tôi để chạy MPI-3.0 ở chế độ bộ nhớ dùng chung? Điều này sẽ khác nếu nó qua một số nút?

Vui lòng cung cấp các kịch bản biên dịch mẫu nếu bạn có thể. Tôi cũng chỉ có trình biên dịch GNU. Cụm tôi sử dụng không hỗ trợ trình biên dịch Intel.


1
Có, bạn sẽ có thể chạy MPI trên hệ thống bộ nhớ dùng chung. Tuy nhiên, cách mà nó thực sự được lập trình sẽ giống hệt nhau. Mã của bạn phải giống nhau cho cả hệ thống bộ nhớ được chia sẻ và phân phối. Làm thế nào nó được chạy là sự khác biệt duy nhất.
NoseKnowsAll

Hơn nữa, mặc dù tôi chưa kiểm tra điều này, tôi tin rằng bạn sẽ có thể chạy mã của mình bằng lệnh mpiexec -n 8 /path/to/applicationđể giả mạo máy tính của bạn nghĩ rằng nó có 8 nút khác nhau.
NoseKnowsAll

Tôi đã chạy nó trên một hệ thống bộ nhớ dùng chung nhưng tôi muốn các lõi máy tính chia sẻ RAM, như trong OpenMP. Một số mảng của tôi là 6 GB, vì vậy tôi cần tất cả các lõi trên mỗi nút để hoạt động ở chế độ bộ nhớ dùng chung.
Franklin Betten

2
Vâng, đây là một dự án nghiên cứu. Vì vậy, tôi cần phải tăng quy mô vấn đề lên. Tôi đã có mã làm việc nên điều duy nhất ngăn chặn việc tăng quy mô là bộ nhớ cần thiết. Tôi đã bắt gặp một số tài liệu và điểm mạnh từ các hội nghị của Bộ KH & ĐT cho thấy MPI-3.0 có thể chia sẻ bộ nhớ với các chức năng gọi mới đã được thêm vào trong bản thảo giao tiếp một phía. Các chức năng như MPI_WIN_ALLOCATE_SHARE
Franklin Betten

2
www.eurompi2014.org/tutorials/hoefler-advified-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/ tựa
Franklin Betten

Câu trả lời:


0

Tôi cũng tìm thấy liên kết này trên Stack Overflow. Tôi thề tôi đã tìm kiếm những câu hỏi như của tôi mãi mãi nhưng có vẻ như cách tốt nhất để tìm kiếm một câu hỏi trên stack overflow là bắt đầu đặt câu hỏi và nó sẽ gợi ý những bài viết tương tự.

Dù sao ở đây là liên kết trong thực tế nói rằng bạn có thể chạy MPI3.0 + trong chế độ bộ nhớ dùng chung như openmp. Có những nguồn khác tôi tìm thấy cũng đề xuất và một số trạng thái mà bạn có thể nhưng không giải thích làm thế nào hoặc cung cấp tài nguyên để tìm ra nó.

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

Sau khi làm theo lời khuyên được đưa ra ở đây trong liên kết này, tôi gặp vấn đề với việc đặt USE 'mpi_f08' lên đầu mã của mình. Tôi đang sử dụng gfortran-4.8 mà dường như hiện tại không có đủ hỗ trợ FORTRAN2008 để SỬ DỤNG mpi_f08. Có người trong liên kết này có thể đã sử dụng trình biên dịch intel fortran 2008. Bạn có thể sử dụng USE mpi bao phủ lên đến Fortran2003 khá tốt. Tuy nhiên, tôi không nghĩ rằng Fortran 2003 có các hàm Type () cần thiết để sử dụng các chức năng Truy cập bộ nhớ từ xa, chẳng hạn như MPI_WIN_ALLOCATE_SHARED, vì vậy bạn không thể sử dụng chúng mà không có FORTRAN2008. Nhưng tôi thực sự không có đủ nguồn lực để chắc chắn nói điều đó vì thực tế nhưng những gì tôi đã tìm thấy cho thấy điều đó.


1
Bạn có thể sử dụng MPI_Win_allocate_ Shared với cả ba giao diện Fortran. Hơn nữa, bạn có thể tự viết bằng Fortran 2003 ISO_C_BINDING và giao diện C.
Jeff

Xin vui lòng cho tôi biết tại sao một người cần Loại () để sử dụng RMA từ Fortran? Tôi biết không có giới hạn như vậy. RMA đã được sử dụng với F77 trong nhiều năm.
Jeff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.