X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/86f9a6c7bece8591b61752ee74a005e14fe3af50..cf869a3045fd74ea98772ef02dc3d20ea81630c1:/src/smpi/smpi_deployment.cpp diff --git a/src/smpi/smpi_deployment.cpp b/src/smpi/smpi_deployment.cpp index df0686c95d..e5d4c38d4a 100644 --- a/src/smpi/smpi_deployment.cpp +++ b/src/smpi/smpi_deployment.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2014. The SimGrid Team. +/* Copyright (c) 2004-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -6,6 +6,7 @@ #include "private.h" #include "simgrid/msg.h" /* barrier */ +#include "src/smpi/SmpiHost.hpp" #include "xbt/dict.h" #include "xbt/log.h" #include "xbt/sysdep.h" @@ -37,6 +38,19 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_ s_smpi_mpi_instance_t* instance = (s_smpi_mpi_instance_t*)xbt_malloc(sizeof(s_smpi_mpi_instance_t)); + static int already_called = 0; + if (!already_called) { + already_called = 1; + xbt_dynar_t hosts = MSG_hosts_as_dynar(); + unsigned int cursor; + void* h; + xbt_dynar_foreach(hosts, cursor, h) { + simgrid::s4u::Host* host = static_cast(h); + host->extension_set(new simgrid::smpi::SmpiHost(host)); + } + xbt_dynar_free(&hosts); + } + instance->name = name; instance->size = num_processes; instance->present_processes = 0; @@ -50,6 +64,7 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_ smpi_instances = xbt_dict_new_homogeneous(xbt_free_f); } + xbt_dict_set(smpi_instances, name, (void*)instance, nullptr); } @@ -67,8 +82,8 @@ void smpi_deployment_register_process(const char* instance_id, int rank, int ind xbt_assert(instance, "Error, unknown instance %s", instance_id); if(instance->comm_world == MPI_COMM_NULL){ - MPI_Group group = new Group(instance->size); - instance->comm_world = new Comm(group, nullptr); + MPI_Group group = new simgrid::smpi::Group(instance->size); + instance->comm_world = new simgrid::smpi::Comm(group, nullptr); } instance->present_processes++; index_to_process_data[index]=instance->index+rank;