This source file includes following definitions.
- Java_mpi_Group_init
- Java_mpi_Group_getEmpty
- Java_mpi_Group_getSize
- Java_mpi_Group_getRank
- Java_mpi_Group_free
- Java_mpi_Group_translateRanks
- Java_mpi_Group_compare
- Java_mpi_Group_union
- Java_mpi_Group_intersection
- Java_mpi_Group_difference
- Java_mpi_Group_incl
- Java_mpi_Group_excl
- Java_mpi_Group_rangeIncl
- Java_mpi_Group_rangeExcl
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 #include "ompi_config.h"
48
49 #include <stdlib.h>
50 #ifdef HAVE_TARGETCONDITIONALS_H
51 #include <TargetConditionals.h>
52 #endif
53
54 #include "mpi.h"
55 #include "mpi_Group.h"
56 #include "mpiJava.h"
57
58 JNIEXPORT void JNICALL Java_mpi_Group_init(JNIEnv *env, jclass clazz)
59 {
60 ompi_java_setStaticLongField(env, clazz,
61 "nullHandle", (jlong)MPI_GROUP_NULL);
62
63 ompi_java.GroupHandle = (*env)->GetFieldID(env, clazz, "handle", "J");
64 }
65
66 JNIEXPORT jlong JNICALL Java_mpi_Group_getEmpty(JNIEnv *env, jclass clazz)
67 {
68 return (jlong)MPI_GROUP_EMPTY;
69 }
70
71 JNIEXPORT jint JNICALL Java_mpi_Group_getSize(
72 JNIEnv *env, jobject jthis, jlong group)
73 {
74 int size, rc;
75 rc = MPI_Group_size((MPI_Group)group, &size);
76 ompi_java_exceptionCheck(env, rc);
77 return size;
78 }
79
80 JNIEXPORT jint JNICALL Java_mpi_Group_getRank(
81 JNIEnv *env, jobject jthis, jlong group)
82 {
83 int rank, rc;
84 rc = MPI_Group_rank((MPI_Group)group, &rank);
85 ompi_java_exceptionCheck(env, rc);
86 return rank;
87 }
88
89 JNIEXPORT jlong JNICALL Java_mpi_Group_free(
90 JNIEnv *env, jobject jthis, jlong handle)
91 {
92 MPI_Group group = (MPI_Group)handle;
93 int rc = MPI_Group_free(&group);
94 ompi_java_exceptionCheck(env, rc);
95 return (jlong)group;
96 }
97
98 JNIEXPORT jintArray JNICALL Java_mpi_Group_translateRanks(
99 JNIEnv *env, jclass jthis, jlong group1,
100 jintArray ranks1, jlong group2)
101 {
102 jsize n = (*env)->GetArrayLength(env, ranks1);
103 jintArray ranks2 = (*env)->NewIntArray(env,n);
104 jint *jRanks1, *jRanks2;
105 int *cRanks1, *cRanks2;
106 ompi_java_getIntArray(env, ranks1, &jRanks1, &cRanks1);
107 ompi_java_getIntArray(env, ranks2, &jRanks2, &cRanks2);
108
109 int rc = MPI_Group_translate_ranks((MPI_Group)group1, n, cRanks1,
110 (MPI_Group)group2, cRanks2);
111 ompi_java_exceptionCheck(env, rc);
112 ompi_java_forgetIntArray(env, ranks1, jRanks1, cRanks1);
113 ompi_java_releaseIntArray(env, ranks2, jRanks2, cRanks2);
114 return ranks2;
115 }
116
117 JNIEXPORT jint JNICALL Java_mpi_Group_compare(
118 JNIEnv *env, jclass jthis, jlong group1, jlong group2)
119 {
120 int result, rc;
121 rc = MPI_Group_compare((MPI_Group)group1, (MPI_Group)group2, &result);
122 ompi_java_exceptionCheck(env, rc);
123 return result;
124 }
125
126 JNIEXPORT jlong JNICALL Java_mpi_Group_union(
127 JNIEnv *env, jclass jthis, jlong group1, jlong group2)
128 {
129 MPI_Group newGroup;
130 int rc = MPI_Group_union((MPI_Group)group1, (MPI_Group)group2, &newGroup);
131 ompi_java_exceptionCheck(env, rc);
132 return (jlong)newGroup;
133 }
134
135 JNIEXPORT jlong JNICALL Java_mpi_Group_intersection(
136 JNIEnv *env, jclass jthis, jlong group1, jlong group2)
137 {
138 MPI_Group newGroup;
139
140 int rc = MPI_Group_intersection(
141 (MPI_Group)group1, (MPI_Group)group2, &newGroup);
142
143 ompi_java_exceptionCheck(env, rc);
144 return (jlong)newGroup;
145 }
146
147 JNIEXPORT jlong JNICALL Java_mpi_Group_difference(
148 JNIEnv *env, jclass jthis, jlong group1, jlong group2)
149 {
150 MPI_Group newGroup;
151
152 int rc = MPI_Group_difference(
153 (MPI_Group)group1, (MPI_Group)group2, &newGroup);
154
155 ompi_java_exceptionCheck(env, rc);
156 return (jlong)newGroup;
157 }
158
159 JNIEXPORT jlong JNICALL Java_mpi_Group_incl(
160 JNIEnv *env, jobject jthis, jlong group, jintArray ranks)
161 {
162 jsize n = (*env)->GetArrayLength(env, ranks);
163 jint *jRanks;
164 int *cRanks;
165 ompi_java_getIntArray(env, ranks, &jRanks, &cRanks);
166
167 MPI_Group newGroup;
168 int rc = MPI_Group_incl((MPI_Group)group, n, cRanks, &newGroup);
169 ompi_java_exceptionCheck(env, rc);
170
171 ompi_java_forgetIntArray(env, ranks, jRanks, cRanks);
172 return (jlong)newGroup;
173 }
174
175 JNIEXPORT jlong JNICALL Java_mpi_Group_excl(
176 JNIEnv *env, jobject jthis, jlong group, jintArray ranks)
177 {
178 jsize n = (*env)->GetArrayLength(env, ranks);
179 jint *jRanks;
180 int *cRanks;
181 ompi_java_getIntArray(env, ranks, &jRanks, &cRanks);
182
183 MPI_Group newGroup;
184 int rc = MPI_Group_excl((MPI_Group)group, n, cRanks, &newGroup);
185 ompi_java_exceptionCheck(env, rc);
186
187 ompi_java_forgetIntArray(env, ranks, jRanks, cRanks);
188 return (jlong)newGroup;
189 }
190
191 JNIEXPORT jlong JNICALL Java_mpi_Group_rangeIncl(
192 JNIEnv *env, jobject jthis, jlong group, jobjectArray ranges)
193 {
194 int i;
195 MPI_Group newGroup;
196 jsize n = (*env)->GetArrayLength(env, ranges);
197 int (*cRanges)[3] = (int(*)[3])calloc(n, sizeof(int[3]));
198
199 for(i = 0; i < n; i++)
200 {
201 jintArray ri = (*env)->GetObjectArrayElement(env, ranges, i);
202 jint *jri = (*env)->GetIntArrayElements(env, ri, NULL);
203 cRanges[i][0] = jri[0];
204 cRanges[i][1] = jri[1];
205 cRanges[i][2] = jri[2];
206 (*env)->ReleaseIntArrayElements(env, ri, jri, JNI_ABORT);
207 (*env)->DeleteLocalRef(env, ri);
208 }
209
210 int rc = MPI_Group_range_incl((MPI_Group)group, n, cRanges, &newGroup);
211 ompi_java_exceptionCheck(env, rc);
212 free(cRanges);
213 return (jlong)newGroup;
214 }
215
216 JNIEXPORT jlong JNICALL Java_mpi_Group_rangeExcl(
217 JNIEnv *env, jobject jthis, jlong group, jobjectArray ranges)
218 {
219 int i;
220 MPI_Group newGroup;
221 jsize n = (*env)->GetArrayLength(env, ranges);
222 int (*cRanges)[3] = (int(*)[3])calloc(n, sizeof(int[3]));
223
224 for(i = 0; i < n; i++)
225 {
226 jintArray ri = (*env)->GetObjectArrayElement(env, ranges, i);
227 jint *jri = (*env)->GetIntArrayElements(env, ri, NULL);
228 cRanges[i][0] = jri[0];
229 cRanges[i][1] = jri[1];
230 cRanges[i][2] = jri[2];
231 (*env)->ReleaseIntArrayElements(env, ri, jri, JNI_ABORT);
232 (*env)->DeleteLocalRef(env, ri);
233 }
234
235 int rc = MPI_Group_range_excl((MPI_Group)group, n, cRanges, &newGroup);
236 ompi_java_exceptionCheck(env, rc);
237 free(cRanges);
238 return (jlong)newGroup;
239 }