This source file includes following definitions.
- mca_coll_monitoring_neighbor_alltoall
- mca_coll_monitoring_ineighbor_alltoall
1
2
3
4
5
6
7
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
39 continue;
40 }
41
42 if (MPI_PROC_NULL != srank) {
43
44
45
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
56
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
93 continue;
94 }
95
96 if (MPI_PROC_NULL != srank) {
97
98
99
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
110
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 }