diff --git a/include/internal/fmpi_mpi.h b/include/internal/fmpi_mpi.h
index 520262592b65e2a6df0c89e766a1a017bc811152..5de44f6cd141b4975c17237778859e2b24e9547a 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 b28b8bd0a66d70597fe20e51d43b477ca3aa024c..1af313b5c27f6d83f7cea3dcfb760b3eaa3cfbce 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");
+}