Merge pull request #763 from nrgraham23/status_x_java_bindings
Status x java bindings
Этот коммит содержится в:
Коммит
36d7855280
@ -2,6 +2,8 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2011-2013 Cisco Systems, Inc. All rights reserved.
|
# Copyright (c) 2011-2013 Cisco Systems, Inc. All rights reserved.
|
||||||
# Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||||
|
# Copyright (c) 2015 Los Alamos National Security, LLC. All rights
|
||||||
|
# reserved.
|
||||||
# $COPYRIGHT$
|
# $COPYRIGHT$
|
||||||
#
|
#
|
||||||
# Additional copyrights may follow
|
# Additional copyrights may follow
|
||||||
@ -22,23 +24,24 @@ ompi_HEADERS = \
|
|||||||
|
|
||||||
lib_LTLIBRARIES = libmpi_java.la
|
lib_LTLIBRARIES = libmpi_java.la
|
||||||
libmpi_java_la_SOURCES = \
|
libmpi_java_la_SOURCES = \
|
||||||
mpi_CartComm.c \
|
mpi_CartComm.c \
|
||||||
mpi_Comm.c \
|
mpi_Comm.c \
|
||||||
mpi_Constant.c \
|
mpi_Constant.c \
|
||||||
mpi_Datatype.c \
|
mpi_Count.c \
|
||||||
mpi_Errhandler.c \
|
mpi_Datatype.c \
|
||||||
|
mpi_Errhandler.c \
|
||||||
mpi_File.c \
|
mpi_File.c \
|
||||||
mpi_GraphComm.c \
|
mpi_GraphComm.c \
|
||||||
mpi_Group.c \
|
mpi_Group.c \
|
||||||
mpi_Info.c \
|
mpi_Info.c \
|
||||||
mpi_Intercomm.c \
|
mpi_Intercomm.c \
|
||||||
mpi_Intracomm.c \
|
mpi_Intracomm.c \
|
||||||
mpi_Message.c \
|
mpi_Message.c \
|
||||||
mpi_MPI.c \
|
mpi_MPI.c \
|
||||||
mpi_Op.c \
|
mpi_Op.c \
|
||||||
mpi_Request.c \
|
mpi_Request.c \
|
||||||
mpi_Prequest.c \
|
mpi_Prequest.c \
|
||||||
mpi_Status.c \
|
mpi_Status.c \
|
||||||
mpi_Win.c
|
mpi_Win.c
|
||||||
|
|
||||||
libmpi_java_la_LIBADD = $(top_builddir)/ompi/libmpi.la
|
libmpi_java_la_LIBADD = $(top_builddir)/ompi/libmpi.la
|
||||||
|
@ -33,6 +33,8 @@ typedef struct {
|
|||||||
jmethodID ShiftParmsInit;
|
jmethodID ShiftParmsInit;
|
||||||
jclass VersionClass;
|
jclass VersionClass;
|
||||||
jmethodID VersionInit;
|
jmethodID VersionInit;
|
||||||
|
jclass CountClass;
|
||||||
|
jmethodID CountInit;
|
||||||
jclass GraphParmsClass;
|
jclass GraphParmsClass;
|
||||||
jmethodID GraphParmsInit;
|
jmethodID GraphParmsInit;
|
||||||
jclass DistGraphNeighborsClass;
|
jclass DistGraphNeighborsClass;
|
||||||
|
52
ompi/mpi/java/c/mpi_Count.c
Обычный файл
52
ompi/mpi/java/c/mpi_Count.c
Обычный файл
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
|
||||||
|
* reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This file is almost a complete re-write for Open MPI compared to the
|
||||||
|
* original mpiJava package. Its license and copyright are listed below.
|
||||||
|
* See <path to ompi/mpi/java/README> for more information.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File : Version.java
|
||||||
|
* Author : Nathaniel Graham
|
||||||
|
* Created : Thu Jul 30 09:34 2015
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ompi_config.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#ifdef HAVE_TARGETCONDITIONALS_H
|
||||||
|
#include <TargetConditionals.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "mpi.h"
|
||||||
|
#include "mpi_Count.h"
|
||||||
|
#include "mpiJava.h"
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_mpi_Count_initCount(JNIEnv *env, jclass jthis)
|
||||||
|
{
|
||||||
|
jclass c = (*env)->FindClass(env, "mpi/Count");
|
||||||
|
ompi_java.CountClass = (*env)->NewGlobalRef(env, c);
|
||||||
|
ompi_java.CountInit = (*env)->GetMethodID(env, ompi_java.CountClass, "<init>", "(J)V");
|
||||||
|
|
||||||
|
(*env)->DeleteLocalRef(env, c);
|
||||||
|
}
|
@ -205,6 +205,7 @@ static void deleteClasses(JNIEnv *env)
|
|||||||
(*env)->DeleteGlobalRef(env, ompi_java.CartParmsClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.CartParmsClass);
|
||||||
(*env)->DeleteGlobalRef(env, ompi_java.ShiftParmsClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.ShiftParmsClass);
|
||||||
(*env)->DeleteGlobalRef(env, ompi_java.VersionClass);
|
(*env)->DeleteGlobalRef(env, ompi_java.VersionClass);
|
||||||
|
(*env)->DeleteGlobalRef(env, ompi_java.CountClass);
|
||||||
(*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.StatusClass);
|
||||||
|
@ -109,6 +109,21 @@ JNIEXPORT jint JNICALL Java_mpi_Status_getElements(
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_mpi_Status_getElementsX(
|
||||||
|
JNIEnv *env, jobject jthis, jint source, jint tag,
|
||||||
|
jint error, jint cancelled, jlong ucount, jlong jType)
|
||||||
|
{
|
||||||
|
MPI_Count count;
|
||||||
|
MPI_Status stat;
|
||||||
|
getStatus(&stat, source, tag, error, cancelled, ucount);
|
||||||
|
MPI_Datatype datatype = (MPI_Datatype)jType;
|
||||||
|
int rc = MPI_Get_elements_x(&stat, datatype, &count);
|
||||||
|
ompi_java_exceptionCheck(env, rc);
|
||||||
|
|
||||||
|
return (*env)->NewObject(env, ompi_java.CountClass,
|
||||||
|
ompi_java.CountInit, (jlong)count);
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_mpi_Status_setElements(
|
JNIEXPORT jint JNICALL Java_mpi_Status_setElements(
|
||||||
JNIEnv *env, jobject jthis, jint source, jint tag,
|
JNIEnv *env, jobject jthis, jint source, jint tag,
|
||||||
jint error, jint cancelled, jlong ucount, jlong jType, int count)
|
jint error, jint cancelled, jlong ucount, jlong jType, int count)
|
||||||
@ -121,6 +136,19 @@ JNIEXPORT jint JNICALL Java_mpi_Status_setElements(
|
|||||||
return stat._ucount;
|
return stat._ucount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jlong JNICALL Java_mpi_Status_setElementsX(
|
||||||
|
JNIEnv *env, jobject jthis, jint source, jint tag,
|
||||||
|
jint error, jint cancelled, jlong ucount, jlong jType, jlong jcount)
|
||||||
|
{
|
||||||
|
MPI_Status stat;
|
||||||
|
MPI_Count count = (long)jcount;
|
||||||
|
getStatus(&stat, source, tag, error, cancelled, ucount);
|
||||||
|
MPI_Datatype datatype = (MPI_Datatype)jType;
|
||||||
|
int rc = MPI_Status_set_elements_x(&stat, datatype, count);
|
||||||
|
ompi_java_exceptionCheck(env, rc);
|
||||||
|
return (jlong)stat._ucount;
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_mpi_Status_setCancelled(
|
JNIEXPORT void JNICALL Java_mpi_Status_setCancelled(
|
||||||
JNIEnv *env, jobject jthis, jint source, jint tag,
|
JNIEnv *env, jobject jthis, jint source, jint tag,
|
||||||
jint error, jint cancelled, jlong ucount, int flag)
|
jint error, jint cancelled, jlong ucount, int flag)
|
||||||
|
96
ompi/mpi/java/java/Count.java
Обычный файл
96
ompi/mpi/java/java/Count.java
Обычный файл
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
|
||||||
|
* reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This file is almost a complete re-write for Open MPI compared to the
|
||||||
|
* original mpiJava package. Its license and copyright are listed below.
|
||||||
|
* See <path to ompi/mpi/java/README> for more information.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File : Count.java
|
||||||
|
* Author : Nathaniel Graham
|
||||||
|
* Created : Thu Jul 29 17:13 2015
|
||||||
|
*/
|
||||||
|
|
||||||
|
package mpi;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents {@code MPI_Count}.
|
||||||
|
*/
|
||||||
|
public final class Count implements Comparable
|
||||||
|
{
|
||||||
|
private long count;
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
System.loadLibrary("mpi_java");
|
||||||
|
initCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static native void initCount();
|
||||||
|
|
||||||
|
public Count(long count)
|
||||||
|
{
|
||||||
|
this.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets value associated with this Count object.
|
||||||
|
* @return Count value
|
||||||
|
*/
|
||||||
|
public long getCount()
|
||||||
|
{
|
||||||
|
return this.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value associated with this Count object.
|
||||||
|
* @param count the value to set for this count object
|
||||||
|
*/
|
||||||
|
public void setCount(long count)
|
||||||
|
{
|
||||||
|
this.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if(obj instanceof Count) {
|
||||||
|
if(this.count == ((Count)obj).getCount()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo(Object obj)
|
||||||
|
{
|
||||||
|
if(obj instanceof Count) {
|
||||||
|
if(this.count - ((Count)obj).getCount() > 0) {
|
||||||
|
return 1;
|
||||||
|
} else if(this.count - ((Count)obj).getCount() == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} // Count
|
@ -25,37 +25,38 @@ include $(top_srcdir)/Makefile.ompi-rules
|
|||||||
# just list them here in EXTRA_DIST so that they get picked up by
|
# just list them here in EXTRA_DIST so that they get picked up by
|
||||||
# "make dist".
|
# "make dist".
|
||||||
JAVA_SRC_FILES = \
|
JAVA_SRC_FILES = \
|
||||||
CartComm.java \
|
CartComm.java \
|
||||||
CartParms.java \
|
CartParms.java \
|
||||||
Comm.java \
|
Comm.java \
|
||||||
Constant.java \
|
Constant.java \
|
||||||
Datatype.java \
|
Count.java \
|
||||||
|
Datatype.java \
|
||||||
DistGraphNeighbors.java \
|
DistGraphNeighbors.java \
|
||||||
DoubleInt.java \
|
DoubleInt.java \
|
||||||
DoubleComplex.java \
|
DoubleComplex.java \
|
||||||
Errhandler.java \
|
Errhandler.java \
|
||||||
FloatComplex.java \
|
FloatComplex.java \
|
||||||
FloatInt.java \
|
FloatInt.java \
|
||||||
File.java \
|
File.java \
|
||||||
FileView.java \
|
FileView.java \
|
||||||
Freeable.java \
|
Freeable.java \
|
||||||
GraphComm.java \
|
GraphComm.java \
|
||||||
GraphParms.java \
|
GraphParms.java \
|
||||||
Group.java \
|
Group.java \
|
||||||
Info.java \
|
Info.java \
|
||||||
Int2.java \
|
Int2.java \
|
||||||
Intercomm.java \
|
Intercomm.java \
|
||||||
Intracomm.java \
|
Intracomm.java \
|
||||||
LongInt.java \
|
LongInt.java \
|
||||||
Message.java \
|
Message.java \
|
||||||
MPI.java \
|
MPI.java \
|
||||||
MPIException.java \
|
MPIException.java \
|
||||||
Op.java \
|
Op.java \
|
||||||
Prequest.java \
|
Prequest.java \
|
||||||
Request.java \
|
Request.java \
|
||||||
ShiftParms.java \
|
ShiftParms.java \
|
||||||
ShortInt.java \
|
ShortInt.java \
|
||||||
Status.java \
|
Status.java \
|
||||||
Struct.java \
|
Struct.java \
|
||||||
UserFunction.java \
|
UserFunction.java \
|
||||||
Version.java \
|
Version.java \
|
||||||
@ -71,26 +72,27 @@ if OMPI_WANT_JAVA_BINDINGS
|
|||||||
# we have a specific list of files here, as opposed to deriving them
|
# we have a specific list of files here, as opposed to deriving them
|
||||||
# from JAVA_SRC_FILES.
|
# from JAVA_SRC_FILES.
|
||||||
JAVA_H = \
|
JAVA_H = \
|
||||||
mpi_MPI.h \
|
mpi_MPI.h \
|
||||||
mpi_CartParms.h \
|
mpi_CartParms.h \
|
||||||
mpi_CartComm.h \
|
mpi_CartComm.h \
|
||||||
mpi_Comm.h \
|
mpi_Comm.h \
|
||||||
mpi_Constant.h \
|
mpi_Constant.h \
|
||||||
mpi_Datatype.h \
|
mpi_Count.h \
|
||||||
mpi_Errhandler.h \
|
mpi_Datatype.h \
|
||||||
|
mpi_Errhandler.h \
|
||||||
mpi_File.h \
|
mpi_File.h \
|
||||||
mpi_GraphParms.h \
|
mpi_GraphParms.h \
|
||||||
mpi_GraphComm.h \
|
mpi_GraphComm.h \
|
||||||
mpi_Group.h \
|
mpi_Group.h \
|
||||||
mpi_Info.h \
|
mpi_Info.h \
|
||||||
mpi_Intercomm.h \
|
mpi_Intercomm.h \
|
||||||
mpi_Intracomm.h \
|
mpi_Intracomm.h \
|
||||||
mpi_Message.h \
|
mpi_Message.h \
|
||||||
mpi_Op.h \
|
mpi_Op.h \
|
||||||
mpi_Prequest.h \
|
mpi_Prequest.h \
|
||||||
mpi_Request.h \
|
mpi_Request.h \
|
||||||
mpi_ShiftParms.h \
|
mpi_ShiftParms.h \
|
||||||
mpi_Status.h \
|
mpi_Status.h \
|
||||||
mpi_Version.h \
|
mpi_Version.h \
|
||||||
mpi_Win.h
|
mpi_Win.h
|
||||||
|
|
||||||
|
@ -137,6 +137,29 @@ public final class Status
|
|||||||
int source, int tag, int error,
|
int source, int tag, int error,
|
||||||
int cancelled, long ucount, long datatype) throws MPIException;
|
int cancelled, long ucount, long datatype) throws MPIException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the number of basic elements from status.
|
||||||
|
* <p>Java binding of the MPI operation {@code MPI_GET_ELEMENTS_X}.
|
||||||
|
* @param datatype datatype used by receive operation
|
||||||
|
* @return number of received basic elements
|
||||||
|
* @throws MPIException Signals that an MPI exception of some sort has occurred.
|
||||||
|
*/
|
||||||
|
public Count getElementsX(Datatype datatype) throws MPIException
|
||||||
|
{
|
||||||
|
MPI.check();
|
||||||
|
int i = 0;
|
||||||
|
int source = (int)data[i++];
|
||||||
|
int tag = (int)data[i++];
|
||||||
|
int error = (int)data[i++];
|
||||||
|
int cancelled = (int)data[i++];
|
||||||
|
long ucount = data[i++];
|
||||||
|
return getElementsX(source, tag, error, cancelled, ucount, datatype.handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private native Count getElementsX(
|
||||||
|
int source, int tag, int error,
|
||||||
|
int cancelled, long ucount, long datatype) throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the number of basic elements for this status object.
|
* Sets the number of basic elements for this status object.
|
||||||
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_ELEMENTS}.
|
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_ELEMENTS}.
|
||||||
@ -160,6 +183,29 @@ public final class Status
|
|||||||
int source, int tag, int error,
|
int source, int tag, int error,
|
||||||
int cancelled, long ucount, long datatype, int count) throws MPIException;
|
int cancelled, long ucount, long datatype, int count) throws MPIException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the number of basic elements for this status object.
|
||||||
|
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_ELEMENTS_X}.
|
||||||
|
* @param datatype datatype used by receive operation
|
||||||
|
* @param count number of elements to associate with the status
|
||||||
|
* @throws MPIException Signals that an MPI exception of some sort has occurred.
|
||||||
|
*/
|
||||||
|
public void setElementsX(Datatype datatype, Count count) throws MPIException
|
||||||
|
{
|
||||||
|
MPI.check();
|
||||||
|
int i = 0;
|
||||||
|
int source = (int)data[i++];
|
||||||
|
int tag = (int)data[i++];
|
||||||
|
int error = (int)data[i++];
|
||||||
|
int cancelled = (int)data[i++];
|
||||||
|
long ucount = data[i++];
|
||||||
|
data[4] = setElementsX(source, tag, error, cancelled, ucount, datatype.handle, count.getCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
private native long setElementsX(
|
||||||
|
int source, int tag, int error,
|
||||||
|
int cancelled, long ucount, long datatype, long count) throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the cancelled flag.
|
* Sets the cancelled flag.
|
||||||
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_CANCELLED}.
|
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_CANCELLED}.
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user