root/ompi/mca/coll/monitoring/coll_monitoring_neighbor_alltoall.c

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

DEFINITIONS

This source file includes following definitions.
  1. mca_coll_monitoring_neighbor_alltoall
  2. mca_coll_monitoring_ineighbor_alltoall

   1 /*
   2  * Copyright (c) 2016-2018 Inria. All rights reserved.
   3  * $COPYRIGHT$
   4  *
   5  * Additional copyrights may follow
   6  *
   7  * $HEADER$
   8  */
   9 
  10 #include <ompi_config.h>
  11 #include <ompi/request/request.h>
  12 #include <ompi/datatype/ompi_datatype.h>
  13 #include <ompi/communicator/communicator.h>
  14 #include <ompi/mca/topo/base/base.h>
  15 #include "coll_monitoring.h"
  16 
  17 int mca_coll_monitoring_neighbor_alltoall(const void *sbuf, int scount,
  18                                           struct ompi_datatype_t *sdtype,
  19                                           void* rbuf, int rcount,
  20                                           struct ompi_datatype_t *rdtype,
  21                                           struct ompi_communicator_t *comm,
  22                                           mca_coll_base_module_t *module)
  23 {
  24     mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
  25     size_t type_size, data_size, data_size_aggreg = 0;
  26     const mca_topo_base_comm_cart_t *cart = comm->c_topo->mtc.cart;
  27     int dim, srank, drank, world_rank;
  28 
  29     ompi_datatype_type_size(sdtype, &type_size);
  30     data_size = scount * type_size;
  31 
  32     for( dim = 0; dim < cart->ndims; ++dim ) {
  33         srank = MPI_PROC_NULL, drank = MPI_PROC_NULL;
  34 
  35         if (cart->dims[dim] > 1) {
  36             mca_topo_base_cart_shift (comm, dim, 1, &srank, &drank);
  37         } else if (1 == cart->dims[dim] && cart->periods[dim]) {
  38             /* Don't record exchanges with self */
  39             continue;
  40         }
  41 
  42         if (MPI_PROC_NULL != srank) {
  43             /**
  44              * If this fails the destination is not part of my MPI_COM_WORLD
  45              * Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
  46              */
  47             if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(srank, comm->c_remote_group, &world_rank) ) {
  48                 mca_common_monitoring_record_coll(world_rank, data_size);
  49                 data_size_aggreg += data_size;
  50             }
  51         }
  52 
  53         if (MPI_PROC_NULL != drank) {
  54             /**
  55              * If this fails the destination is not part of my MPI_COM_WORLD
  56              * Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
  57              */
  58             if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(drank, comm->c_remote_group, &world_rank) ) {
  59                 mca_common_monitoring_record_coll(world_rank, data_size);
  60                 data_size_aggreg += data_size;
  61             }
  62         }
  63     }
  64 
  65     mca_common_monitoring_coll_a2a(data_size_aggreg, monitoring_module->data);
  66 
  67     return monitoring_module->real.coll_neighbor_alltoall(sbuf, scount, sdtype, rbuf, rcount, rdtype, comm, monitoring_module->real.coll_neighbor_alltoall_module);
  68 }
  69 
  70 int mca_coll_monitoring_ineighbor_alltoall(const void *sbuf, int scount,
  71                                            struct ompi_datatype_t *sdtype,
  72                                            void *rbuf, int rcount,
  73                                            struct ompi_datatype_t *rdtype,
  74                                            struct ompi_communicator_t *comm,
  75                                            ompi_request_t ** request,
  76                                            mca_coll_base_module_t *module)
  77 {
  78     mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
  79     size_t type_size, data_size, data_size_aggreg = 0;
  80     const mca_topo_base_comm_cart_t *cart = comm->c_topo->mtc.cart;
  81     int dim, srank, drank, world_rank;
  82 
  83     ompi_datatype_type_size(sdtype, &type_size);
  84     data_size = scount * type_size;
  85 
  86     for( dim = 0; dim < cart->ndims; ++dim ) {
  87         srank = MPI_PROC_NULL, drank = MPI_PROC_NULL;
  88 
  89         if (cart->dims[dim] > 1) {
  90             mca_topo_base_cart_shift (comm, dim, 1, &srank, &drank);
  91         } else if (1 == cart->dims[dim] && cart->periods[dim]) {
  92             /* Don't record exchanges with self */
  93             continue;
  94         }
  95 
  96         if (MPI_PROC_NULL != srank) {
  97             /**
  98              * If this fails the destination is not part of my MPI_COM_WORLD
  99              * Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
 100              */
 101             if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(srank, comm->c_remote_group, &world_rank) ) {
 102                 mca_common_monitoring_record_coll(world_rank, data_size);
 103                 data_size_aggreg += data_size;
 104             }
 105         }
 106 
 107         if (MPI_PROC_NULL != drank) {
 108             /**
 109              * If this fails the destination is not part of my MPI_COM_WORLD
 110              * Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
 111              */
 112             if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(drank, comm->c_remote_group, &world_rank) ) {
 113                 mca_common_monitoring_record_coll(world_rank, data_size);
 114                 data_size_aggreg += data_size;
 115             }
 116         }
 117     }
 118 
 119     mca_common_monitoring_coll_a2a(data_size_aggreg, monitoring_module->data);
 120 
 121     return monitoring_module->real.coll_ineighbor_alltoall(sbuf, scount, sdtype, rbuf, rcount, rdtype, comm, request, monitoring_module->real.coll_ineighbor_alltoall_module);
 122 }

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