X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0facf52013684615c801816de974754778c9474a..b3d8b99d09ddcb3d3038ae6868178e1ba7b6aa86:/src/smpi/bindings/smpi_pmpi_comm.cpp diff --git a/src/smpi/bindings/smpi_pmpi_comm.cpp b/src/smpi/bindings/smpi_pmpi_comm.cpp index 4b1718442d..c30dfda3e9 100644 --- a/src/smpi/bindings/smpi_pmpi_comm.cpp +++ b/src/smpi/bindings/smpi_pmpi_comm.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2023. 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. */ @@ -6,9 +6,10 @@ #include #include "private.hpp" +#include "simgrid/s4u/Engine.hpp" #include "smpi_comm.hpp" -#include "smpi_info.hpp" #include "smpi_errhandler.hpp" +#include "smpi_info.hpp" #include "src/smpi/include/smpi_actor.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi_pmpi); @@ -108,6 +109,7 @@ int PMPI_Comm_free(MPI_Comm * comm) { CHECK_NULL(1, MPI_ERR_ARG, comm) CHECK_COMM2(1, *comm) + CHECK_MPI_NULL(1, MPI_COMM_WORLD, MPI_ERR_COMM, *comm) simgrid::smpi::Comm::destroy(*comm); *comm = MPI_COMM_NULL; return MPI_SUCCESS; @@ -127,11 +129,11 @@ int PMPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm* comm_out) { CHECK_NULL(4, MPI_ERR_ARG, comm_out) CHECK_COMM2(1, comm) - if( color != MPI_UNDEFINED)//we use a negative value for MPI_UNDEFINED + CHECK_COLLECTIVE(comm, __func__) + if( color != MPI_UNDEFINED)//we use a negative value for MPI_UNDEFINED CHECK_NEGATIVE(3, MPI_ERR_ARG, color) - smpi_bench_end(); + const SmpiBenchGuard suspend_bench; *comm_out = comm->split(color, key); - smpi_bench_begin(); return MPI_SUCCESS; } @@ -139,9 +141,9 @@ int PMPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, { CHECK_COMM(1) CHECK_NULL(5, MPI_ERR_ARG, newcomm) - smpi_bench_end(); + CHECK_COLLECTIVE(comm, __func__) + const SmpiBenchGuard suspend_bench; *newcomm = comm->split_type(split_type, key, info); - smpi_bench_begin(); return MPI_SUCCESS; } @@ -150,9 +152,8 @@ int PMPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int, MPI_Comm* comm_o CHECK_COMM(1) CHECK_GROUP(2, group) CHECK_NULL(5, MPI_ERR_ARG, comm_out) - smpi_bench_end(); + const SmpiBenchGuard suspend_bench; int retval = MPI_Comm_create(comm, group, comm_out); - smpi_bench_begin(); return retval; } @@ -182,7 +183,7 @@ int PMPI_Comm_get_info(MPI_Comm comm, MPI_Info* info) { CHECK_COMM(1) CHECK_NULL(2, MPI_ERR_ARG, info) - *info = comm->info(); + *info = new simgrid::smpi::Info(comm->info()); return MPI_SUCCESS; } @@ -209,6 +210,8 @@ int PMPI_Comm_free_keyval(int* keyval) { } int PMPI_Comm_test_inter(MPI_Comm comm, int* flag){ + CHECK_COMM(1) + if(flag == nullptr) return MPI_ERR_ARG; *flag=false; @@ -217,6 +220,7 @@ int PMPI_Comm_test_inter(MPI_Comm comm, int* flag){ int PMPI_Attr_delete(MPI_Comm comm, int keyval) { CHECK_COMM(1) + CHECK_VAL(2, MPI_KEYVAL_INVALID, MPI_ERR_KEYVAL, keyval) if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE) return MPI_ERR_ARG; @@ -234,6 +238,7 @@ int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) { CHECK_NULL(4, MPI_ERR_ARG, flag) *flag = 0; CHECK_COMM(1) + CHECK_VAL(2, MPI_KEYVAL_INVALID, MPI_ERR_KEYVAL, keyval) switch (keyval) { case MPI_HOST: @@ -244,7 +249,7 @@ int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) { return MPI_SUCCESS; case MPI_UNIVERSE_SIZE: *flag = 1; - universe_size = smpi_get_universe_size(); + universe_size = simgrid::s4u::Engine::get_instance()->get_host_count(); *static_cast(attr_value) = &universe_size; return MPI_SUCCESS; case MPI_LASTUSEDCODE: @@ -266,6 +271,7 @@ int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) { int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) { CHECK_COMM(1) + CHECK_VAL(2, MPI_KEYVAL_INVALID, MPI_ERR_KEYVAL, keyval) if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE) return MPI_ERR_ARG; @@ -275,7 +281,9 @@ int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) { int PMPI_Errhandler_free(MPI_Errhandler* errhandler){ CHECK_NULL(1, MPI_ERR_ARG, errhandler) + CHECK_MPI_NULL(1, MPI_ERRHANDLER_NULL, MPI_ERR_ARG, *errhandler) simgrid::smpi::Errhandler::unref(*errhandler); + *errhandler = MPI_ERRHANDLER_NULL; return MPI_SUCCESS; } @@ -308,6 +316,18 @@ int PMPI_Comm_call_errhandler(MPI_Comm comm,int errorcode){ return MPI_SUCCESS; } +MPI_Errhandler PMPI_Errhandler_f2c(MPI_Fint errhan){ + if(errhan==-1) + return MPI_ERRHANDLER_NULL; + return simgrid::smpi::Errhandler::f2c(errhan); +} + +MPI_Fint PMPI_Errhandler_c2f(MPI_Errhandler errhan){ + if(errhan==MPI_ERRHANDLER_NULL) + return -1; + return errhan->c2f(); +} + int PMPI_Comm_create_errhandler( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler){ return MPI_Errhandler_create(function, errhandler); }