From a16726652e64ac1eb582d182820b32075953c956 Mon Sep 17 00:00:00 2001 From: "raphael.bach" <raphael.bach@etu.hesge.ch> Date: Fri, 1 Jul 2022 20:58:44 +0200 Subject: [PATCH] Add `fmpi_mpi_dims_create()` --- include/internal/fmpi_mpi.h | 6 ++++++ src/fmpi_mpi.c | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/internal/fmpi_mpi.h b/include/internal/fmpi_mpi.h index 5202625..5de44f6 100644 --- a/include/internal/fmpi_mpi.h +++ b/include/internal/fmpi_mpi.h @@ -237,6 +237,12 @@ int fmpi_mpi_world_reduce_in_place( const struct fmpi_mpi_ctx * ctx, void * buf, size_t cnt, MPI_Datatype type, MPI_Op op ); +/*------------------------------------------------------------------------------ + fmpi_mpi_dims_create() +------------------------------------------------------------------------------*/ +int fmpi_mpi_dims_create( + const struct fmpi_mpi_ctx * ctx, size_t * const dim_len, size_t dim_cnt +); /*============================================================================== GUARD ==============================================================================*/ diff --git a/src/fmpi_mpi.c b/src/fmpi_mpi.c index b28b8bd..1af313b 100644 --- a/src/fmpi_mpi.c +++ b/src/fmpi_mpi.c @@ -32,6 +32,7 @@ // External #include <mpi.h> // Internal +#include "internal/fmpi_common.h" #include "internal/fmpi_error.h" #include "internal/fmpi_type.h" /*============================================================================== @@ -314,3 +315,24 @@ int fmpi_mpi_world_reduce_in_place( } return err; } +/*------------------------------------------------------------------------------ + fmpi_mpi_dims_create() +------------------------------------------------------------------------------*/ +int fmpi_mpi_dims_create( + const struct fmpi_mpi_ctx * const ctx, size_t * const dim_len, + const size_t dim_cnt +){ + assert(ctx != NULL); + assert(dim_len != NULL); + assert(dim_cnt <= FMPI_DIM_MAX); + int dims[FMPI_DIM_MAX]; + for(size_t i = 0; i < dim_cnt; i++) { + dims[i] = (int)dim_len[i]; + } + const int err = MPI_Dims_create(ctx->size, (int)dim_cnt, dims); + for(size_t i = 0; i < dim_cnt; i++) { + assert(dims[i] >= 0); + dim_len[i] = (size_t)dims[i]; + } + return fmpi_mpi_check_error(ctx, err, "MPI_Dims_create"); +} -- GitLab