Giả sử tôi có lý do chính đáng để thực hiện những điều sau (tôi nghĩ mình có), cách làm cho nó hoạt động?mpi nhiều init hoàn thành
#include "mpi.h"
int main(int argc, char *argv[])
{
int myid, numprocs;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
// ...
MPI_Finalize();
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
// ...
MPI_Finalize();
return 0;
}
Tôi đã nhận lỗi:
--------------------------------------------------------------------------
Calling any MPI-function after calling MPI_Finalize is erroneous.
The only exceptions are MPI_Initialized, MPI_Finalized and MPI_Get_version.
--------------------------------------------------------------------------
*** An error occurred in MPI_Init
*** after MPI was finalized
*** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
[ange:13049] Abort after MPI_FINALIZE completed successfully; not able to guarantee that all other processes were killed!
Lý do để làm điều đó:
Tôi đã Python gói xung quanh C++. Một số lớp bọc có hàm tạo gọi là MPI_Init và hàm hủy gọi là MPI_Finalize. Tôi muốn để có thể trong Python để tự do tạo, xóa tái tạo đối tượng Python bọc lớp C++ này. Mục tiêu cuối cùng là tạo một webservice hoàn toàn bằng Python, nhập khẩu Python C++ exstension một lần, và thực hiện một số mã Python cho yêu cầu của người dùng. EDIT: Tôi nghĩ rằng tôi sẽ refactor mã C++ để cung cấp cho khả năng không MPI_Init và MPI_Finalize trong constructor và destructor, do đó, nó có thể làm điều đó một cách chính xác một thời gian trong kịch bản Python (sử dụng mpi4py).