[GIT] ppl/ppl(MPI): Init: call MPI_Init and MPI_Finalize directly, instead of using an mpi::environment, avoiding crashes on some systems.

Module: ppl/ppl Branch: MPI Commit: 4b615df4b01f520c6a3f67ccd2af4dfe7db19670 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=4b615df4b01f5...
Author: Marco Poletti poletti.marco@gmail.com Date: Fri Sep 10 12:01:54 2010 +0200
Init: call MPI_Init and MPI_Finalize directly, instead of using an mpi::environment, avoiding crashes on some systems.
---
src/Init.cc | 11 +++++------ src/Init.defs.hh | 1 - 2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/src/Init.cc b/src/Init.cc index c5eaf18..1c4a9d6 100644 --- a/src/Init.cc +++ b/src/Init.cc @@ -52,8 +52,7 @@ unsigned int PPL::Init::count = 0; PPL::fpu_rounding_direction_type PPL::Init::old_rounding_direction;
#if USE_PPL_DISTRIBUTED_SPARSE_MATRIX -boost::mpi::communicator* PPL::Init::mpi_communicator; -boost::mpi::environment* PPL::Init::mpi_environment; +boost::mpi::communicator* PPL::Init::mpi_communicator = NULL; #endif // USE_PPL_DISTRIBUTED_SPARSE_MATRIX
extern "C" void @@ -189,11 +188,11 @@ PPL::Init::Init() {
#if USE_PPL_DISTRIBUTED_SPARSE_MATRIX // Initialize MPI - int fake_argc = 0; + int fake_argc = 1; char c = '\0'; char *fake_argv0 = &c; char **fake_argv = &fake_argv0; - mpi_environment = new boost::mpi::environment(fake_argc, fake_argv); + MPI_Init(&fake_argc, &fake_argv); mpi_communicator = new boost::mpi::communicator(); if (mpi_communicator->rank() == 0) { Distributed_Sparse_Matrix::init_root(*mpi_communicator); @@ -201,7 +200,7 @@ PPL::Init::Init() { // WARNING: worker nodes will block here until process termination Distributed_Sparse_Matrix::worker_main_loop(*mpi_communicator); delete mpi_communicator; - delete mpi_environment; + MPI_Finalize(); exit(0); } #endif // USE_PPL_DISTRIBUTED_SPARSE_MATRIX @@ -215,7 +214,7 @@ PPL::Init::~Init() { // Release MPI resources. Distributed_Sparse_Matrix::quit_workers(); delete mpi_communicator; - delete mpi_environment; + MPI_Finalize(); #endif // USE_PPL_DISTRIBUTED_SPARSE_MATRIX
#if PPL_CAN_CONTROL_FPU diff --git a/src/Init.defs.hh b/src/Init.defs.hh index 7df6a7e..f9f2ed3 100644 --- a/src/Init.defs.hh +++ b/src/Init.defs.hh @@ -86,7 +86,6 @@ private: static fpu_rounding_direction_type old_rounding_direction; #if USE_PPL_DISTRIBUTED_SPARSE_MATRIX static boost::mpi::communicator* mpi_communicator; - static boost::mpi::environment* mpi_environment; #endif
friend void set_rounding_for_PPL();
participants (1)
-
Marco Poletti