Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion ompi/mpi/java/c/mpi_Op.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
Expand Down Expand Up @@ -69,7 +71,7 @@ JNIEXPORT void JNICALL Java_mpi_Op_getOp(JNIEnv *env, jobject jthis, jint type)
static MPI_Op Ops[] = {
MPI_OP_NULL, MPI_MAX, MPI_MIN, MPI_SUM,
MPI_PROD, MPI_LAND, MPI_BAND, MPI_LOR, MPI_BOR, MPI_LXOR,
MPI_BXOR, MPI_MINLOC, MPI_MAXLOC
MPI_BXOR, MPI_MINLOC, MPI_MAXLOC, MPI_REPLACE, MPI_NO_OP
};
(*env)->SetLongField(env,jthis, ompi_java.OpHandle, (jlong)Ops[type]);
}
Expand Down
105 changes: 105 additions & 0 deletions ompi/mpi/java/c/mpi_Win.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
* All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
Expand Down Expand Up @@ -329,3 +331,106 @@ JNIEXPORT jlong JNICALL Java_mpi_Win_rGet(JNIEnv *env, jobject jthis, jlong win,
return (jlong)request;
}

JNIEXPORT jlong JNICALL Java_mpi_Win_rAccumulate(JNIEnv *env, jobject jthis, jlong win,
jobject origin, jint orgCount, jlong orgType, jint targetRank, jint targetDisp,
jint targetCount, jlong targetType, jobject jOp, jlong hOp, jint baseType)
{
void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);
MPI_Request request;

int rc = MPI_Raccumulate(orgPtr, orgCount, (MPI_Datatype)orgType,
targetRank, (MPI_Aint)targetDisp, targetCount,
(MPI_Datatype)targetType, op, (MPI_Win)win, &request);

ompi_java_exceptionCheck(env, rc);
return (jlong)request;
}

JNIEXPORT void JNICALL Java_mpi_Win_getAccumulate(JNIEnv *env, jobject jthis, jlong win,
jobject origin, jint orgCount, jlong orgType, jobject resultBuff, jint resultCount,
jlong resultType, jint targetRank, jint targetDisp, jint targetCount, jlong targetType,
jobject jOp, jlong hOp, jint baseType)
{
void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
void *resultPtr = (*env)->GetDirectBufferAddress(env, resultBuff);
MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);

int rc = MPI_Get_accumulate(orgPtr, orgCount, (MPI_Datatype)orgType,
resultPtr, resultCount, (MPI_Datatype)resultType,
targetRank, (MPI_Aint)targetDisp, targetCount,
(MPI_Datatype)targetType, op, (MPI_Win)win);

ompi_java_exceptionCheck(env, rc);
}

JNIEXPORT jlong JNICALL Java_mpi_Win_rGetAccumulate(JNIEnv *env, jobject jthis, jlong win,
jobject origin, jint orgCount, jlong orgType, jobject resultBuff, jint resultCount,
jlong resultType, jint targetRank, jint targetDisp, jint targetCount, jlong targetType,
jobject jOp, jlong hOp, jint baseType)
{
void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
void *resultPtr = (*env)->GetDirectBufferAddress(env, resultBuff);
MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);
MPI_Request request;

int rc = MPI_Rget_accumulate(orgPtr, orgCount, (MPI_Datatype)orgType,
resultPtr, resultCount, (MPI_Datatype)resultType,
targetRank, (MPI_Aint)targetDisp, targetCount,
(MPI_Datatype)targetType, op, (MPI_Win)win, &request);

ompi_java_exceptionCheck(env, rc);
return (jlong)request;
}

JNIEXPORT void JNICALL Java_mpi_Win_lockAll(JNIEnv *env, jobject jthis, jlong win, jint assertion)
{
int rc = MPI_Win_lock_all(assertion, (MPI_Win)win);
ompi_java_exceptionCheck(env, rc);
}

JNIEXPORT void JNICALL Java_mpi_Win_unlockAll(JNIEnv *env, jobject jthis, jlong win)
{
int rc = MPI_Win_unlock_all((MPI_Win)win);
ompi_java_exceptionCheck(env, rc);
}

JNIEXPORT void JNICALL Java_mpi_Win_sync(JNIEnv *env, jobject jthis, jlong win)
{
int rc = MPI_Win_sync((MPI_Win)win);
ompi_java_exceptionCheck(env, rc);
}

JNIEXPORT void JNICALL Java_mpi_Win_flush(JNIEnv *env, jobject jthis, jlong win, jint targetRank)
{
int rc = MPI_Win_flush(targetRank, (MPI_Win)win);
ompi_java_exceptionCheck(env, rc);
}

JNIEXPORT void JNICALL Java_mpi_Win_flushAll(JNIEnv *env, jobject jthis, jlong win)
{
int rc = MPI_Win_flush_all((MPI_Win)win);
ompi_java_exceptionCheck(env, rc);
}

JNIEXPORT void JNICALL Java_mpi_Win_compareAndSwap (JNIEnv *env, jobject jthis, jlong win, jobject origin,
jobject compareAddr, jobject resultAddr, jlong dataType, jint targetRank, jint targetDisp)
{
void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
void *compPtr = (*env)->GetDirectBufferAddress(env, compareAddr);
void *resultPtr = (*env)->GetDirectBufferAddress(env, resultAddr);

int rc = MPI_Compare_and_swap(orgPtr, compPtr, resultPtr, dataType, targetRank, targetDisp, (MPI_Win)win);
ompi_java_exceptionCheck(env, rc);
}

JNIEXPORT void JNICALL Java_mpi_Win_fetchAndOp(JNIEnv *env, jobject jthis, jlong win, jobject origin,
jobject resultAddr, jlong dataType, jint targetRank, jint targetDisp, jobject jOp, jlong hOp, jint baseType)
{
void *orgPtr = (*env)->GetDirectBufferAddress(env, origin);
void *resultPtr = (*env)->GetDirectBufferAddress(env, resultAddr);
MPI_Op op = ompi_java_op_getHandle(env, jOp, hOp, baseType);

int rc = MPI_Fetch_and_op(orgPtr, resultPtr, dataType, targetRank, targetDisp, op, (MPI_Win)win);
ompi_java_exceptionCheck(env, rc);
}
6 changes: 5 additions & 1 deletion ompi/mpi/java/java/MPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
Expand Down Expand Up @@ -68,7 +70,7 @@ public final class MPI
public static final int ANY_SOURCE, ANY_TAG;

public static final Op MAX, MIN, SUM, PROD, LAND, BAND,
LOR, BOR, LXOR, BXOR;
LOR, BOR, LXOR, BXOR, REPLACE, NO_OP;

/**
* Global minimum operator.
Expand Down Expand Up @@ -241,6 +243,8 @@ public final class MPI
BXOR = new Op(10);
MINLOC = new Op(11);
MAXLOC = new Op(12);
REPLACE = new Op(13);
NO_OP = new Op(14);

GROUP_EMPTY = new Group(Group.getEmpty());
REQUEST_NULL = new Request(Request.getNull());
Expand Down
Loading