2013-03-22 34 views
7

Tôi đã triển khai kết nối ngang hàng trong MPI bằng cách sử dụng MPI_Open_portMPI_Comm_accept. Tôi chạy máy chủ và chương trình khách hàng bằng cách sử dụngSự khác biệt giữa việc chạy một chương trình có và không có mpirun

[email protected]:~$ mpirun server 
[email protected]:~$ mpirun client 

trên các máy tính khác nhau. Tôi nhận thấy rằng

[email protected]:~$ ./server 
[email protected]:~$ ./client 

cũng hoạt động tốt. Bạn có biết nếu có bất kỳ sự khác biệt nào giữa việc bắt đầu thực thi MPI có và không có mpirun không?

Tất nhiên, tôi không thể cung cấp thông số bổ sung (ví dụ: mpirun --mca btl self,openib) và xếp hạng của tất cả các quy trình là 0, điều này hoàn toàn ổn. Nhưng có điều gì ít rõ ràng hơn không?

Trả lời

15

Chạy mà không mpirun/mpiexec được gọi là "singleton MPI_INIT" và là một phần của kiến ​​nghị Bộ KH & ĐT cho việc triển khai chất lượng cao, tìm thấy dưới §10.5.2 trong MPI tiêu chuẩn tài liệu mới nhất:

A-chất lượng cao việc thực hiện sẽ cho phép bất kỳ quá trình nào (bao gồm cả những tiến trình không bắt đầu với cơ chế "ứng dụng song song") để trở thành một quá trình MPI bằng cách gọi MPI_INIT. Quá trình này sau đó có thể kết nối với các quy trình MPI khác bằng cách sử dụng các quy trình MPI_COMM_ACCEPTMPI_COMM_CONNECT hoặc sinh ra các quy trình MPI khác. Bộ KH & ĐT không quy định hành vi này, nhưng khuyến khích mạnh mẽ nơi có khả năng về mặt kỹ thuật.

Nếu quá trình nhập MPI_INIT và xác định không có bước đặc biệt nào (tức là chưa được cung cấp thông tin để tạo thành MPI_COMM_WORLD với các quy trình khác) thành công và tạo thành một chương trình MPI đơn, tức là MPI_COMM_WORLD có kích thước 1.

Sử dụng mpirun trong trường hợp của bạn là cơ chế "ứng dụng song song", được đề cập trong văn bản chuẩn. Nó cung cấp MPI_INIT với thông tin cần thiết để thiết lập MPI_COMM_WORLD trên tất cả các quy trình đã bắt đầu. Nếu không có thông tin từ các quy trình mpirun chỉ có thể chạy dưới dạng các cá thể MPI đơn lẻ và do đó tất cả chúng đều có thứ hạng 0 (điều này là OK, vì mỗi MPI_COMM_WORLD là một riêng biệt).