Khi viết mã MPI 3.0, tôi có nên chuyển argc
và argv
thực hiện MPI_Init
cuộc gọi hay không, và tại sao?
EDIT: Vì câu trả lời của Bill Barth đã đưa ra một số câu hỏi tôi muốn đưa ra một số nhận xét:
- Đạt
argc
/argv
không bắt buộc kể từ MPI 1.1. - Câu hỏi cụ thể là tại sao nên / không nên vượt qua
argc
/argv
( tại sao bạn không thực sự không phải là một câu trả lời). - Tuy nhiên, đôi khi bạn không thể chuyển
argc
/argv
đếnMPI_Init
(viết thư viện sử dụng khởi tạo tĩnh để khởi động MPI nếu chính nằm ngoài tầm kiểm soát của bạn và MPI là một chi tiết triển khai).
EDIT2: Câu hỏi tại sao bạn không sử dụngMPI_Init(argc, argv)
đã đến quá thường xuyên bây giờ. Một số lý do:
Không thể thực hiện vì mục đích tương thích với các triển khai MPI <1.1 cũ hơn / không tuân thủ / tuân thủ <1.1 nếu bạn đang sử dụng MPI2 hoặc MPI3, những tính năng này sẽ không hoạt động.
MPI_Init()
khởi tạo thời gian chạy MPI theo cách tương tự nhưMPI_Init(argc, argv)
MPI_Init(argc, argv)
loại bỏ lập luận truyền cho Bộ KH & ĐT thời gian chạy từargc
, vàargv
và khởi MPI. AFAIK đó là cách duy nhất để làm sạchargc
vàargv
vì vậy nếu bạn cần những thứ này để không có đối số MPI, bạn cần sử dụng nó.MPI_Init()
có thể được sử dụng trong nhiều tình huống đóMPI_Init(argc, argv)
. Ví dụ, thư viện của bạn sử dụng MPI làm chi tiết triển khai có thể kiểm tra xem MPI có được khởi tạo không, và nếu không, hãy gọiMPI_Init()
và điều đúng sẽ xảy ra. Người dùng của bạn không biết rằng bạn đang sử dụng mpi, không cần phải vượt quaargc
,argv
đến thư viện của bạn, không cần thay đổi chính của họ (trong trường hợp không có đối số) để sử dụng thư viện của bạn ....
MPI_Init()
mà có để có được một cách chính xác các đối số bạn vượt qua để mpirun
/ mpiexec
bằng cách nào đó (nó là không xác định như thế nào), và kể từ khi MPI_Init()
có thể được sử dụng trong các tình huống hơn MPI_Init(argc, argv)
(và không có cách giải quyết), I don' Tôi thực sự thấy được vấn đề khi sử dụng MPI_Init(argc, argv)
nếu bạn đang nhắm mục tiêu MPI 3.0.
argc
và argv
từ các đối số MPI và khởi tạo MPI thì hãy sử dụng MPI_Init(argc, argv)
, nếu không thì MPI_Init()
vẫn ổn (và đôi khi nó là cần thiết).