This source file includes following definitions.
- Java_mpi_Request_init
- setIndices
- newStatuses
- newStatusesIndices
- Java_mpi_Request_getNull
- Java_mpi_Request_cancel
- Java_mpi_Request_free
- Java_mpi_Request_waitStatus
- Java_mpi_Request_waitFor
- Java_mpi_Request_testStatus
- Java_mpi_Request_getStatus
- Java_mpi_Request_test
- Java_mpi_Request_waitAnyStatus
- Java_mpi_Request_waitAny
- Java_mpi_Request_testAnyStatus
- Java_mpi_Request_testAny
- Java_mpi_Request_waitAllStatus
- Java_mpi_Request_waitAll
- Java_mpi_Request_testAllStatus
- Java_mpi_Request_testAll
- Java_mpi_Request_waitSomeStatus
- Java_mpi_Request_waitSome
- Java_mpi_Request_testSomeStatus
- Java_mpi_Request_testSome
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #include "ompi_config.h"
50 #include <stdlib.h>
51 #include <assert.h>
52 #ifdef HAVE_TARGETCONDITIONALS_H
53 #include <TargetConditionals.h>
54 #endif
55
56 #include "mpi.h"
57 #include "mpi_Request.h"
58 #include "mpiJava.h"
59
60 JNIEXPORT void JNICALL Java_mpi_Request_init(JNIEnv *env, jclass c)
61 {
62 ompi_java.ReqHandle = (*env)->GetFieldID(env, c, "handle", "J");
63 }
64
65 static void setIndices(JNIEnv *env, jintArray indices, int *cIdx, int count)
66 {
67 jint *jIdx;
68
69 if(sizeof(int) == sizeof(jint))
70 {
71 jIdx = cIdx;
72 }
73 else
74 {
75 jIdx = (jint*)calloc(count, sizeof(jint));
76 int i;
77
78 for(i = 0; i < count; i++)
79 jIdx[i] = cIdx[i];
80 }
81
82 (*env)->SetIntArrayRegion(env, indices, 0, count, jIdx);
83
84 if(jIdx != cIdx)
85 free(jIdx);
86 }
87
88 static jobjectArray newStatuses(JNIEnv *env, MPI_Status *statuses, int count)
89 {
90 jobjectArray array = (*env)->NewObjectArray(env,
91 count, ompi_java.StatusClass, NULL);
92 int i;
93 for(i = 0; i < count; i++)
94 {
95 jobject st = ompi_java_status_new(env, statuses + i);
96 (*env)->SetObjectArrayElement(env, array, i, st);
97 (*env)->DeleteLocalRef(env, st);
98 }
99
100 return array;
101 }
102
103 static jobjectArray newStatusesIndices(
104 JNIEnv *env, MPI_Status *statuses, int *indices, int count)
105 {
106 if(count < 0)
107 return NULL;
108
109 jobjectArray array = (*env)->NewObjectArray(env,
110 count, ompi_java.StatusClass, NULL);
111 int i;
112 for(i = 0; i < count; i++)
113 {
114 jobject st = ompi_java_status_newIndex(env, statuses + i, indices[i]);
115 (*env)->SetObjectArrayElement(env, array, i, st);
116 (*env)->DeleteLocalRef(env, st);
117 }
118
119 return array;
120 }
121
122 JNIEXPORT jlong JNICALL Java_mpi_Request_getNull(JNIEnv *env, jclass clazz)
123 {
124 return (jlong)MPI_REQUEST_NULL;
125 }
126
127 JNIEXPORT void JNICALL Java_mpi_Request_cancel(
128 JNIEnv *env, jobject jthis, jlong handle)
129 {
130 MPI_Request req = (MPI_Request)handle;
131 int rc = MPI_Cancel(&req);
132 ompi_java_exceptionCheck(env, rc);
133 }
134
135 JNIEXPORT jlong JNICALL Java_mpi_Request_free(
136 JNIEnv *env, jobject jthis, jlong handle)
137 {
138 MPI_Request req = (MPI_Request)handle;
139 int rc = MPI_Request_free(&req);
140 ompi_java_exceptionCheck(env, rc);
141 return (jlong)req;
142 }
143
144 JNIEXPORT jlong JNICALL Java_mpi_Request_waitStatus(
145 JNIEnv *env, jobject jthis, jlong handle, jlongArray stat)
146 {
147 MPI_Request req = (MPI_Request)handle;
148 MPI_Status status;
149 int rc = MPI_Wait(&req, &status);
150
151 if(!ompi_java_exceptionCheck(env, rc))
152 ompi_java_status_set(env, stat, &status);
153
154 return (jlong)req;
155 }
156
157 JNIEXPORT jlong JNICALL Java_mpi_Request_waitFor(
158 JNIEnv *env, jobject jthis, jlong handle)
159 {
160 MPI_Request req = (MPI_Request)handle;
161 int rc = MPI_Wait(&req, MPI_STATUS_IGNORE);
162 ompi_java_exceptionCheck(env, rc);
163 return (jlong)req;
164 }
165
166 JNIEXPORT jobject JNICALL Java_mpi_Request_testStatus(
167 JNIEnv *env, jobject jthis, jlong handle)
168 {
169 MPI_Request req = (MPI_Request)handle;
170 int flag;
171 MPI_Status status;
172 int rc = MPI_Test(&req, &flag, &status);
173
174 if(!ompi_java_exceptionCheck(env, rc))
175 (*env)->SetLongField(env, jthis, ompi_java.ReqHandle, (jlong)req);
176
177 return flag ? ompi_java_status_new(env, &status) : NULL;
178 }
179
180 JNIEXPORT jobject JNICALL Java_mpi_Request_getStatus(
181 JNIEnv *env, jobject jthis, jlong handle)
182 {
183 MPI_Request req = (MPI_Request)handle;
184 int flag;
185 MPI_Status status;
186 int rc = MPI_Request_get_status(req, &flag, &status);
187
188 if(!ompi_java_exceptionCheck(env, rc))
189 (*env)->SetLongField(env, jthis, ompi_java.ReqHandle, (jlong)req);
190
191 return flag ? ompi_java_status_new(env, &status) : NULL;
192 }
193
194 JNIEXPORT jboolean JNICALL Java_mpi_Request_test(
195 JNIEnv *env, jobject jthis, jlong handle)
196 {
197 MPI_Request req = (MPI_Request)handle;
198 int flag;
199 int rc = MPI_Test(&req, &flag, MPI_STATUS_IGNORE);
200
201 if(!ompi_java_exceptionCheck(env, rc))
202 (*env)->SetLongField(env, jthis, ompi_java.ReqHandle, (jlong)req);
203
204 return flag ? JNI_TRUE : JNI_FALSE;
205 }
206
207 JNIEXPORT void JNICALL Java_mpi_Request_waitAnyStatus(
208 JNIEnv *env, jclass clazz, jlongArray requests, jobject stat)
209 {
210 jboolean exception;
211 int count = (*env)->GetArrayLength(env, requests);
212 jlong* jReq;
213 MPI_Request *cReq;
214 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
215 int index;
216 MPI_Status status;
217 int rc = MPI_Waitany(count, cReq, &index, &status);
218 exception = ompi_java_exceptionCheck(env, rc);
219 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
220
221 if(!exception)
222 ompi_java_status_setIndex(env, stat, &status, index);
223 }
224
225 JNIEXPORT jint JNICALL Java_mpi_Request_waitAny(
226 JNIEnv *env, jclass clazz, jlongArray requests)
227 {
228 int count = (*env)->GetArrayLength(env, requests);
229 jlong* jReq;
230 MPI_Request *cReq;
231 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
232 int index;
233 int rc = MPI_Waitany(count, cReq, &index, MPI_STATUS_IGNORE);
234 ompi_java_exceptionCheck(env, rc);
235 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
236 return index;
237 }
238
239 JNIEXPORT jobject JNICALL Java_mpi_Request_testAnyStatus(
240 JNIEnv *env, jclass clazz, jlongArray requests)
241 {
242 int count = (*env)->GetArrayLength(env, requests);
243 jlong* jReq;
244 MPI_Request *cReq;
245 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
246 int index, flag;
247 MPI_Status status;
248 int rc = MPI_Testany(count, cReq, &index, &flag, &status);
249 ompi_java_exceptionCheck(env, rc);
250 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
251 return flag ? ompi_java_status_newIndex(env, &status, index) : NULL;
252 }
253
254 JNIEXPORT jint JNICALL Java_mpi_Request_testAny(
255 JNIEnv *env, jclass clazz, jlongArray requests)
256 {
257 int count = (*env)->GetArrayLength(env, requests);
258 jlong* jReq;
259 MPI_Request *cReq;
260 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
261 int index, flag;
262 int rc = MPI_Testany(count, cReq, &index, &flag, MPI_STATUS_IGNORE);
263 ompi_java_exceptionCheck(env, rc);
264 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
265 return index;
266 }
267
268 JNIEXPORT jobjectArray JNICALL Java_mpi_Request_waitAllStatus(
269 JNIEnv *env, jclass clazz, jlongArray requests)
270 {
271 int count = (*env)->GetArrayLength(env, requests);
272 jlong* jReq;
273 MPI_Request *cReq;
274 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
275 MPI_Status *statuses = (MPI_Status*)calloc(count, sizeof(MPI_Status));
276 int rc = MPI_Waitall(count, cReq, statuses);
277 ompi_java_exceptionCheck(env, rc);
278 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
279 jobjectArray jStatuses = newStatuses(env, statuses, count);
280 free(statuses);
281 return jStatuses;
282 }
283
284 JNIEXPORT void JNICALL Java_mpi_Request_waitAll(
285 JNIEnv *env, jclass jthis, jlongArray requests)
286 {
287 int count = (*env)->GetArrayLength(env, requests);
288 jlong* jReq;
289 MPI_Request *cReq;
290 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
291 int rc = MPI_Waitall(count, cReq, MPI_STATUSES_IGNORE);
292 ompi_java_exceptionCheck(env, rc);
293 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
294 }
295
296 JNIEXPORT jobjectArray JNICALL Java_mpi_Request_testAllStatus(
297 JNIEnv *env, jclass clazz, jlongArray requests)
298 {
299 int count = (*env)->GetArrayLength(env, requests);
300 jlong* jReq;
301 MPI_Request *cReq;
302 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
303 MPI_Status *statuses = (MPI_Status*)calloc(count, sizeof(MPI_Status));
304 int flag;
305 int rc = MPI_Testall(count, cReq, &flag, statuses);
306 ompi_java_exceptionCheck(env, rc);
307 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
308 jobjectArray jStatuses = flag ? newStatuses(env, statuses, count) : NULL;
309 free(statuses);
310 return jStatuses;
311 }
312
313 JNIEXPORT jboolean JNICALL Java_mpi_Request_testAll(
314 JNIEnv *env, jclass jthis, jlongArray requests)
315 {
316 int count = (*env)->GetArrayLength(env, requests);
317 jlong* jReq;
318 MPI_Request *cReq;
319 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
320 int flag;
321 int rc = MPI_Testall(count, cReq, &flag, MPI_STATUSES_IGNORE);
322 ompi_java_exceptionCheck(env, rc);
323 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
324 return flag ? JNI_TRUE : JNI_FALSE;
325 }
326
327 JNIEXPORT jobjectArray JNICALL Java_mpi_Request_waitSomeStatus(
328 JNIEnv *env, jclass clazz, jlongArray requests)
329 {
330 int incount = (*env)->GetArrayLength(env, requests);
331 jlong* jReq;
332 MPI_Request *cReq;
333 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
334 MPI_Status *statuses = (MPI_Status*)calloc(incount, sizeof(MPI_Status));
335 int *indices = (int*)calloc(incount, sizeof(int));
336 int outcount;
337 int rc = MPI_Waitsome(incount, cReq, &outcount, indices, statuses);
338 ompi_java_exceptionCheck(env, rc);
339 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
340 jobjectArray jStatuses = newStatusesIndices(env, statuses, indices, outcount);
341 free(statuses);
342 free(indices);
343 return jStatuses;
344 }
345
346 JNIEXPORT jintArray JNICALL Java_mpi_Request_waitSome(
347 JNIEnv *env, jclass clazz, jlongArray requests)
348 {
349 jboolean exception;
350 int incount = (*env)->GetArrayLength(env, requests);
351 jlong* jReq;
352 MPI_Request *cReq;
353 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
354 int *indices = (int*)calloc(incount, sizeof(int));
355 int outcount;
356 int rc = MPI_Waitsome(incount, cReq, &outcount, indices, MPI_STATUSES_IGNORE);
357 exception = ompi_java_exceptionCheck(env, rc);
358 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
359
360 if(exception) {
361 free(indices);
362 return NULL;
363 }
364
365 jintArray jindices = NULL;
366
367 if(outcount != MPI_UNDEFINED)
368 {
369 jindices = (*env)->NewIntArray(env, outcount);
370 setIndices(env, jindices, indices, outcount);
371 }
372
373 free(indices);
374 return jindices;
375 }
376
377 JNIEXPORT jobjectArray JNICALL Java_mpi_Request_testSomeStatus(
378 JNIEnv *env, jclass clazz, jlongArray requests)
379 {
380 int incount = (*env)->GetArrayLength(env, requests);
381 jlong* jReq;
382 MPI_Request *cReq;
383 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
384 MPI_Status *statuses = (MPI_Status*)calloc(incount, sizeof(MPI_Status));
385 int *indices = (int*)calloc(incount, sizeof(int));
386 int outcount;
387 int rc = MPI_Testsome(incount, cReq, &outcount, indices, statuses);
388 ompi_java_exceptionCheck(env, rc);
389 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
390 jobjectArray jStatuses = newStatusesIndices(env, statuses, indices, outcount);
391 free(statuses);
392 free(indices);
393 return jStatuses;
394 }
395
396 JNIEXPORT jintArray JNICALL Java_mpi_Request_testSome(
397 JNIEnv *env, jclass clazz, jlongArray requests)
398 {
399 jboolean exception;
400 int incount = (*env)->GetArrayLength(env, requests);
401 jlong* jReq;
402 MPI_Request *cReq;
403 ompi_java_getPtrArray(env, requests, &jReq, (void***)&cReq);
404 int *indices = (int*)calloc(incount, sizeof(int));
405 int outcount;
406 int rc = MPI_Testsome(incount, cReq, &outcount, indices, MPI_STATUSES_IGNORE);
407 exception = ompi_java_exceptionCheck(env, rc);
408 ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
409
410 if(exception) {
411 free(indices);
412 return NULL;
413 }
414
415 jintArray jindices = NULL;
416
417 if(outcount != MPI_UNDEFINED)
418 {
419 jindices = (*env)->NewIntArray(env, outcount);
420 setIndices(env, jindices, indices, outcount);
421 }
422
423 free(indices);
424 return jindices;
425 }