This source file includes following definitions.
- mca_pml_cm_enable
- mca_pml_cm_add_comm
- mca_pml_cm_del_comm
- mca_pml_cm_add_procs
- mca_pml_cm_del_procs
- mca_pml_cm_dump
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #include "ompi_config.h"
22
23 #include "ompi/communicator/communicator.h"
24 #include "ompi/mca/pml/base/pml_base_request.h"
25 #include "ompi/mca/pml/base/pml_base_bsend.h"
26 #include "ompi/mca/pml/base/base.h"
27
28 #include "pml_cm.h"
29 #include "pml_cm_sendreq.h"
30 #include "pml_cm_recvreq.h"
31
32 ompi_pml_cm_t ompi_pml_cm = {
33 {
34 mca_pml_cm_add_procs,
35 mca_pml_cm_del_procs,
36 mca_pml_cm_enable,
37 NULL,
38 mca_pml_cm_add_comm,
39 mca_pml_cm_del_comm,
40 mca_pml_cm_irecv_init,
41 mca_pml_cm_irecv,
42 mca_pml_cm_recv,
43 mca_pml_cm_isend_init,
44 mca_pml_cm_isend,
45 mca_pml_cm_send,
46 mca_pml_cm_iprobe,
47 mca_pml_cm_probe,
48 mca_pml_cm_start,
49 mca_pml_cm_improbe,
50 mca_pml_cm_mprobe,
51 mca_pml_cm_imrecv,
52 mca_pml_cm_mrecv,
53 mca_pml_cm_dump,
54 NULL,
55 0,
56 0
57 }
58 };
59
60
61 int
62 mca_pml_cm_enable(bool enable)
63 {
64
65
66 opal_free_list_init (&mca_pml_base_send_requests,
67 sizeof(mca_pml_cm_hvy_send_request_t) + ompi_mtl->mtl_request_size,
68 opal_cache_line_size,
69 OBJ_CLASS(mca_pml_cm_hvy_send_request_t),
70 0,opal_cache_line_size,
71 ompi_pml_cm.free_list_num,
72 ompi_pml_cm.free_list_max,
73 ompi_pml_cm.free_list_inc,
74 NULL, 0, NULL, NULL, NULL);
75
76 opal_free_list_init (&mca_pml_base_recv_requests,
77 sizeof(mca_pml_cm_hvy_recv_request_t) + ompi_mtl->mtl_request_size,
78 opal_cache_line_size,
79 OBJ_CLASS(mca_pml_cm_hvy_recv_request_t),
80 0,opal_cache_line_size,
81 ompi_pml_cm.free_list_num,
82 ompi_pml_cm.free_list_max,
83 ompi_pml_cm.free_list_inc,
84 NULL, 0, NULL, NULL, NULL);
85
86 return OMPI_SUCCESS;
87 }
88
89
90 int
91 mca_pml_cm_add_comm(ompi_communicator_t* comm)
92 {
93
94 if (comm->c_contextid > ompi_pml_cm.super.pml_max_contextid) {
95 return OMPI_ERR_OUT_OF_RESOURCE;
96 }
97
98
99 comm->c_pml_comm = NULL;
100
101
102 return OMPI_MTL_CALL(add_comm(ompi_mtl, comm));
103 }
104
105
106 int
107 mca_pml_cm_del_comm(ompi_communicator_t* comm)
108 {
109
110 return OMPI_MTL_CALL(del_comm(ompi_mtl, comm));
111 }
112
113
114 int
115 mca_pml_cm_add_procs(struct ompi_proc_t** procs, size_t nprocs)
116 {
117 int ret;
118
119 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
120 for (size_t i = 0 ; i < nprocs ; ++i) {
121 if (procs[i]->super.proc_arch != ompi_proc_local()->super.proc_arch) {
122 return OMPI_ERR_NOT_SUPPORTED;
123 }
124 }
125 #endif
126
127
128 if (OMPI_SUCCESS != (ret = mca_pml_base_pml_check_selected("cm",
129 procs,
130 nprocs))) {
131 return ret;
132 }
133
134 ret = OMPI_MTL_CALL(add_procs(ompi_mtl, nprocs, procs));
135 return ret;
136 }
137
138
139 int
140 mca_pml_cm_del_procs(struct ompi_proc_t** procs, size_t nprocs)
141 {
142 int ret;
143
144 ret = OMPI_MTL_CALL(del_procs(ompi_mtl, nprocs, procs));
145 return ret;
146 }
147
148
149
150 int
151 mca_pml_cm_dump(struct ompi_communicator_t* comm, int verbose)
152 {
153 return OMPI_ERR_NOT_IMPLEMENTED;
154 }