1 /* 2 * Copyright (C) by Argonne National Laboratory 3 * See COPYRIGHT in top-level directory 4 */ 5 6 #ifndef MPIR_CSEL_H_INCLUDED 7 #define MPIR_CSEL_H_INCLUDED 8 9 #include "json.h" 10 #include "coll_impl.h" 11 12 typedef enum { 13 MPIR_CSEL_COLL_TYPE__ALLGATHER = 0, 14 MPIR_CSEL_COLL_TYPE__ALLGATHERV, 15 MPIR_CSEL_COLL_TYPE__ALLREDUCE, 16 MPIR_CSEL_COLL_TYPE__ALLTOALL, 17 MPIR_CSEL_COLL_TYPE__ALLTOALLV, 18 MPIR_CSEL_COLL_TYPE__ALLTOALLW, 19 MPIR_CSEL_COLL_TYPE__BARRIER, 20 MPIR_CSEL_COLL_TYPE__BCAST, 21 MPIR_CSEL_COLL_TYPE__EXSCAN, 22 MPIR_CSEL_COLL_TYPE__GATHER, 23 MPIR_CSEL_COLL_TYPE__GATHERV, 24 MPIR_CSEL_COLL_TYPE__IALLGATHER, 25 MPIR_CSEL_COLL_TYPE__IALLGATHERV, 26 MPIR_CSEL_COLL_TYPE__IALLREDUCE, 27 MPIR_CSEL_COLL_TYPE__IALLTOALL, 28 MPIR_CSEL_COLL_TYPE__IALLTOALLV, 29 MPIR_CSEL_COLL_TYPE__IALLTOALLW, 30 MPIR_CSEL_COLL_TYPE__IBARRIER, 31 MPIR_CSEL_COLL_TYPE__IBCAST, 32 MPIR_CSEL_COLL_TYPE__IEXSCAN, 33 MPIR_CSEL_COLL_TYPE__IGATHER, 34 MPIR_CSEL_COLL_TYPE__IGATHERV, 35 MPIR_CSEL_COLL_TYPE__INEIGHBOR_ALLGATHER, 36 MPIR_CSEL_COLL_TYPE__INEIGHBOR_ALLGATHERV, 37 MPIR_CSEL_COLL_TYPE__INEIGHBOR_ALLTOALL, 38 MPIR_CSEL_COLL_TYPE__INEIGHBOR_ALLTOALLV, 39 MPIR_CSEL_COLL_TYPE__INEIGHBOR_ALLTOALLW, 40 MPIR_CSEL_COLL_TYPE__IREDUCE, 41 MPIR_CSEL_COLL_TYPE__IREDUCE_SCATTER, 42 MPIR_CSEL_COLL_TYPE__IREDUCE_SCATTER_BLOCK, 43 MPIR_CSEL_COLL_TYPE__ISCAN, 44 MPIR_CSEL_COLL_TYPE__ISCATTER, 45 MPIR_CSEL_COLL_TYPE__ISCATTERV, 46 MPIR_CSEL_COLL_TYPE__NEIGHBOR_ALLGATHER, 47 MPIR_CSEL_COLL_TYPE__NEIGHBOR_ALLGATHERV, 48 MPIR_CSEL_COLL_TYPE__NEIGHBOR_ALLTOALL, 49 MPIR_CSEL_COLL_TYPE__NEIGHBOR_ALLTOALLV, 50 MPIR_CSEL_COLL_TYPE__NEIGHBOR_ALLTOALLW, 51 MPIR_CSEL_COLL_TYPE__REDUCE, 52 MPIR_CSEL_COLL_TYPE__REDUCE_SCATTER, 53 MPIR_CSEL_COLL_TYPE__REDUCE_SCATTER_BLOCK, 54 MPIR_CSEL_COLL_TYPE__SCAN, 55 MPIR_CSEL_COLL_TYPE__SCATTER, 56 MPIR_CSEL_COLL_TYPE__SCATTERV, 57 MPIR_CSEL_COLL_TYPE__END, 58 } MPIR_Csel_coll_type_e; 59 60 typedef struct { 61 MPIR_Csel_coll_type_e coll_type; 62 MPIR_Comm *comm_ptr; 63 64 union { 65 struct { 66 const void *sendbuf; 67 int sendcount; 68 MPI_Datatype sendtype; 69 void *recvbuf; 70 int recvcount; 71 MPI_Datatype recvtype; 72 } allgather, iallgather, neighbor_allgather, ineighbor_allgather; 73 struct { 74 const void *sendbuf; 75 int sendcount; 76 MPI_Datatype sendtype; 77 void *recvbuf; 78 const int *recvcounts; 79 const int *displs; 80 MPI_Datatype recvtype; 81 } allgatherv, iallgatherv, neighbor_allgatherv, ineighbor_allgatherv; 82 struct { 83 const void *sendbuf; 84 void *recvbuf; 85 int count; 86 MPI_Datatype datatype; 87 MPI_Op op; 88 } allreduce, iallreduce; 89 struct { 90 const void *sendbuf; 91 int sendcount; 92 MPI_Datatype sendtype; 93 int recvcount; 94 void *recvbuf; 95 MPI_Datatype recvtype; 96 } alltoall, ialltoall, neighbor_alltoall, ineighbor_alltoall; 97 struct { 98 const void *sendbuf; 99 const int *sendcounts; 100 const int *sdispls; 101 MPI_Datatype sendtype; 102 void *recvbuf; 103 const int *recvcounts; 104 const int *rdispls; 105 MPI_Datatype recvtype; 106 } alltoallv, ialltoallv, neighbor_alltoallv, ineighbor_alltoallv; 107 struct { 108 const void *sendbuf; 109 const int *sendcounts; 110 const int *sdispls; 111 const MPI_Datatype *sendtypes; 112 void *recvbuf; 113 const int *recvcounts; 114 const int *rdispls; 115 const MPI_Datatype *recvtypes; 116 } alltoallw, ialltoallw; 117 struct { 118 const void *sendbuf; 119 const int *sendcounts; 120 const MPI_Aint *sdispls; 121 const MPI_Datatype *sendtypes; 122 void *recvbuf; 123 const int *recvcounts; 124 const MPI_Aint *rdispls; 125 const MPI_Datatype *recvtypes; 126 } neighbor_alltoallw, ineighbor_alltoallw; 127 struct { 128 int dummy; /* some compiler (suncc) doesn't like empty struct */ 129 } barrier, ibarrier; 130 struct { 131 void *buffer; 132 int count; 133 MPI_Datatype datatype; 134 int root; 135 } bcast, ibcast; 136 struct { 137 const void *sendbuf; 138 void *recvbuf; 139 int count; 140 MPI_Datatype datatype; 141 MPI_Op op; 142 } exscan, iexscan; 143 struct { 144 const void *sendbuf; 145 int sendcount; 146 MPI_Datatype sendtype; 147 int recvcount; 148 void *recvbuf; 149 MPI_Datatype recvtype; 150 int root; 151 } gather, igather, scatter, iscatter; 152 struct { 153 const void *sendbuf; 154 int sendcount; 155 MPI_Datatype sendtype; 156 void *recvbuf; 157 const int *recvcounts; 158 const int *displs; 159 MPI_Datatype recvtype; 160 int root; 161 } gatherv, igatherv; 162 struct { 163 const void *sendbuf; 164 void *recvbuf; 165 int count; 166 MPI_Datatype datatype; 167 MPI_Op op; 168 int root; 169 } reduce, ireduce; 170 struct { 171 const void *sendbuf; 172 void *recvbuf; 173 const int *recvcounts; 174 MPI_Datatype datatype; 175 MPI_Op op; 176 } reduce_scatter, ireduce_scatter; 177 struct { 178 const void *sendbuf; 179 void *recvbuf; 180 int recvcount; 181 MPI_Datatype datatype; 182 MPI_Op op; 183 } reduce_scatter_block, ireduce_scatter_block; 184 struct { 185 const void *sendbuf; 186 void *recvbuf; 187 int count; 188 MPI_Datatype datatype; 189 MPI_Op op; 190 } scan, iscan; 191 struct { 192 const void *sendbuf; 193 const int *sendcounts; 194 const int *displs; 195 MPI_Datatype sendtype; 196 int recvcount; 197 void *recvbuf; 198 MPI_Datatype recvtype; 199 int root; 200 } scatterv, iscatterv; 201 } u; 202 } MPIR_Csel_coll_sig_s; 203 204 int MPIR_Csel_create_from_file(const char *json_file, 205 void *(*create_container) (struct json_object *), void **csel); 206 int MPIR_Csel_create_from_buf(const char *json, 207 void *(*create_container) (struct json_object *), void **csel); 208 int MPIR_Csel_free(void *csel); 209 int MPIR_Csel_prune(void *root_csel, MPIR_Comm * comm_ptr, void **comm_csel); 210 void *MPIR_Csel_search(void *csel, MPIR_Csel_coll_sig_s coll_sig); 211 212 #endif /* MPIR_CSEL_H_INCLUDED */ 213