Bạn có thể muốn xem MPI_COMM_SPLIT_TYPE. Nó sẽ cho phép bạn chia một người giao tiếp hiện tại dựa trên split_type
bạn vượt qua như một tham số:
int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key,
MPI_Info info, MPI_Comm *newcomm)
Ngay bây giờ, split_type chỉ là MPI_COMM_TYPE_SHARED
, được định nghĩa trong tiêu chuẩn như:
Đây là loại chia bộ giao tiếp thành các subcommunicators, mỗi thiết bị trong đó có thể tạo vùng bộ nhớ dùng chung.
Điều này thường tương tự như những gì bạn đang yêu cầu, nhưng bạn sẽ phải kiểm tra kỹ xem máy tính của bạn có đúng không.
Điều khác bạn cần biết là đây là một chức năng mới trong MPI-3 để nó có thể không có sẵn trong tất cả các cài đặt của MPI. Tôi biết rằng nó có sẵn cho MPICH và các dẫn xuất của nó. AFAIK, nó không có sẵn trong bản phát hành cuối cùng của Open MPI. Vì vậy, hãy chắc chắn rằng bạn có một phiên bản của MPI mà thực sự hỗ trợ nó.
Nguồn
2013-08-08 16:33:51
Wesley, cảm ơn. Đó là một sự xấu hổ rằng điều này không phải là avaiable cho Open MPI. Mặc dù, hãy để tôi làm ví dụ để xem liệu tôi có hiểu cách phân chia loại này hoạt động hay không. Giả sử tôi có 32 quy trình trên 4 nút 8 lõi. Ý định của tôi là tạo 4 nhóm gồm 8 lõi, dựa trên các quy trình bộ nhớ dùng chung trên cùng một nút. Tôi có thể sử dụng MPI_Comm_split_type. Sử dụng ví dụ này tôi không thể tạo ra 8 nhóm 4 (đặt 2 nhóm trong mỗi nút), tôi có thể? –
Có, bạn có thể làm điều đó. Nếu bạn muốn tạo 8 nhóm 4 nhóm trong đó mỗi nhóm là một nút cục bộ, bạn sẽ cần sử dụng tham số khóa để một nửa các quy trình đóng góp một khóa và nửa còn lại đóng góp một khóa khác. Đây là hành vi của cuộc gọi hiện tại MPI_COMM_SPLIT vì vậy cần có rất nhiều hướng dẫn để bạn làm theo. Bạn sẽ chỉ cần thêm một chút cho các bổ sung loại mới. –
OpenMPI đặt biến môi trường OMPI_COMM_WORLD_LOCAL_RANK và OMPI_COMM_WORLD_LOCAL_SIZE mà bạn có thể sử dụng để tìm hiểu xem có bao nhiêu quy trình chia sẻ một nút ("kích thước cục bộ"). –