27 MPI::Request::Wait(MPI::Status &status)
29 (void)MPI_Wait(&mpi_request, &status.mpi_status);
35 (void)MPI_Wait(&mpi_request, MPI_STATUS_IGNORE);
41 (void)MPI_Request_free(&mpi_request);
45 MPI::Request::Test(MPI::Status &status)
48 (void)MPI_Test(&mpi_request, &t, &status.mpi_status);
49 return OPAL_INT_TO_BOOL(t);
56 (void)MPI_Test(&mpi_request, &t, MPI_STATUS_IGNORE);
57 return OPAL_INT_TO_BOOL(t);
61 MPI::Request::Waitany(
int count, MPI::Request array[],
66 for (i=0; i < count; i++) {
67 array_of_requests[i] = array[i];
69 (void)MPI_Waitany(count, array_of_requests, &index, &status.mpi_status);
70 for (i=0; i < count; i++) {
71 array[i] = array_of_requests[i];
73 delete [] array_of_requests;
78 MPI::Request::Waitany(
int count, MPI::Request array[])
82 for (i=0; i < count; i++) {
83 array_of_requests[i] = array[i];
85 (void)MPI_Waitany(count, array_of_requests, &index, MPI_STATUS_IGNORE);
86 for (i=0; i < count; i++) {
87 array[i] = array_of_requests[i];
89 delete [] array_of_requests;
94 MPI::Request::Testany(
int count, MPI::Request array[],
95 int& index, MPI::Status& status)
99 for (i=0; i < count; i++) {
100 array_of_requests[i] = array[i];
102 (void)MPI_Testany(count, array_of_requests, &index, &flag, &status.mpi_status);
103 for (i=0; i < count; i++) {
104 array[i] = array_of_requests[i];
106 delete [] array_of_requests;
107 return (
bool)(flag != 0 ?
true :
false);
111 MPI::Request::Testany(
int count, MPI::Request array[],
int& index)
115 for (i=0; i < count; i++) {
116 array_of_requests[i] = array[i];
118 (void)MPI_Testany(count, array_of_requests, &index, &flag,
120 for (i=0; i < count; i++) {
121 array[i] = array_of_requests[i];
123 delete [] array_of_requests;
124 return OPAL_INT_TO_BOOL(flag);
128 MPI::Request::Waitall(
int count, MPI::Request req_array[],
129 MPI::Status stat_array[])
134 for (i=0; i < count; i++) {
135 array_of_requests[i] = req_array[i];
137 (void)MPI_Waitall(count, array_of_requests, array_of_statuses);
138 for (i=0; i < count; i++) {
139 req_array[i] = array_of_requests[i];
140 stat_array[i] = array_of_statuses[i];
142 delete [] array_of_requests;
143 delete [] array_of_statuses;
147 MPI::Request::Waitall(
int count, MPI::Request req_array[])
152 for (i=0; i < count; i++) {
153 array_of_requests[i] = req_array[i];
155 (void)MPI_Waitall(count, array_of_requests, MPI_STATUSES_IGNORE);
157 for (i=0; i < count; i++) {
158 req_array[i] = array_of_requests[i];
161 delete [] array_of_requests;
165 MPI::Request::Testall(
int count, MPI::Request req_array[],
166 MPI::Status stat_array[])
171 for (i=0; i < count; i++) {
172 array_of_requests[i] = req_array[i];
174 (void)MPI_Testall(count, array_of_requests, &flag, array_of_statuses);
175 for (i=0; i < count; i++) {
176 req_array[i] = array_of_requests[i];
177 stat_array[i] = array_of_statuses[i];
179 delete [] array_of_requests;
180 delete [] array_of_statuses;
181 return OPAL_INT_TO_BOOL(flag);
185 MPI::Request::Testall(
int count, MPI::Request req_array[])
190 for (i=0; i < count; i++) {
191 array_of_requests[i] = req_array[i];
193 (void)MPI_Testall(count, array_of_requests, &flag, MPI_STATUSES_IGNORE);
195 for (i=0; i < count; i++) {
196 req_array[i] = array_of_requests[i];
198 delete [] array_of_requests;
200 return OPAL_INT_TO_BOOL(flag);
204 MPI::Request::Waitsome(
int incount, MPI::Request req_array[],
205 int array_of_indices[], MPI::Status stat_array[])
210 for (i=0; i < incount; i++) {
211 array_of_requests[i] = req_array[i];
213 (void)MPI_Waitsome(incount, array_of_requests, &outcount,
214 array_of_indices, array_of_statuses);
215 for (i=0; i < incount; i++) {
216 req_array[i] = array_of_requests[i];
217 stat_array[i] = array_of_statuses[i];
219 delete [] array_of_requests;
220 delete [] array_of_statuses;
225 MPI::Request::Waitsome(
int incount, MPI::Request req_array[],
226 int array_of_indices[])
231 for (i=0; i < incount; i++) {
232 array_of_requests[i] = req_array[i];
234 (void)MPI_Waitsome(incount, array_of_requests, &outcount,
235 array_of_indices, MPI_STATUSES_IGNORE);
237 for (i=0; i < incount; i++) {
238 req_array[i] = array_of_requests[i];
240 delete [] array_of_requests;
246 MPI::Request::Testsome(
int incount, MPI::Request req_array[],
247 int array_of_indices[], MPI::Status stat_array[])
252 for (i=0; i < incount; i++) {
253 array_of_requests[i] = req_array[i];
255 (void)MPI_Testsome(incount, array_of_requests, &outcount,
256 array_of_indices, array_of_statuses);
257 for (i=0; i < incount; i++) {
258 req_array[i] = array_of_requests[i];
259 stat_array[i] = array_of_statuses[i];
261 delete [] array_of_requests;
262 delete [] array_of_statuses;
267 MPI::Request::Testsome(
int incount, MPI::Request req_array[],
268 int array_of_indices[])
273 for (i=0; i < incount; i++) {
274 array_of_requests[i] = req_array[i];
276 (void)MPI_Testsome(incount, array_of_requests, &outcount,
277 array_of_indices, MPI_STATUSES_IGNORE);
279 for (i=0; i < incount; i++) {
280 req_array[i] = array_of_requests[i];
282 delete [] array_of_requests;
288 MPI::Request::Cancel(
void)
const
290 (void)MPI_Cancel(const_cast<MPI_Request *>(&mpi_request));
294 MPI::Prequest::Start()
296 (void)MPI_Start(&mpi_request);
300 MPI::Prequest::Startall(
int count, MPI:: Prequest array_of_requests[])
305 for (i=0; i < count; i++) {
306 mpi_requests[i] = array_of_requests[i];
308 (void)MPI_Startall(count, mpi_requests);
309 for (i=0; i < count; i++) {
310 array_of_requests[i].mpi_request = mpi_requests[i] ;
312 delete [] mpi_requests;
315 inline bool MPI::Request::Get_status(MPI::Status& status)
const
323 (void)MPI_Request_get_status(mpi_request, &flag, &c_status);
327 return OPAL_INT_TO_BOOL(flag);
330 inline bool MPI::Request::Get_status()
const
337 (void)MPI_Request_get_status(mpi_request, &flag, MPI_STATUS_IGNORE);
338 return OPAL_INT_TO_BOOL(flag);
342 MPI::Grequest::Start(Query_function *query_fn, Free_function *free_fn,
343 Cancel_function *cancel_fn,
void *extra)
346 Intercept_data_t *new_extra =
347 new MPI::Grequest::Intercept_data_t;
349 new_extra->id_extra = extra;
350 new_extra->id_cxx_query_fn = query_fn;
351 new_extra->id_cxx_free_fn = free_fn;
352 new_extra->id_cxx_cancel_fn = cancel_fn;
353 (void) MPI_Grequest_start(ompi_mpi_cxx_grequest_query_fn_intercept,
354 ompi_mpi_cxx_grequest_free_fn_intercept,
355 ompi_mpi_cxx_grequest_cancel_fn_intercept,
356 new_extra, &grequest);
362 MPI::Grequest::Complete()
364 (void) MPI_Grequest_complete(mpi_request);
Main top-level request struct definition.
Definition: request.h:100