std::map</* computation unit name */ std::string, papi_process_data> units2papi_setup;
#endif
-using simgrid::s4u::Actor;
-using simgrid::s4u::ActorPtr;
std::unordered_map<std::string, double> location2speedup;
-static std::map</*process_id*/ ActorPtr, simgrid::smpi::ActorExt*> process_data;
+static std::map</*process_id*/ simgrid::s4u::Actor const*, simgrid::smpi::ActorExt*> process_data;
int process_count = 0;
static int smpi_exit_status = 0;
int smpi_universe_size = 0;
simgrid::smpi::ActorExt* smpi_process()
{
- ActorPtr me = Actor::self();
+ simgrid::s4u::ActorPtr me = simgrid::s4u::Actor::self();
if (me == nullptr) // This happens sometimes (eg, when linking against NS3 because it pulls openMPI...)
return nullptr;
- return process_data.at(me);
+ return process_data.at(me.get());
}
-simgrid::smpi::ActorExt* smpi_process_remote(ActorPtr actor)
+simgrid::smpi::ActorExt* smpi_process_remote(simgrid::s4u::ActorPtr actor)
{
- return process_data.at(actor);
+ return process_data.at(actor.get());
}
MPI_Comm smpi_process_comm_self(){
}
void * smpi_process_get_user_data(){
- return Actor::self()->get_impl()->get_user_data();
+ return simgrid::s4u::Actor::self()->get_impl()->get_user_data();
}
void smpi_process_set_user_data(void *data){
- Actor::self()->get_impl()->set_user_data(data);
+ simgrid::s4u::Actor::self()->get_impl()->set_user_data(data);
}
typedef int (* smpi_c_entry_point_type)(int argc, char **argv);
typedef void (*smpi_fortran_entry_point_type)();
-static int smpi_run_entry_point(smpi_entry_point_type entry_point, const std::string& executable_path,
+static int smpi_run_entry_point(const smpi_entry_point_type& entry_point, const std::string& executable_path,
std::vector<std::string> args)
{
// copy C strings, we need them writable
int smpi_main(const char* executable, int argc, char* argv[])
{
- srand(SMPI_RAND_SEED);
-
if (getenv("SMPI_PRETEND_CC") != nullptr) {
/* Hack to ensure that smpicc can pretend to be a simple compiler. Particularly handy to pass it to the
* configuration tools */
// Called either directly from the user code, or from the code called by smpirun
void SMPI_init(){
- simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::ActorPtr actor) {
- if (not actor->is_daemon()) {
- process_data.insert({actor, new simgrid::smpi::ActorExt(actor, nullptr)});
+ simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::Actor& actor) {
+ if (not actor.is_daemon()) {
+ process_data.insert({&actor, new simgrid::smpi::ActorExt(&actor, nullptr)});
}
});
- simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::ActorPtr actor) {
- auto it = process_data.find(actor);
+ simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::Actor const& actor) {
+ auto it = process_data.find(&actor);
if (it != process_data.end()) {
delete it->second;
process_data.erase(it);