root/ompi/mca/topo/base/topo_base_cart_map.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mca_topo_base_cart_map

   1 /*
   2  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
   3  *                         University Research and Technology
   4  *                         Corporation.  All rights reserved.
   5  * Copyright (c) 2004-2013 The University of Tennessee and The University
   6  *                         of Tennessee Research Foundation.  All rights
   7  *                         reserved.
   8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
   9  *                         University of Stuttgart.  All rights reserved.
  10  * Copyright (c) 2004-2005 The Regents of the University of California.
  11  *                         All rights reserved.
  12  * Copyright (c) 2015      Research Organization for Information Science
  13  *                         and Technology (RIST). All rights reserved.
  14  * $COPYRIGHT$
  15  *
  16  * Additional copyrights may follow
  17  *
  18  * $HEADER$
  19  */
  20 
  21 #include "ompi_config.h"
  22 #include "ompi/mca/topo/base/base.h"
  23 #include "ompi/communicator/communicator.h"
  24 
  25 /*
  26  * function - mca_topo_base_cart_map
  27  *
  28  *  @param comm input communicator (handle)
  29  *  @param ndims number of dimensions of cartesian structure (integer)
  30  *  @param dims integer array of size 'ndims' specifying the number of
  31  *              processes in each coordinate direction
  32  *  @param periods logical array of size 'ndims' specifying the
  33  *                 periodicity specification in each coordinate direction
  34  *  @param newrank reordered rank of the calling process; 'MPI_UNDEFINED'
  35  *                 if calling process does not belong to grid (integer)
  36  *
  37  *  @retval MPI_SUCCESS
  38  *  @retval MPI_ERR_DIMS
  39  */
  40 
  41 int mca_topo_base_cart_map(ompi_communicator_t* comm,
  42                            int ndims,
  43                            const int *dims, const int *periods, int *newrank)
  44 {
  45     int nprocs, rank, size, i;
  46 
  47     /*
  48      * Compute the # of processes in the grid.
  49      */
  50     nprocs = 1;
  51     for (i = 0 ; i < ndims; ++i) {
  52         if (dims[i] <= 0) {
  53             return MPI_ERR_DIMS;
  54         }
  55         nprocs *= dims[i];
  56     }
  57     /*
  58      * Check that number of processes <= size of communicator.
  59      */
  60     size = ompi_comm_size(comm);
  61     if (nprocs > size) {
  62         return MPI_ERR_DIMS;
  63     }
  64     /*
  65      * Compute my new rank.
  66      */
  67     rank = ompi_comm_rank(comm);
  68     *newrank = ((rank < 0) || (rank >= nprocs)) ? MPI_UNDEFINED : rank;
  69 
  70     return MPI_SUCCESS;
  71 }

/* [<][>][^][v][top][bottom][index][help] */