X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c82722a20d8b3e331e865db637b4a0fa9f415d22..a7c708d3570410ce5a1316a54f9dda55d2bb46ca:/src/smpi/mpi/smpi_comm.cpp diff --git a/src/smpi/mpi/smpi_comm.cpp b/src/smpi/mpi/smpi_comm.cpp index 3da5bbf07c..c256f12d46 100644 --- a/src/smpi/mpi/smpi_comm.cpp +++ b/src/smpi/mpi/smpi_comm.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -57,7 +57,7 @@ void Comm::destroy(Comm* comm) int Comm::dup(MPI_Comm* newcomm){ if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables - smpi_switch_data_segment(smpi_process()->index()); + smpi_switch_data_segment(simgrid::s4u::Actor::self()); } MPI_Group cp = new Group(this->group()); (*newcomm) = new Comm(cp, this->topo()); @@ -107,7 +107,7 @@ int Comm::rank() { if (this == MPI_COMM_UNINITIALIZED) return smpi_process()->comm_world()->rank(); - return group_->rank(smpi_process()->index()); + return group_->rank(simgrid::s4u::Actor::self()); } void Comm::get_name (char* name, int* len) @@ -300,7 +300,7 @@ void Comm::init_smp(){ } if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables - smpi_switch_data_segment(smpi_process()->index()); + smpi_switch_data_segment(simgrid::s4u::Actor::self()); } //identify neighbours in comm //get the indices of all processes sharing the same simix host @@ -308,7 +308,7 @@ void Comm::init_smp(){ int intra_comm_size = 0; int min_index = INT_MAX; // the minimum index will be the leader for (auto& actor : process_list) { - int index = actor.pid - 1; + int index = actor.pid; if (this->group()->rank(actor.iface()) != MPI_UNDEFINED) { // Is this process in the current group? intra_comm_size++; if (index < min_index) @@ -319,7 +319,6 @@ void Comm::init_smp(){ MPI_Group group_intra = new Group(intra_comm_size); int i = 0; for (auto& actor : process_list) { - // TODO cheinrich : We should not need the const_cast here and above. if (this->group()->rank(actor.iface()) != MPI_UNDEFINED) { group_intra->set_mapping(actor.iface(), i); i++; @@ -337,7 +336,7 @@ void Comm::init_smp(){ Coll_allgather_mpich::allgather(&leader, 1, MPI_INT , leaders_map, 1, MPI_INT, this); if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables - smpi_switch_data_segment(smpi_process()->index()); + smpi_switch_data_segment(simgrid::s4u::Actor::self()); } if(leaders_map_==nullptr){ @@ -366,7 +365,7 @@ void Comm::init_smp(){ if(MPI_COMM_WORLD!=MPI_COMM_UNINITIALIZED && this!=MPI_COMM_WORLD){ //create leader_communicator for (i=0; i< leader_group_size;i++) - leaders_group->set_mapping(simgrid::s4u::Actor::byPid(leader_list[i]+1), i); + leaders_group->set_mapping(simgrid::s4u::Actor::byPid(leader_list[i]), i); leader_comm = new Comm(leaders_group, nullptr); this->set_leaders_comm(leader_comm); this->set_intra_comm(comm_intra); @@ -374,7 +373,7 @@ void Comm::init_smp(){ // create intracommunicator }else{ for (i=0; i< leader_group_size;i++) - leaders_group->set_mapping(simgrid::s4u::Actor::byPid(leader_list[i]+1), i); + leaders_group->set_mapping(simgrid::s4u::Actor::byPid(leader_list[i]), i); if(this->get_leaders_comm()==MPI_COMM_NULL){ leader_comm = new Comm(leaders_group, nullptr); @@ -409,7 +408,7 @@ void Comm::init_smp(){ Coll_bcast_mpich::bcast(&(is_uniform_),1, MPI_INT, 0, comm_intra ); if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables - smpi_switch_data_segment(smpi_process()->index()); + smpi_switch_data_segment(simgrid::s4u::Actor::self()); } // Are the ranks blocked ? = allocated contiguously on the SMP nodes int is_blocked=1;