Tôi đang làm việc với các chương trình MPI trên siêu máy tính SMP. Tôi muốn xác định các quy trình nào đang chia sẻ cùng một nút, ví dụ bằng cách thiết lập một phím số nguyên bằng nhau trong tất cả các quy trình trên cùng một nút và khác với nút khác. Mục tiêu sẽ là sau đó sử dụng khóa này để tách một người giao tiếp và có các nhà giao tiếp phụ chỉ thu thập các quy trình trong cùng một nút.MPI: nhận số lượng nút (không phải quy trình) trong một bộ giao tiếp
Vì vậy, các chức năng sẽ trông như thế
int identify_node(MPI_Comm* comm); // returns a key characterizing a node
Giả sử một phân phối đơn giản của quá trình như 0,1,2,3 trên node_1, 4,5,6,7 trên node_2, vv nó là một vấn đề của một công thức đơn giản, nhưng tôi muốn đạt được kết quả tương tự mà không có giả định về phân phối.
Tôi có ý tưởng làm thế nào để thực hiện điều đó bằng cách sử dụng MPI_Get_processor_name: bằng cách tính toán băm tên và giả sử không có hai tên sẽ nhận được cùng một mã băm (tôi không thích điều này vì nếu một ngày nào đó tôi có hai tên giống nhau băm, nó sẽ rất khó để theo dõi vấn đề), hoặc sử dụng một số loại thuật toán thỏa thuận trên các quy trình (cái nào? Tôi chưa biết).
Bạn sẽ làm điều đó như thế nào (hiệu quả nếu có thể)?
Matthieu
Cảm ơn bạn, câu hỏi bạn đã đề cập thực sự là khá gần. Tôi nghĩ rằng tôi sẽ làm những gì bạn tư vấn: có được một băm của tên bộ vi xử lý, sau đó thực hiện một kiểm tra thứ hai với MPI_Gatherv. – sunmat