Avoid use Status member in Request.
This commit was SVN r31287.
Этот коммит содержится в:
родитель
71bdb8c439
Коммит
845818de59
@ -40,7 +40,8 @@ typedef struct {
|
|||||||
jfieldID OpCommute;
|
jfieldID OpCommute;
|
||||||
jmethodID OpCall;
|
jmethodID OpCall;
|
||||||
jfieldID ReqHandle;
|
jfieldID ReqHandle;
|
||||||
jfieldID ReqStatus;
|
jclass StatusClass;
|
||||||
|
jfieldID StatusData;
|
||||||
jclass ExceptionClass;
|
jclass ExceptionClass;
|
||||||
jmethodID ExceptionInit;
|
jmethodID ExceptionInit;
|
||||||
jclass IntegerClass;
|
jclass IntegerClass;
|
||||||
@ -108,8 +109,9 @@ int ompi_java_attrDelete(void *attrVal);
|
|||||||
MPI_Op ompi_java_op_getHandle(
|
MPI_Op ompi_java_op_getHandle(
|
||||||
JNIEnv *env, jobject jOp, jlong hOp, int baseType);
|
JNIEnv *env, jobject jOp, jlong hOp, int baseType);
|
||||||
|
|
||||||
jlongArray ompi_java_status_new(
|
jobject ompi_java_status_new(JNIEnv *env, MPI_Status *status);
|
||||||
JNIEnv *env, MPI_Status *status);
|
jobject ompi_java_status_newIndex(JNIEnv *env, MPI_Status *status, int index);
|
||||||
|
|
||||||
void ompi_java_status_set(
|
void ompi_java_status_set(
|
||||||
JNIEnv *env, jlongArray jData, MPI_Status *status);
|
JNIEnv *env, jlongArray jData, MPI_Status *status);
|
||||||
void ompi_java_status_setIndex(
|
void ompi_java_status_setIndex(
|
||||||
|
@ -715,14 +715,14 @@ JNIEXPORT jint JNICALL Java_mpi_Comm_packSize(
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jlongArray JNICALL Java_mpi_Comm_iProbe(
|
JNIEXPORT jobject JNICALL Java_mpi_Comm_iProbe(
|
||||||
JNIEnv *env, jobject jthis, jlong comm, jint source, jint tag)
|
JNIEnv *env, jobject jthis, jlong comm, jint source, jint tag)
|
||||||
{
|
{
|
||||||
int flag;
|
int flag;
|
||||||
MPI_Status status;
|
MPI_Status status;
|
||||||
int rc = MPI_Iprobe(source, tag, (MPI_Comm)comm, &flag, &status);
|
int rc = MPI_Iprobe(source, tag, (MPI_Comm)comm, &flag, &status);
|
||||||
ompi_java_exceptionCheck(env, rc);
|
ompi_java_exceptionCheck(env, rc);
|
||||||
return !flag ? NULL : ompi_java_status_new(env, &status);
|
return flag ? ompi_java_status_new(env, &status) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_mpi_Comm_probe(
|
JNIEXPORT void JNICALL Java_mpi_Comm_probe(
|
||||||
|
@ -395,7 +395,8 @@ void ompi_java_findClasses(JNIEnv *env)
|
|||||||
ompi_java.DistGraphNeighborsClass = ompi_java_findClass(
|
ompi_java.DistGraphNeighborsClass = ompi_java_findClass(
|
||||||
env, "mpi/DistGraphNeighbors");
|
env, "mpi/DistGraphNeighbors");
|
||||||
|
|
||||||
ompi_java.ExceptionClass = ompi_java_findClass(env, "mpi/MPIException");
|
ompi_java.StatusClass = ompi_java_findClass(env, "mpi/Status");
|
||||||
|
ompi_java.ExceptionClass = ompi_java_findClass(env, "mpi/MPIException");
|
||||||
|
|
||||||
ompi_java.ExceptionInit = (*env)->GetMethodID(
|
ompi_java.ExceptionInit = (*env)->GetMethodID(
|
||||||
env, ompi_java.ExceptionClass,
|
env, ompi_java.ExceptionClass,
|
||||||
@ -425,6 +426,7 @@ void ompi_java_deleteClasses(JNIEnv *env)
|
|||||||
(*env)->DeleteGlobalRef(env, ompi_java.ShiftParmsClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.ShiftParmsClass);
|
||||||
(*env)->DeleteGlobalRef(env, ompi_java.GraphParmsClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.GraphParmsClass);
|
||||||
(*env)->DeleteGlobalRef(env, ompi_java.DistGraphNeighborsClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.DistGraphNeighborsClass);
|
||||||
|
(*env)->DeleteGlobalRef(env, ompi_java.StatusClass);
|
||||||
(*env)->DeleteGlobalRef(env, ompi_java.ExceptionClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.ExceptionClass);
|
||||||
(*env)->DeleteGlobalRef(env, ompi_java.IntegerClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.IntegerClass);
|
||||||
(*env)->DeleteGlobalRef(env, ompi_java.LongClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.LongClass);
|
||||||
|
@ -46,7 +46,7 @@ JNIEXPORT jlong JNICALL Java_mpi_Message_mProbe(
|
|||||||
return (jlong)message;
|
return (jlong)message;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jlongArray JNICALL Java_mpi_Message_imProbe(
|
JNIEXPORT jobject JNICALL Java_mpi_Message_imProbe(
|
||||||
JNIEnv *env, jobject jthis, jint source, jint tag, jlong jComm)
|
JNIEnv *env, jobject jthis, jint source, jint tag, jlong jComm)
|
||||||
{
|
{
|
||||||
MPI_Comm comm = (MPI_Comm)jComm;
|
MPI_Comm comm = (MPI_Comm)jComm;
|
||||||
|
@ -58,7 +58,6 @@
|
|||||||
JNIEXPORT void JNICALL Java_mpi_Request_init(JNIEnv *env, jclass c)
|
JNIEXPORT void JNICALL Java_mpi_Request_init(JNIEnv *env, jclass c)
|
||||||
{
|
{
|
||||||
ompi_java.ReqHandle = (*env)->GetFieldID(env, c, "handle", "J");
|
ompi_java.ReqHandle = (*env)->GetFieldID(env, c, "handle", "J");
|
||||||
ompi_java.ReqStatus = (*env)->GetFieldID(env, c, "status", "[J");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setIndices(JNIEnv *env, jintArray indices, int *cIdx, int count)
|
static void setIndices(JNIEnv *env, jintArray indices, int *cIdx, int count)
|
||||||
@ -84,35 +83,38 @@ static void setIndices(JNIEnv *env, jintArray indices, int *cIdx, int count)
|
|||||||
free(jIdx);
|
free(jIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setStatuses(JNIEnv *env, jobjectArray objReqs,
|
static jobjectArray newStatuses(JNIEnv *env, MPI_Status *statuses, int count)
|
||||||
MPI_Status *statuses, int count)
|
|
||||||
{
|
{
|
||||||
|
jobjectArray array = (*env)->NewObjectArray(env,
|
||||||
|
count, ompi_java.StatusClass, NULL);
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < count; i++)
|
for(i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
/* Copy final native status to Java statuses. */
|
jobject st = ompi_java_status_new(env, statuses + i);
|
||||||
jobject rq = (*env)->GetObjectArrayElement(env, objReqs, i);
|
(*env)->SetObjectArrayElement(env, array, i, st);
|
||||||
jobject st = (*env)->GetObjectField(env, rq, ompi_java.ReqStatus);
|
|
||||||
ompi_java_status_set(env, st, statuses + i);
|
|
||||||
(*env)->DeleteLocalRef(env, st);
|
(*env)->DeleteLocalRef(env, st);
|
||||||
(*env)->DeleteLocalRef(env, rq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setStatusesIndices(
|
static jobjectArray newStatusesIndices(
|
||||||
JNIEnv *env, jobjectArray objReqs,
|
JNIEnv *env, MPI_Status *statuses, int *indices, int count)
|
||||||
MPI_Status *statuses, int *indices, int count)
|
|
||||||
{
|
{
|
||||||
|
if(count < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
jobjectArray array = (*env)->NewObjectArray(env,
|
||||||
|
count, ompi_java.StatusClass, NULL);
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < count; i++)
|
for(i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
/* Copy final native status to Java statuses. */
|
jobject st = ompi_java_status_newIndex(env, statuses + i, indices[i]);
|
||||||
jobject rq = (*env)->GetObjectArrayElement(env, objReqs, i);
|
(*env)->SetObjectArrayElement(env, array, i, st);
|
||||||
jobject st = (*env)->GetObjectField(env, rq, ompi_java.ReqStatus);
|
|
||||||
ompi_java_status_setIndex(env, st, statuses + i, indices[i]);
|
|
||||||
(*env)->DeleteLocalRef(env, st);
|
(*env)->DeleteLocalRef(env, st);
|
||||||
(*env)->DeleteLocalRef(env, rq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_mpi_Request_getNull(JNIEnv *env, jclass clazz)
|
JNIEXPORT jlong JNICALL Java_mpi_Request_getNull(JNIEnv *env, jclass clazz)
|
||||||
@ -157,8 +159,8 @@ JNIEXPORT jlong JNICALL Java_mpi_Request_waitFor(
|
|||||||
return (jlong)req;
|
return (jlong)req;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_mpi_Request_testStatus(
|
JNIEXPORT jobject JNICALL Java_mpi_Request_testStatus(
|
||||||
JNIEnv *env, jobject jthis, jlong handle, jlongArray jStatus)
|
JNIEnv *env, jobject jthis, jlong handle)
|
||||||
{
|
{
|
||||||
MPI_Request req = (MPI_Request)handle;
|
MPI_Request req = (MPI_Request)handle;
|
||||||
int flag;
|
int flag;
|
||||||
@ -166,12 +168,7 @@ JNIEXPORT jboolean JNICALL Java_mpi_Request_testStatus(
|
|||||||
int rc = MPI_Test(&req, &flag, &status);
|
int rc = MPI_Test(&req, &flag, &status);
|
||||||
ompi_java_exceptionCheck(env, rc);
|
ompi_java_exceptionCheck(env, rc);
|
||||||
(*env)->SetLongField(env, jthis, ompi_java.ReqHandle, (jlong)req);
|
(*env)->SetLongField(env, jthis, ompi_java.ReqHandle, (jlong)req);
|
||||||
|
return flag ? ompi_java_status_new(env, &status) : NULL;
|
||||||
if(!flag)
|
|
||||||
return JNI_FALSE;
|
|
||||||
|
|
||||||
ompi_java_status_set(env, jStatus, &status);
|
|
||||||
return JNI_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_mpi_Request_test(
|
JNIEXPORT jboolean JNICALL Java_mpi_Request_test(
|
||||||
@ -215,8 +212,8 @@ JNIEXPORT jint JNICALL Java_mpi_Request_waitAny(
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_mpi_Request_testAnyStatus(
|
JNIEXPORT jobject JNICALL Java_mpi_Request_testAnyStatus(
|
||||||
JNIEnv *env, jclass clazz, jlongArray requests, jobject jStatus)
|
JNIEnv *env, jclass clazz, jlongArray requests)
|
||||||
{
|
{
|
||||||
int count = (*env)->GetArrayLength(env, requests);
|
int count = (*env)->GetArrayLength(env, requests);
|
||||||
jlong* jReq;
|
jlong* jReq;
|
||||||
@ -227,12 +224,7 @@ JNIEXPORT jboolean JNICALL Java_mpi_Request_testAnyStatus(
|
|||||||
int rc = MPI_Testany(count, cReq, &index, &flag, &status);
|
int rc = MPI_Testany(count, cReq, &index, &flag, &status);
|
||||||
ompi_java_exceptionCheck(env, rc);
|
ompi_java_exceptionCheck(env, rc);
|
||||||
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
||||||
|
return flag ? ompi_java_status_newIndex(env, &status, index) : NULL;
|
||||||
if(!flag)
|
|
||||||
return JNI_FALSE;
|
|
||||||
|
|
||||||
ompi_java_status_setIndex(env, jStatus, &status, index);
|
|
||||||
return JNI_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_mpi_Request_testAny(
|
JNIEXPORT jint JNICALL Java_mpi_Request_testAny(
|
||||||
@ -250,8 +242,8 @@ JNIEXPORT jint JNICALL Java_mpi_Request_testAny(
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_mpi_Request_waitAllStatus(
|
JNIEXPORT jobjectArray JNICALL Java_mpi_Request_waitAllStatus(
|
||||||
JNIEnv *env, jclass clazz, jlongArray requests, jobjectArray objReqs)
|
JNIEnv *env, jclass clazz, jlongArray requests)
|
||||||
{
|
{
|
||||||
int count = (*env)->GetArrayLength(env, requests);
|
int count = (*env)->GetArrayLength(env, requests);
|
||||||
jlong* jReq;
|
jlong* jReq;
|
||||||
@ -261,8 +253,9 @@ JNIEXPORT void JNICALL Java_mpi_Request_waitAllStatus(
|
|||||||
int rc = MPI_Waitall(count, cReq, statuses);
|
int rc = MPI_Waitall(count, cReq, statuses);
|
||||||
ompi_java_exceptionCheck(env, rc);
|
ompi_java_exceptionCheck(env, rc);
|
||||||
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
||||||
setStatuses(env, objReqs, statuses, count);
|
jobjectArray jStatuses = newStatuses(env, statuses, count);
|
||||||
free(statuses);
|
free(statuses);
|
||||||
|
return jStatuses;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_mpi_Request_waitAll(
|
JNIEXPORT void JNICALL Java_mpi_Request_waitAll(
|
||||||
@ -277,8 +270,8 @@ JNIEXPORT void JNICALL Java_mpi_Request_waitAll(
|
|||||||
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT int JNICALL Java_mpi_Request_testAllStatus(
|
JNIEXPORT jobjectArray JNICALL Java_mpi_Request_testAllStatus(
|
||||||
JNIEnv *env, jclass clazz, jlongArray requests, jobjectArray objReqs)
|
JNIEnv *env, jclass clazz, jlongArray requests)
|
||||||
{
|
{
|
||||||
int count = (*env)->GetArrayLength(env, requests);
|
int count = (*env)->GetArrayLength(env, requests);
|
||||||
jlong* jReq;
|
jlong* jReq;
|
||||||
@ -289,12 +282,9 @@ JNIEXPORT int JNICALL Java_mpi_Request_testAllStatus(
|
|||||||
int rc = MPI_Testall(count, cReq, &flag, statuses);
|
int rc = MPI_Testall(count, cReq, &flag, statuses);
|
||||||
ompi_java_exceptionCheck(env, rc);
|
ompi_java_exceptionCheck(env, rc);
|
||||||
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
||||||
|
jobjectArray jStatuses = flag ? newStatuses(env, statuses, count) : NULL;
|
||||||
if(flag)
|
|
||||||
setStatuses(env, objReqs, statuses, count);
|
|
||||||
|
|
||||||
free(statuses);
|
free(statuses);
|
||||||
return flag ? count : -1;
|
return jStatuses;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_mpi_Request_testAll(
|
JNIEXPORT jboolean JNICALL Java_mpi_Request_testAll(
|
||||||
@ -311,8 +301,8 @@ JNIEXPORT jboolean JNICALL Java_mpi_Request_testAll(
|
|||||||
return flag ? JNI_TRUE : JNI_FALSE;
|
return flag ? JNI_TRUE : JNI_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_mpi_Request_waitSomeStatus(
|
JNIEXPORT jobjectArray JNICALL Java_mpi_Request_waitSomeStatus(
|
||||||
JNIEnv *env, jclass clazz, jlongArray requests, jobjectArray objReqs)
|
JNIEnv *env, jclass clazz, jlongArray requests)
|
||||||
{
|
{
|
||||||
int incount = (*env)->GetArrayLength(env, requests);
|
int incount = (*env)->GetArrayLength(env, requests);
|
||||||
jlong* jReq;
|
jlong* jReq;
|
||||||
@ -324,10 +314,10 @@ JNIEXPORT jint JNICALL Java_mpi_Request_waitSomeStatus(
|
|||||||
int rc = MPI_Waitsome(incount, cReq, &outcount, indices, statuses);
|
int rc = MPI_Waitsome(incount, cReq, &outcount, indices, statuses);
|
||||||
ompi_java_exceptionCheck(env, rc);
|
ompi_java_exceptionCheck(env, rc);
|
||||||
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
||||||
setStatusesIndices(env, objReqs, statuses, indices, outcount);
|
jobjectArray jStatuses = newStatusesIndices(env, statuses, indices, outcount);
|
||||||
free(statuses);
|
free(statuses);
|
||||||
free(indices);
|
free(indices);
|
||||||
return outcount;
|
return jStatuses;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jintArray JNICALL Java_mpi_Request_waitSome(
|
JNIEXPORT jintArray JNICALL Java_mpi_Request_waitSome(
|
||||||
@ -354,8 +344,8 @@ JNIEXPORT jintArray JNICALL Java_mpi_Request_waitSome(
|
|||||||
return jindices;
|
return jindices;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT int JNICALL Java_mpi_Request_testSomeStatus(
|
JNIEXPORT jobjectArray JNICALL Java_mpi_Request_testSomeStatus(
|
||||||
JNIEnv *env, jclass clazz, jlongArray requests, jobjectArray objReqs)
|
JNIEnv *env, jclass clazz, jlongArray requests)
|
||||||
{
|
{
|
||||||
int incount = (*env)->GetArrayLength(env, requests);
|
int incount = (*env)->GetArrayLength(env, requests);
|
||||||
jlong* jReq;
|
jlong* jReq;
|
||||||
@ -367,10 +357,10 @@ JNIEXPORT int JNICALL Java_mpi_Request_testSomeStatus(
|
|||||||
int rc = MPI_Testsome(incount, cReq, &outcount, indices, statuses);
|
int rc = MPI_Testsome(incount, cReq, &outcount, indices, statuses);
|
||||||
ompi_java_exceptionCheck(env, rc);
|
ompi_java_exceptionCheck(env, rc);
|
||||||
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
ompi_java_releasePtrArray(env, requests, jReq, (void**)cReq);
|
||||||
setStatusesIndices(env, objReqs, statuses, indices, outcount);
|
jobjectArray jStatuses = newStatusesIndices(env, statuses, indices, outcount);
|
||||||
free(statuses);
|
free(statuses);
|
||||||
free(indices);
|
free(indices);
|
||||||
return outcount;
|
return jStatuses;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jintArray JNICALL Java_mpi_Request_testSome(
|
JNIEXPORT jintArray JNICALL Java_mpi_Request_testSome(
|
||||||
|
@ -66,6 +66,11 @@ static void getStatus(MPI_Status *status, jint source, jint tag,
|
|||||||
status->_ucount = ucount;
|
status->_ucount = ucount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_mpi_Status_init(JNIEnv *env, jclass clazz)
|
||||||
|
{
|
||||||
|
ompi_java.StatusData = (*env)->GetFieldID(env, clazz, "data", "[J");
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_mpi_Status_getCount(
|
JNIEXPORT jint JNICALL Java_mpi_Status_getCount(
|
||||||
JNIEnv *env, jobject jthis, jint source, jint tag,
|
JNIEnv *env, jobject jthis, jint source, jint tag,
|
||||||
jint error, jint cancelled, jlong ucount, jlong jType)
|
jint error, jint cancelled, jlong ucount, jlong jType)
|
||||||
@ -104,11 +109,22 @@ JNIEXPORT jint JNICALL Java_mpi_Status_getElements(
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
jlongArray ompi_java_status_new(JNIEnv *env, MPI_Status *status)
|
jobject ompi_java_status_new(JNIEnv *env, MPI_Status *status)
|
||||||
{
|
{
|
||||||
jlongArray jData = (*env)->NewLongArray(env, 6);
|
jlongArray jData = (*env)->NewLongArray(env, 6);
|
||||||
ompi_java_status_set(env, jData, status);
|
ompi_java_status_set(env, jData, status);
|
||||||
return jData;
|
jobject jStatus = (*env)->AllocObject(env, ompi_java.StatusClass);
|
||||||
|
(*env)->SetObjectField(env, jStatus, ompi_java.StatusData, jData);
|
||||||
|
return jStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
jobject ompi_java_status_newIndex(JNIEnv *env, MPI_Status *status, int index)
|
||||||
|
{
|
||||||
|
jlongArray jData = (*env)->NewLongArray(env, 6);
|
||||||
|
ompi_java_status_setIndex(env, jData, status, index);
|
||||||
|
jobject jStatus = (*env)->AllocObject(env, ompi_java.StatusClass);
|
||||||
|
(*env)->SetObjectField(env, jStatus, ompi_java.StatusData, jData);
|
||||||
|
return jStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ompi_java_status_set(JNIEnv *env, jlongArray jData, MPI_Status *status)
|
void ompi_java_status_set(JNIEnv *env, jlongArray jData, MPI_Status *status)
|
||||||
|
@ -894,11 +894,10 @@ private native int packSize(long comm, int incount, long type)
|
|||||||
public final Status iProbe(int source, int tag) throws MPIException
|
public final Status iProbe(int source, int tag) throws MPIException
|
||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] status = iProbe(handle, source, tag);
|
return iProbe(handle, source, tag);
|
||||||
return status == null ? null : new Status(status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private native long[] iProbe(long comm, int source, int tag)
|
private native Status iProbe(long comm, int source, int tag)
|
||||||
throws MPIException;
|
throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -100,11 +100,10 @@ private native long mProbe(int source, int tag, long comm, long[] status)
|
|||||||
public Status imProbe(int source, int tag, Comm comm) throws MPIException
|
public Status imProbe(int source, int tag, Comm comm) throws MPIException
|
||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] status = imProbe(source, tag, comm.handle);
|
return imProbe(source, tag, comm.handle);
|
||||||
return status == null ? null : new Status(status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private native long[] imProbe(int source, int tag, long comm)
|
private native Status imProbe(int source, int tag, long comm)
|
||||||
throws MPIException;
|
throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,12 +66,6 @@ package mpi;
|
|||||||
*/
|
*/
|
||||||
public class Request implements Freeable
|
public class Request implements Freeable
|
||||||
{
|
{
|
||||||
// Auxiliary status data.
|
|
||||||
// It's used to avoid creating status objects in the C side.
|
|
||||||
// It also avoids setting objects attributes in the C side.
|
|
||||||
// Calling java methods and setting object attributes from C is very slow.
|
|
||||||
private long[] status = Status.newData();
|
|
||||||
|
|
||||||
protected long handle;
|
protected long handle;
|
||||||
|
|
||||||
static
|
static
|
||||||
@ -134,8 +128,9 @@ public final boolean isNull()
|
|||||||
public final Status waitStatus() throws MPIException
|
public final Status waitStatus() throws MPIException
|
||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
handle = waitStatus(handle, status);
|
Status status = new Status();
|
||||||
return newStatus();
|
handle = waitStatus(handle, status.data);
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
private native long waitStatus(long request, long[] stat) throws MPIException;
|
private native long waitStatus(long request, long[] stat) throws MPIException;
|
||||||
@ -166,11 +161,10 @@ private native long waitFor(long request) throws MPIException;
|
|||||||
public final Status testStatus() throws MPIException
|
public final Status testStatus() throws MPIException
|
||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
return testStatus(handle, status) ? newStatus() : null;
|
return testStatus(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
private native boolean testStatus(long request, long[] status)
|
private native Status testStatus(long request) throws MPIException;
|
||||||
throws MPIException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the operation identified by the request
|
* Returns true if the operation identified by the request
|
||||||
@ -205,10 +199,10 @@ public static Status waitAnyStatus(Request[] requests) throws MPIException
|
|||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] r = getHandles(requests);
|
long[] r = getHandles(requests);
|
||||||
long[] status = Status.newData();
|
Status status = new Status();
|
||||||
waitAnyStatus(r, status);
|
waitAnyStatus(r, status.data);
|
||||||
setHandles(requests, r);
|
setHandles(requests, r);
|
||||||
return new Status(status);
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native void waitAnyStatus(long[] requests, long[] status)
|
private static native void waitAnyStatus(long[] requests, long[] status)
|
||||||
@ -252,20 +246,12 @@ public static Status testAnyStatus(Request[] requests) throws MPIException
|
|||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] r = getHandles(requests);
|
long[] r = getHandles(requests);
|
||||||
long[] status = requests.length==0 ? Status.newData() : requests[0].status;
|
Status status = testAnyStatus(r);
|
||||||
boolean completed = testAnyStatus(r, status);
|
|
||||||
setHandles(requests, r);
|
setHandles(requests, r);
|
||||||
|
return status;
|
||||||
if(!completed)
|
|
||||||
return null;
|
|
||||||
else if(requests.length == 0)
|
|
||||||
return new Status(status);
|
|
||||||
else
|
|
||||||
return requests[0].newStatus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native boolean testAnyStatus(long[] requests, long[] status)
|
private static native Status testAnyStatus(long[] requests) throws MPIException;
|
||||||
throws MPIException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for completion of either one or none of the operations
|
* Tests for completion of either one or none of the operations
|
||||||
@ -303,12 +289,12 @@ public static Status[] waitAllStatus(Request[] requests) throws MPIException
|
|||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] r = getHandles(requests);
|
long[] r = getHandles(requests);
|
||||||
waitAllStatus(r, requests);
|
Status[] status = waitAllStatus(r);
|
||||||
setHandles(requests, r);
|
setHandles(requests, r);
|
||||||
return newStatuses(requests, requests.length);
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native void waitAllStatus(long[] requests, Request[] objReqs)
|
private static native Status[] waitAllStatus(long[] requests)
|
||||||
throws MPIException;
|
throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -343,12 +329,12 @@ public static Status[] testAllStatus(Request[] requests) throws MPIException
|
|||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] r = getHandles(requests);
|
long[] r = getHandles(requests);
|
||||||
int count = testAllStatus(r, requests);
|
Status[] status = testAllStatus(r);
|
||||||
setHandles(requests, r);
|
setHandles(requests, r);
|
||||||
return newStatuses(requests, count);
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native int testAllStatus(long[] requests, Request[] objReqs)
|
private static native Status[] testAllStatus(long[] requests)
|
||||||
throws MPIException;
|
throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -389,12 +375,12 @@ public static Status[] waitSomeStatus(Request[] requests) throws MPIException
|
|||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] r = getHandles(requests);
|
long[] r = getHandles(requests);
|
||||||
int count = waitSomeStatus(r, requests);
|
Status[] status = waitSomeStatus(r);
|
||||||
setHandles(requests, r);
|
setHandles(requests, r);
|
||||||
return newStatuses(requests, count);
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native int waitSomeStatus(long[] requests, Request[] objReqs)
|
private static native Status[] waitSomeStatus(long[] requests)
|
||||||
throws MPIException;
|
throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -433,12 +419,12 @@ public static Status[] testSomeStatus(Request[] requests) throws MPIException
|
|||||||
{
|
{
|
||||||
MPI.check();
|
MPI.check();
|
||||||
long[] r = getHandles(requests);
|
long[] r = getHandles(requests);
|
||||||
int count = testSomeStatus(r, requests);
|
Status[] status = testSomeStatus(r);
|
||||||
setHandles(requests, r);
|
setHandles(requests, r);
|
||||||
return newStatuses(requests, count);
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native int testSomeStatus(long[] requests, Request[] objReqs)
|
private static native Status[] testSomeStatus(long[] requests)
|
||||||
throws MPIException;
|
throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -477,24 +463,4 @@ protected static void setHandles(Request[] r, long[] h)
|
|||||||
r[i].handle = h[i];
|
r[i].handle = h[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Status[] newStatuses(Request[] r, int count)
|
|
||||||
{
|
|
||||||
if(count < 0)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
Status[] s = new Status[count];
|
|
||||||
|
|
||||||
for(int i = 0; i < count; i++)
|
|
||||||
s[i] = r[i].newStatus();
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Status newStatus()
|
|
||||||
{
|
|
||||||
Status s = new Status(status);
|
|
||||||
status = Status.newData();
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // Request
|
} // Request
|
||||||
|
@ -52,6 +52,13 @@ public final class Status
|
|||||||
{
|
{
|
||||||
protected final long[] data;
|
protected final long[] data;
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static native void init();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Status objects must be created only by the MPI methods.
|
* Status objects must be created only by the MPI methods.
|
||||||
*/
|
*/
|
||||||
@ -60,23 +67,6 @@ protected Status()
|
|||||||
data = new long[6];
|
data = new long[6];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Status objects must be created only by the MPI methods.
|
|
||||||
*/
|
|
||||||
protected Status(long[] data)
|
|
||||||
{
|
|
||||||
assert data.length == 6;
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the status data.
|
|
||||||
*/
|
|
||||||
protected static long[] newData()
|
|
||||||
{
|
|
||||||
return new long[6];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of received entries.
|
* Returns the number of received entries.
|
||||||
* <p>Java binding of the MPI operation {@code MPI_GET_COUNT}.
|
* <p>Java binding of the MPI operation {@code MPI_GET_COUNT}.
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user