Aşağıdakileri yapmak için iyi bir nedenim olduğunu varsayarsak (sanırım sahip olduğum), nasıl çalışır? Ben C++ kod etrafında Python sarma ettikmpi birden çok init sonlandır
:
--------------------------------------------------------------------------
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!
bunu nedeni:
#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;
}
ben hata var. Bazı sarılmış sınıf, MPI_Init ve MPI_Finalize diye adlandırılan yıkıcı olarak adlandırılan kurucuya sahiptir. Python'u özgürce oluşturmak, bu C++ sınıfını saran Python nesnesini yeniden oluşturmak için silmek istiyorum. Nihai amaç, Python C++ exstension'ını bir kez içe aktaran ve kullanıcı isteği göz önüne alındığında bir Python kodu yürüten tamamen Python'da bir web hizmeti oluşturmaktır.
DÜZENLEME: Ben, MPI_Init ve MPI_Finalize yapıcı ve yok ediciye olanak vermek için C++ kodunu yeniden düzenleyeceğimi düşünüyorum, bu yüzden Python komut dosyasında (mpi4py kullanarak) tam olarak bir kez yapmak mümkündür.