2012-02-07 34 views
14

Tôi đang sử dụng các cuộc gọi MPI để chạy một quy trình trên nhiều quy trình bằng cách sử dụng C++. Một vài dòng đầu tiên trong chức năng chính của tôi trông giống như:Truyền đối số qua dòng lệnh với MPI

int main(int argc, char *argv[]){ 
int comm_sz; 
int my_rank; 

MPI_Init(&argc, &argv); 
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz); 
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); 

x = atoi(argv[4]); 
y = atoi(argv[5]); 

Bây giờ khi tôi thực hiện và chạy chương trình của tôi sử dụng

mpiexec -n 1 program 10 10 

Tôi muốn x và y được gán các giá trị 10 và 10, như họ là những đối số 4 và 5 đã trôi qua. Nhưng điều này không xảy ra và nó gán các biến này thành 0 và 0 cho phù hợp. và chương trình của tôi không chạy như mong muốn.

Tôi có mã nối tiếp đang chạy khi tôi thay đổi các số này. Chỉ là tôi mới làm quen với MPI.

Bạn có thể đề xuất nơi tôi đang đi sai?

+0

Bạn đã thử in nội dung của 'argv' chưa? Kết quả là gì? – suszterpatt

+0

Tôi đã làm. Khi tôi in ra các nội dung trong mảng, nó đã nhận ra hai đối số 10, 10 nhưng không ở vị trí 4 và 5. – freshmaster

+0

Dường như đọc chúng như argv [1] và argv [2]. Tôi giải quyết vấn đề của tôi có, nhưng tôi muốn biết tại sao điều này lại xảy ra. Tôi không hiểu chính xác MPI_Init. – freshmaster

Trả lời

15

Trong hầu hết các cài đặt MPI trên Linux/Windows/Mac OSX, khi bạn gọi MPI_Init(&argc, &argv), danh sách đối số được sửa đổi giống như khi bạn chạy vấn đề nối tiếp là program 10 10; nó ăn danh sách đối số lên đến tệp thực thi, có khả năng chứa bất kỳ số tùy chọn nào cho chính lệnh mpirun.

Tiêu chuẩn không chỉ định điều này; tiêu chuẩn để lại rất nhiều điều về việc khởi chạy các tiến trình và quá trình khởi tạo có phần mơ hồ, vì Bộ KH & ĐT phải làm việc trên các hệ thống hoạt động rất khác với các hệ thống kiểu POSIX. Nhưng tôi đã không bao giờ nhìn thấy một thực hiện MPI trong một môi trường kiểu POSIX mà không làm điều này.

(Cập nhật để thêm :) Nhận xét của g.inozemtsev về câu hỏi là một lời giải thích tuyệt vời, ngắn gọn về lý do tại sao điều này xảy ra.

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