This source file includes following definitions.
- Java_mpi_Win_createWin
- Java_mpi_Win_allocateWin
- Java_mpi_Win_allocateSharedWin
- Java_mpi_Win_createDynamicWin
- Java_mpi_Win_attach
- Java_mpi_Win_detach
- Java_mpi_Win_getGroup
- Java_mpi_Win_put
- Java_mpi_Win_get
- Java_mpi_Win_accumulate
- Java_mpi_Win_fence
- Java_mpi_Win_start
- Java_mpi_Win_complete
- Java_mpi_Win_post
- Java_mpi_Win_waitFor
- Java_mpi_Win_test
- Java_mpi_Win_lock
- Java_mpi_Win_unlock
- Java_mpi_Win_setErrhandler
- Java_mpi_Win_getErrhandler
- Java_mpi_Win_callErrhandler
- winCopyAttr
- winDeleteAttr
- Java_mpi_Win_createKeyval_1jni
- Java_mpi_Win_freeKeyval_1jni
- Java_mpi_Win_setAttr
- Java_mpi_Win_getAttr
- Java_mpi_Win_deleteAttr
- Java_mpi_Win_free
- Java_mpi_Win_getInfo
- Java_mpi_Win_setInfo
- Java_mpi_Win_rPut
- Java_mpi_Win_rGet
- Java_mpi_Win_rAccumulate
- Java_mpi_Win_getAccumulate
- Java_mpi_Win_rGetAccumulate
- Java_mpi_Win_lockAll
- Java_mpi_Win_unlockAll
- Java_mpi_Win_sync
- Java_mpi_Win_flush
- Java_mpi_Win_flushAll
- Java_mpi_Win_compareAndSwap
- Java_mpi_Win_fetchAndOp
- Java_mpi_Win_flushLocal
- Java_mpi_Win_flushLocalAll
- Java_mpi_Win_setName
- Java_mpi_Win_getName
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include "ompi_config.h"
25
26 #include <stdlib.h>
27 #ifdef HAVE_TARGETCONDITIONALS_H
28 #include <TargetConditionals.h>
29 #endif
30
31 #include "mpi.h"
32 #include "mpi_Win.h"
33 #include "mpiJava.h"
34
35 JNIEXPORT jlong JNICALL Java_mpi_Win_createWin(
36 JNIEnv *env, jobject jthis, jobject jBase,
37 jint size, jint dispUnit, jlong info, jlong comm)
38 {
39 void *base = (*env)->GetDirectBufferAddress(env, jBase);
40 MPI_Win win;
41
42 int rc = MPI_Win_create(base, (MPI_Aint)size, dispUnit,
43 (MPI_Info)info, (MPI_Comm)comm, &win);
44
45 ompi_java_exceptionCheck(env, rc);
46 return (jlong)win;
47 }
48
49 JNIEXPORT jlong JNICALL Java_mpi_Win_allocateWin(JNIEnv *env, jobject jthis,
50 jint size, jint dispUnit, jlong info, jlong comm, jobject jBase)
51 {
52 void *basePtr = (*env)->GetDirectBufferAddress(env, jBase);
53 MPI_Win win;
54
55 int rc = MPI_Win_allocate((MPI_Aint)size, dispUnit,
56 (MPI_Info)info, (MPI_Comm)comm, basePtr, &win);
57
58 ompi_java_exceptionCheck(env, rc);
59 return (jlong)win;
60 }
61
62 JNIEXPORT jlong JNICALL Java_mpi_Win_allocateSharedWin(JNIEnv *env, jobject jthis,
63 jint size, jint dispUnit, jlong info, jlong comm, jobject jBase)
64 {
65 void *basePtr = (*env)->GetDirectBufferAddress(env, jBase);
66 MPI_Win win;
67
68 int rc = MPI_Win_allocate_shared((MPI_Aint)size, dispUnit,
69 (MPI_Info)info, (MPI_Comm)comm, basePtr, &win);
70
71 ompi_java_exceptionCheck(env, rc);
72 return (jlong)win;
73 }
74
75 JNIEXPORT jlong JNICALL Java_mpi_Win_createDynamicWin(
76 JNIEnv *env, jobject jthis,
77 jlong info, jlong comm)
78 {
79 MPI_Win win;
80
81 int rc = MPI_Win_create_dynamic(
82 (MPI_Info)info, (MPI_Comm)comm, &win);
83
84 ompi_java_exceptionCheck(env, rc);
85 return (jlong)win;
86 }
87
88 JNIEXPORT void JNICALL Java_mpi_Win_attach(
89 JNIEnv *env, jobject jthis, jlong win, jobject jBase,
90 jint size)
91 {
92 void *base = (*env)->GetDirectBufferAddress(env, jBase);
93
94 int rc = MPI_Win_attach((MPI_Win)win, base, (MPI_Aint)size);
95
96 ompi_java_exceptionCheck(env, rc);
97 }
98
99 JNIEXPORT void JNICALL Java_mpi_Win_detach(
100 JNIEnv *env, jobject jthis, jlong win, jobject jBase)
101 {
102 void *base = (*env)->GetDirectBufferAddress(env, jBase);
103
104 int rc = MPI_Win_detach((MPI_Win)win, base);
105
106 ompi_java_exceptionCheck(env, rc);
107 }
108
109 JNIEXPORT jlong JNICALL Java_mpi_Win_getGroup(
110 JNIEnv *env, jobject jthis, jlong win)
111 {
112 MPI_Group group;
113 int rc = MPI_Win_get_group((MPI_Win)win, &group);
114 ompi_java_exceptionCheck(env, rc);
115 return (jlong)group;
116 }
117
118 JNIEXPORT void JNICALL Java_mpi_Win_put(
119 JNIEnv *env, jobject jthis, jlong win, jobject origin,
120 jint orgCount, jlong orgType, jint targetRank, jint targetDisp,
121 jint targetCount, jlong targetType, jint baseType)
122 {
123 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
124
125 int rc = MPI_Put(orgPtr, orgCount, (MPI_Datatype)orgType,
126 targetRank, (MPI_Aint)targetDisp, targetCount,
127 (MPI_Datatype)targetType, (MPI_Win)win);
128
129 ompi_java_exceptionCheck(env, rc);
130 }
131
132 JNIEXPORT void JNICALL Java_mpi_Win_get(
133 JNIEnv *env, jobject jthis, jlong win, jobject origin,
134 jint orgCount, jlong orgType, jint targetRank, jint targetDisp,
135 jint targetCount, jlong targetType, jint baseType)
136 {
137 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
138
139 int rc = MPI_Get(orgPtr, orgCount, (MPI_Datatype)orgType,
140 targetRank, (MPI_Aint)targetDisp, targetCount,
141 (MPI_Datatype)targetType, (MPI_Win)win);
142
143 ompi_java_exceptionCheck(env, rc);
144 }
145
146 JNIEXPORT void JNICALL Java_mpi_Win_accumulate(
147 JNIEnv *env, jobject jthis, jlong win,
148 jobject origin, jint orgCount, jlong orgType,
149 jint targetRank, jint targetDisp, jint targetCount, jlong targetType,
150 jobject jOp, jlong hOp, jint baseType)
151 {
152 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
153 MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);
154
155 int rc = MPI_Accumulate(orgPtr, orgCount, (MPI_Datatype)orgType,
156 targetRank, (MPI_Aint)targetDisp, targetCount,
157 (MPI_Datatype)targetType, op, (MPI_Win)win);
158
159 ompi_java_exceptionCheck(env, rc);
160 }
161
162 JNIEXPORT void JNICALL Java_mpi_Win_fence(
163 JNIEnv *env, jobject jthis, jlong win, jint assertion)
164 {
165 int rc = MPI_Win_fence(assertion, (MPI_Win)win);
166 ompi_java_exceptionCheck(env, rc);
167 }
168
169 JNIEXPORT void JNICALL Java_mpi_Win_start(
170 JNIEnv *env, jobject jthis, jlong win, jlong group, jint assertion)
171 {
172 int rc = MPI_Win_start((MPI_Group)group, assertion, (MPI_Win)win);
173 ompi_java_exceptionCheck(env, rc);
174 }
175
176 JNIEXPORT void JNICALL Java_mpi_Win_complete(
177 JNIEnv *env, jobject jthis, jlong win)
178 {
179 int rc = MPI_Win_complete((MPI_Win)win);
180 ompi_java_exceptionCheck(env, rc);
181 }
182
183 JNIEXPORT void JNICALL Java_mpi_Win_post(
184 JNIEnv *env, jobject jthis, jlong win, jlong group, jint assertion)
185 {
186 int rc = MPI_Win_post((MPI_Group)group, assertion, (MPI_Win)win);
187 ompi_java_exceptionCheck(env, rc);
188 }
189
190 JNIEXPORT void JNICALL Java_mpi_Win_waitFor(
191 JNIEnv *env, jobject jthis, jlong win)
192 {
193 int rc = MPI_Win_wait((MPI_Win)win);
194 ompi_java_exceptionCheck(env, rc);
195 }
196
197 JNIEXPORT jboolean JNICALL Java_mpi_Win_test(
198 JNIEnv *env, jobject jthis, jlong win)
199 {
200 int flag;
201 int rc = MPI_Win_test((MPI_Win)win, &flag);
202 ompi_java_exceptionCheck(env, rc);
203 return flag ? JNI_TRUE : JNI_FALSE;
204 }
205
206 JNIEXPORT void JNICALL Java_mpi_Win_lock(
207 JNIEnv *env, jobject jthis, jlong win,
208 jint lockType, jint rank, jint assertion)
209 {
210 int rc = MPI_Win_lock(lockType, rank, assertion, (MPI_Win)win);
211 ompi_java_exceptionCheck(env, rc);
212 }
213
214 JNIEXPORT void JNICALL Java_mpi_Win_unlock(
215 JNIEnv *env, jobject jthis, jlong win, jint rank)
216 {
217 int rc = MPI_Win_unlock(rank, (MPI_Win)win);
218 ompi_java_exceptionCheck(env, rc);
219 }
220
221 JNIEXPORT void JNICALL Java_mpi_Win_setErrhandler(
222 JNIEnv *env, jobject jthis, jlong win, jlong errhandler)
223 {
224 int rc = MPI_Win_set_errhandler(
225 (MPI_Win)win, (MPI_Errhandler)errhandler);
226
227 ompi_java_exceptionCheck(env, rc);
228 }
229
230 JNIEXPORT jlong JNICALL Java_mpi_Win_getErrhandler(
231 JNIEnv *env, jobject jthis, jlong win)
232 {
233 MPI_Errhandler errhandler;
234 int rc = MPI_Win_get_errhandler((MPI_Win)win, &errhandler);
235 ompi_java_exceptionCheck(env, rc);
236 return (jlong)errhandler;
237 }
238
239 JNIEXPORT void JNICALL Java_mpi_Win_callErrhandler(
240 JNIEnv *env, jobject jthis, jlong win, jint errorCode)
241 {
242 int rc = MPI_Win_call_errhandler((MPI_Win)win, errorCode);
243 ompi_java_exceptionCheck(env, rc);
244 }
245
246 static int winCopyAttr(MPI_Win oldwin, int keyval, void *extraState,
247 void *attrValIn, void *attrValOut, int *flag)
248 {
249 return ompi_java_attrCopy(attrValIn, attrValOut, flag);
250 }
251
252 static int winDeleteAttr(MPI_Win oldwin, int keyval,
253 void *attrVal, void *extraState)
254 {
255 return ompi_java_attrDelete(attrVal);
256 }
257
258 JNIEXPORT jint JNICALL Java_mpi_Win_createKeyval_1jni(JNIEnv *env, jclass clazz)
259 {
260 int rc, keyval;
261 rc = MPI_Win_create_keyval(winCopyAttr, winDeleteAttr, &keyval, NULL);
262 ompi_java_exceptionCheck(env, rc);
263 return keyval;
264 }
265
266 JNIEXPORT void JNICALL Java_mpi_Win_freeKeyval_1jni(
267 JNIEnv *env, jclass clazz, jint keyval)
268 {
269 int rc = MPI_Win_free_keyval((int*)(&keyval));
270 ompi_java_exceptionCheck(env, rc);
271 }
272
273 JNIEXPORT void JNICALL Java_mpi_Win_setAttr(
274 JNIEnv *env, jobject jthis, jlong win, jint keyval, jbyteArray jval)
275 {
276 void *cval = ompi_java_attrSet(env, jval);
277 int rc = MPI_Win_set_attr((MPI_Win)win, keyval, cval);
278 ompi_java_exceptionCheck(env, rc);
279 }
280
281 JNIEXPORT jobject JNICALL Java_mpi_Win_getAttr(
282 JNIEnv *env, jobject jthis, jlong win, jint keyval)
283 {
284 int flag;
285 void *val;
286 int rc = MPI_Win_get_attr((MPI_Win)win, keyval, &val, &flag);
287
288 if(ompi_java_exceptionCheck(env, rc) || !flag)
289 return NULL;
290
291 switch(keyval)
292 {
293 case MPI_WIN_SIZE:
294 return ompi_java_Integer_valueOf(env, (jint)(*((MPI_Aint*)val)));
295 case MPI_WIN_DISP_UNIT:
296 return ompi_java_Integer_valueOf(env, (jint)(*((int*)val)));
297 case MPI_WIN_BASE:
298 return ompi_java_Long_valueOf(env, (jlong)val);
299 default:
300 return ompi_java_attrGet(env, val);
301 }
302 }
303
304 JNIEXPORT void JNICALL Java_mpi_Win_deleteAttr(
305 JNIEnv *env, jobject jthis, jlong win, jint keyval)
306 {
307 int rc = MPI_Win_delete_attr((MPI_Win)win, keyval);
308 ompi_java_exceptionCheck(env, rc);
309 }
310
311 JNIEXPORT jlong JNICALL Java_mpi_Win_free(
312 JNIEnv *env, jobject jthis, jlong handle)
313 {
314 MPI_Win win = (MPI_Win)handle;
315 int rc = MPI_Win_free(&win);
316 ompi_java_exceptionCheck(env, rc);
317 return (jlong)win;
318 }
319
320 JNIEXPORT jlong JNICALL Java_mpi_Win_getInfo(
321 JNIEnv *env, jobject jthis, jlong handle)
322 {
323 MPI_Win win = (MPI_Win)handle;
324 MPI_Info info;
325 int rc = MPI_Win_get_info((MPI_Win)win, &info);
326 ompi_java_exceptionCheck(env, rc);
327 return (jlong)info;
328 }
329
330 JNIEXPORT void JNICALL Java_mpi_Win_setInfo(
331 JNIEnv *env, jobject jthis, jlong handle, jlong i)
332 {
333 MPI_Win win = (MPI_Win)handle;
334 MPI_Info info = (MPI_Info)i;
335 int rc = MPI_Win_set_info(win, info);
336 ompi_java_exceptionCheck(env, rc);
337 }
338
339 JNIEXPORT jlong JNICALL Java_mpi_Win_rPut(JNIEnv *env, jobject jthis,
340 jlong win, jobject origin_addr, jint origin_count, jlong origin_type,
341 jint target_rank, jint target_disp, jint target_count, jlong target_datatype,
342 jint basetype)
343 {
344 void *origPtr = ompi_java_getDirectBufferAddress(env, origin_addr);
345 MPI_Request request;
346
347 int rc = MPI_Rput(origPtr, origin_count, (MPI_Datatype)origin_type,
348 target_rank, (MPI_Aint)target_disp, target_count, (MPI_Datatype)target_datatype,
349 (MPI_Win)win, &request);
350
351 ompi_java_exceptionCheck(env, rc);
352 return (jlong)request;
353 }
354
355 JNIEXPORT jlong JNICALL Java_mpi_Win_rGet(JNIEnv *env, jobject jthis, jlong win,
356 jobject origin, jint orgCount, jlong orgType, jint targetRank, jint targetDisp,
357 jint targetCount, jlong targetType, jint base)
358 {
359 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
360 MPI_Request request;
361
362 int rc = MPI_Rget(orgPtr, orgCount, (MPI_Datatype)orgType,
363 targetRank, (MPI_Aint)targetDisp, targetCount,
364 (MPI_Datatype)targetType, (MPI_Win)win, &request);
365
366 ompi_java_exceptionCheck(env, rc);
367 return (jlong)request;
368 }
369
370 JNIEXPORT jlong JNICALL Java_mpi_Win_rAccumulate(JNIEnv *env, jobject jthis, jlong win,
371 jobject origin, jint orgCount, jlong orgType, jint targetRank, jint targetDisp,
372 jint targetCount, jlong targetType, jobject jOp, jlong hOp, jint baseType)
373 {
374 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
375 MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);
376 MPI_Request request;
377
378 int rc = MPI_Raccumulate(orgPtr, orgCount, (MPI_Datatype)orgType,
379 targetRank, (MPI_Aint)targetDisp, targetCount,
380 (MPI_Datatype)targetType, op, (MPI_Win)win, &request);
381
382 ompi_java_exceptionCheck(env, rc);
383 return (jlong)request;
384 }
385
386 JNIEXPORT void JNICALL Java_mpi_Win_getAccumulate(JNIEnv *env, jobject jthis, jlong win,
387 jobject origin, jint orgCount, jlong orgType, jobject resultBuff, jint resultCount,
388 jlong resultType, jint targetRank, jint targetDisp, jint targetCount, jlong targetType,
389 jobject jOp, jlong hOp, jint baseType)
390 {
391 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
392 void *resultPtr = (*env)->GetDirectBufferAddress(env, resultBuff);
393 MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);
394
395 int rc = MPI_Get_accumulate(orgPtr, orgCount, (MPI_Datatype)orgType,
396 resultPtr, resultCount, (MPI_Datatype)resultType,
397 targetRank, (MPI_Aint)targetDisp, targetCount,
398 (MPI_Datatype)targetType, op, (MPI_Win)win);
399
400 ompi_java_exceptionCheck(env, rc);
401 }
402
403 JNIEXPORT jlong JNICALL Java_mpi_Win_rGetAccumulate(JNIEnv *env, jobject jthis, jlong win,
404 jobject origin, jint orgCount, jlong orgType, jobject resultBuff, jint resultCount,
405 jlong resultType, jint targetRank, jint targetDisp, jint targetCount, jlong targetType,
406 jobject jOp, jlong hOp, jint baseType)
407 {
408 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
409 void *resultPtr = (*env)->GetDirectBufferAddress(env, resultBuff);
410 MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);
411 MPI_Request request;
412
413 int rc = MPI_Rget_accumulate(orgPtr, orgCount, (MPI_Datatype)orgType,
414 resultPtr, resultCount, (MPI_Datatype)resultType,
415 targetRank, (MPI_Aint)targetDisp, targetCount,
416 (MPI_Datatype)targetType, op, (MPI_Win)win, &request);
417
418 ompi_java_exceptionCheck(env, rc);
419 return (jlong)request;
420 }
421
422 JNIEXPORT void JNICALL Java_mpi_Win_lockAll(JNIEnv *env, jobject jthis, jlong win, jint assertion)
423 {
424 int rc = MPI_Win_lock_all(assertion, (MPI_Win)win);
425 ompi_java_exceptionCheck(env, rc);
426 }
427
428 JNIEXPORT void JNICALL Java_mpi_Win_unlockAll(JNIEnv *env, jobject jthis, jlong win)
429 {
430 int rc = MPI_Win_unlock_all((MPI_Win)win);
431 ompi_java_exceptionCheck(env, rc);
432 }
433
434 JNIEXPORT void JNICALL Java_mpi_Win_sync(JNIEnv *env, jobject jthis, jlong win)
435 {
436 int rc = MPI_Win_sync((MPI_Win)win);
437 ompi_java_exceptionCheck(env, rc);
438 }
439
440 JNIEXPORT void JNICALL Java_mpi_Win_flush(JNIEnv *env, jobject jthis, jlong win, jint targetRank)
441 {
442 int rc = MPI_Win_flush(targetRank, (MPI_Win)win);
443 ompi_java_exceptionCheck(env, rc);
444 }
445
446 JNIEXPORT void JNICALL Java_mpi_Win_flushAll(JNIEnv *env, jobject jthis, jlong win)
447 {
448 int rc = MPI_Win_flush_all((MPI_Win)win);
449 ompi_java_exceptionCheck(env, rc);
450 }
451
452 JNIEXPORT void JNICALL Java_mpi_Win_compareAndSwap (JNIEnv *env, jobject jthis, jlong win, jobject origin,
453 jobject compareAddr, jobject resultAddr, jlong dataType, jint targetRank, jint targetDisp)
454 {
455 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
456 void *compPtr = (*env)->GetDirectBufferAddress(env, compareAddr);
457 void *resultPtr = (*env)->GetDirectBufferAddress(env, resultAddr);
458
459 int rc = MPI_Compare_and_swap(orgPtr, compPtr, resultPtr, (MPI_Datatype)dataType,
460 targetRank, targetDisp, (MPI_Win)win);
461 ompi_java_exceptionCheck(env, rc);
462 }
463
464 JNIEXPORT void JNICALL Java_mpi_Win_fetchAndOp(JNIEnv *env, jobject jthis, jlong win, jobject origin,
465 jobject resultAddr, jlong dataType, jint targetRank, jint targetDisp, jobject jOp, jlong hOp, jint baseType)
466 {
467 void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
468 void *resultPtr = (*env)->GetDirectBufferAddress(env, resultAddr);
469 MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);
470
471 int rc = MPI_Fetch_and_op(orgPtr, resultPtr, (MPI_Datatype)dataType, targetRank,
472 targetDisp, op, (MPI_Win)win);
473 ompi_java_exceptionCheck(env, rc);
474 }
475
476 JNIEXPORT void JNICALL Java_mpi_Win_flushLocal(JNIEnv *env, jobject jthis, jlong win, jint targetRank)
477 {
478 int rc = MPI_Win_flush_local(targetRank, (MPI_Win)win);
479 ompi_java_exceptionCheck(env, rc);
480 }
481
482 JNIEXPORT void JNICALL Java_mpi_Win_flushLocalAll(JNIEnv *env, jobject jthis, jlong win)
483 {
484 int rc = MPI_Win_flush_local_all((MPI_Win)win);
485 ompi_java_exceptionCheck(env, rc);
486 }
487
488 JNIEXPORT void JNICALL Java_mpi_Win_setName(
489 JNIEnv *env, jobject jthis, jlong handle, jstring jname)
490 {
491 const char *name = (*env)->GetStringUTFChars(env, jname, NULL);
492 int rc = MPI_Win_set_name((MPI_Win)handle, (char*)name);
493 ompi_java_exceptionCheck(env, rc);
494 (*env)->ReleaseStringUTFChars(env, jname, name);
495 }
496
497 JNIEXPORT jstring JNICALL Java_mpi_Win_getName(
498 JNIEnv *env, jobject jthis, jlong handle)
499 {
500 char name[MPI_MAX_OBJECT_NAME];
501 int len;
502 int rc = MPI_Win_get_name((MPI_Win)handle, name, &len);
503
504 if(ompi_java_exceptionCheck(env, rc))
505 return NULL;
506
507 return (*env)->NewStringUTF(env, name);
508 }