1
1

mpi/java: Add missing Java binding methods

This commit add the following methods.

| Language-indep. notation | Java binding            |
| ------------------------ | ----------------------- |
| MPI_WIN_GET_ERRHANDLER   | mpi.Win.getErrhandler   |
| MPI_FILE_SET_ERRHANDLER  | mpi.File.setErrhandler  |
| MPI_FILE_GET_ERRHANDLER  | mpi.File.getErrhandler  |
| MPI_COMM_CALL_ERRHANDLER | mpi.Comm.callErrhandler |
| MPI_FILE_CALL_ERRHANDLER | mpi.File.callErrhandler |
| MPI_FILE_IREAD_AT_ALL    | mpi.File.iReadAtAll     |
| MPI_FILE_IWRITE_AT_ALL   | mpi.File.iWriteAtAll    |
| MPI_FILE_IREAD_ALL       | mpi.File.iReadAll       |
| MPI_FILE_IWRITE_ALL      | mpi.File.iWriteAll      |
| MPI_FILE_GET_ATOMICITY   | mpi.File.getAtomicity   |

`MPI_FILE_I{READ,WRITE}(_AT)_ALL` routines are added in MPI-3.1.
I don't know why other methods were missing.

Signed-off-by: KAWASHIMA Takahiro <t-kawashima@jp.fujitsu.com>
Этот коммит содержится в:
KAWASHIMA Takahiro 2017-04-24 16:00:57 +09:00
родитель 2d75962726
Коммит 8558185c85
6 изменённых файлов: 278 добавлений и 0 удалений

Просмотреть файл

@ -13,6 +13,7 @@
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights * Copyright (c) 2016 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2017 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -708,6 +709,13 @@ JNIEXPORT jlong JNICALL Java_mpi_Comm_getErrhandler(
return (jlong)errhandler; return (jlong)errhandler;
} }
JNIEXPORT void JNICALL Java_mpi_Comm_callErrhandler(
JNIEnv *env, jobject jthis, jlong comm, jint errorCode)
{
int rc = MPI_Comm_call_errhandler((MPI_Comm)comm, errorCode);
ompi_java_exceptionCheck(env, rc);
}
static int commCopyAttr(MPI_Comm oldcomm, int keyval, void *extraState, static int commCopyAttr(MPI_Comm oldcomm, int keyval, void *extraState,
void *attrValIn, void *attrValOut, int *flag) void *attrValIn, void *attrValOut, int *flag)
{ {

Просмотреть файл

@ -11,6 +11,7 @@
* All rights reserved. * All rights reserved.
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights * Copyright (c) 2016 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2017 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -236,6 +237,20 @@ JNIEXPORT jlong JNICALL Java_mpi_File_iReadAt(
return (jlong)request; return (jlong)request;
} }
JNIEXPORT jlong JNICALL Java_mpi_File_iReadAtAll(
JNIEnv *env, jobject jthis, jlong fh, jlong offset,
jobject buf, jint count, jlong type)
{
void *ptr = (*env)->GetDirectBufferAddress(env, buf);
MPI_Request request;
int rc = MPI_File_iread_at_all((MPI_File)fh, (MPI_Offset)offset,
ptr, count, (MPI_Datatype)type, &request);
ompi_java_exceptionCheck(env, rc);
return (jlong)request;
}
JNIEXPORT jlong JNICALL Java_mpi_File_iWriteAt( JNIEXPORT jlong JNICALL Java_mpi_File_iWriteAt(
JNIEnv *env, jobject jthis, jlong fh, jlong offset, JNIEnv *env, jobject jthis, jlong fh, jlong offset,
jobject buf, jint count, jlong type) jobject buf, jint count, jlong type)
@ -250,6 +265,20 @@ JNIEXPORT jlong JNICALL Java_mpi_File_iWriteAt(
return (jlong)request; return (jlong)request;
} }
JNIEXPORT jlong JNICALL Java_mpi_File_iWriteAtAll(
JNIEnv *env, jobject jthis, jlong fh, jlong offset,
jobject buf, jint count, jlong type)
{
void *ptr = (*env)->GetDirectBufferAddress(env, buf);
MPI_Request request;
int rc = MPI_File_iwrite_at_all((MPI_File)fh, (MPI_Offset)offset,
ptr, count, (MPI_Datatype)type, &request);
ompi_java_exceptionCheck(env, rc);
return (jlong)request;
}
JNIEXPORT void JNICALL Java_mpi_File_read( JNIEXPORT void JNICALL Java_mpi_File_read(
JNIEnv *env, jobject jthis, jlong fh, jobject buf, jboolean db, JNIEnv *env, jobject jthis, jlong fh, jobject buf, jboolean db,
jint off, jint count, jlong jType, jint bType, jlongArray stat) jint off, jint count, jlong jType, jint bType, jlongArray stat)
@ -336,6 +365,20 @@ JNIEXPORT jlong JNICALL Java_mpi_File_iRead(
return (jlong)request; return (jlong)request;
} }
JNIEXPORT jlong JNICALL Java_mpi_File_iReadAll(
JNIEnv *env, jobject jthis, jlong fh,
jobject buf, jint count, jlong type)
{
void *ptr = (*env)->GetDirectBufferAddress(env, buf);
MPI_Request request;
int rc = MPI_File_iread_all((MPI_File)fh, ptr, count,
(MPI_Datatype)type, &request);
ompi_java_exceptionCheck(env, rc);
return (jlong)request;
}
JNIEXPORT jlong JNICALL Java_mpi_File_iWrite( JNIEXPORT jlong JNICALL Java_mpi_File_iWrite(
JNIEnv *env, jobject jthis, jlong fh, JNIEnv *env, jobject jthis, jlong fh,
jobject buf, jint count, jlong type) jobject buf, jint count, jlong type)
@ -350,6 +393,20 @@ JNIEXPORT jlong JNICALL Java_mpi_File_iWrite(
return (jlong)request; return (jlong)request;
} }
JNIEXPORT jlong JNICALL Java_mpi_File_iWriteAll(
JNIEnv *env, jobject jthis, jlong fh,
jobject buf, jint count, jlong type)
{
void *ptr = (*env)->GetDirectBufferAddress(env, buf);
MPI_Request request;
int rc = MPI_File_iwrite_all((MPI_File)fh, ptr, count,
(MPI_Datatype)type, &request);
ompi_java_exceptionCheck(env, rc);
return (jlong)request;
}
JNIEXPORT void JNICALL Java_mpi_File_seek( JNIEXPORT void JNICALL Java_mpi_File_seek(
JNIEnv *env, jobject jthis, jlong fh, jlong offset, jint whence) JNIEnv *env, jobject jthis, jlong fh, jlong offset, jint whence)
{ {
@ -646,9 +703,43 @@ JNIEXPORT void JNICALL Java_mpi_File_setAtomicity(
ompi_java_exceptionCheck(env, rc); ompi_java_exceptionCheck(env, rc);
} }
JNIEXPORT jboolean JNICALL Java_mpi_File_getAtomicity(
JNIEnv *env, jobject jthis, jlong fh)
{
int atomicity;
int rc = MPI_File_get_atomicity((MPI_File)fh, &atomicity);
ompi_java_exceptionCheck(env, rc);
return atomicity ? JNI_TRUE : JNI_FALSE;
}
JNIEXPORT void JNICALL Java_mpi_File_sync( JNIEXPORT void JNICALL Java_mpi_File_sync(
JNIEnv *env, jobject jthis, jlong fh) JNIEnv *env, jobject jthis, jlong fh)
{ {
int rc = MPI_File_sync((MPI_File)fh); int rc = MPI_File_sync((MPI_File)fh);
ompi_java_exceptionCheck(env, rc); ompi_java_exceptionCheck(env, rc);
} }
JNIEXPORT void JNICALL Java_mpi_File_setErrhandler(
JNIEnv *env, jobject jthis, jlong fh, jlong errhandler)
{
int rc = MPI_File_set_errhandler(
(MPI_File)fh, (MPI_Errhandler)errhandler);
ompi_java_exceptionCheck(env, rc);
}
JNIEXPORT jlong JNICALL Java_mpi_File_getErrhandler(
JNIEnv *env, jobject jthis, jlong fh)
{
MPI_Errhandler errhandler;
int rc = MPI_File_get_errhandler((MPI_File)fh, &errhandler);
ompi_java_exceptionCheck(env, rc);
return (jlong)errhandler;
}
JNIEXPORT void JNICALL Java_mpi_File_callErrhandler(
JNIEnv *env, jobject jthis, jlong fh, jint errorCode)
{
int rc = MPI_File_call_errhandler((MPI_File)fh, errorCode);
ompi_java_exceptionCheck(env, rc);
}

Просмотреть файл

@ -13,6 +13,7 @@
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights * Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2017 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -226,6 +227,15 @@ JNIEXPORT void JNICALL Java_mpi_Win_setErrhandler(
ompi_java_exceptionCheck(env, rc); ompi_java_exceptionCheck(env, rc);
} }
JNIEXPORT jlong JNICALL Java_mpi_Win_getErrhandler(
JNIEnv *env, jobject jthis, jlong win)
{
MPI_Errhandler errhandler;
int rc = MPI_Win_get_errhandler((MPI_Win)win, &errhandler);
ompi_java_exceptionCheck(env, rc);
return (jlong)errhandler;
}
JNIEXPORT void JNICALL Java_mpi_Win_callErrhandler( JNIEXPORT void JNICALL Java_mpi_Win_callErrhandler(
JNIEnv *env, jobject jthis, jlong win, jint errorCode) JNIEnv *env, jobject jthis, jlong win, jint errorCode)
{ {

Просмотреть файл

@ -13,6 +13,7 @@
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights * Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2017 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -1196,6 +1197,20 @@ public class Comm implements Freeable, Cloneable
private native long getErrhandler(long comm); private native long getErrhandler(long comm);
/**
* Calls the error handler currently associated with the communicator.
* <p>Java binding of the MPI operation {@code MPI_COMM_CALL_ERRHANDLER}.
* @param errorCode error code
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public void callErrhandler(int errorCode) throws MPIException
{
callErrhandler(handle, errorCode);
}
private native void callErrhandler(long handle, int errorCode)
throws MPIException;
// Collective Communication // Collective Communication
/** /**

Просмотреть файл

@ -11,6 +11,7 @@
* All rights reserved. * All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights * Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2017 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -405,6 +406,29 @@ public final class File
long fh, long offset, Buffer buf, int count, long type) long fh, long offset, Buffer buf, int count, long type)
throws MPIException; throws MPIException;
/**
* Java binding of {@code MPI_FILE_IREAD_AT_ALL}.
* @param offset file offset
* @param buf buffer
* @param count number of items in buffer
* @param type datatype of each buffer element
* @return request object
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public Request iReadAtAll(long offset, Buffer buf, int count, Datatype type)
throws MPIException
{
MPI.check();
assertDirectBuffer(buf);
Request req = new Request(iReadAtAll(handle, offset, buf, count, type.handle));
req.addRecvBufRef(buf);
return req;
}
private native long iReadAtAll(
long fh, long offset, Buffer buf, int count, long type)
throws MPIException;
/** /**
* Java binding of {@code MPI_FILE_IWRITE_AT}. * Java binding of {@code MPI_FILE_IWRITE_AT}.
* @param offset file offset * @param offset file offset
@ -428,6 +452,29 @@ public final class File
long fh, long offset, Buffer buf, int count, long type) long fh, long offset, Buffer buf, int count, long type)
throws MPIException; throws MPIException;
/**
* Java binding of {@code MPI_FILE_IWRITE_AT_ALL}.
* @param offset file offset
* @param buf buffer
* @param count number of items in buffer
* @param type datatype of each buffer element
* @return request object
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public Request iWriteAtAll(long offset, Buffer buf, int count, Datatype type)
throws MPIException
{
MPI.check();
assertDirectBuffer(buf);
Request req = new Request(iWriteAtAll(handle, offset, buf, count, type.handle));
req.addSendBufRef(buf);
return req;
}
private native long iWriteAtAll(
long fh, long offset, Buffer buf, int count, long type)
throws MPIException;
/** /**
* Java binding of {@code MPI_FILE_READ}. * Java binding of {@code MPI_FILE_READ}.
* @param buf buffer * @param buf buffer
@ -564,6 +611,26 @@ public final class File
private native long iRead(long fh, Buffer buf, int count, long type) private native long iRead(long fh, Buffer buf, int count, long type)
throws MPIException; throws MPIException;
/**
* Java binding of {@code MPI_FILE_IREAD_ALL}.
* @param buf buffer
* @param count number of items in buffer
* @param type datatype of each buffer element
* @return request object
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public Request iReadAll(Buffer buf, int count, Datatype type) throws MPIException
{
MPI.check();
assertDirectBuffer(buf);
Request req = new Request(iReadAll(handle, buf, count, type.handle));
req.addRecvBufRef(buf);
return req;
}
private native long iReadAll(long fh, Buffer buf, int count, long type)
throws MPIException;
/** /**
* Java binding of {@code MPI_FILE_IWRITE}. * Java binding of {@code MPI_FILE_IWRITE}.
* @param buf buffer * @param buf buffer
@ -584,6 +651,26 @@ public final class File
private native long iWrite(long fh, Buffer buf, int count, long type) private native long iWrite(long fh, Buffer buf, int count, long type)
throws MPIException; throws MPIException;
/**
* Java binding of {@code MPI_FILE_IWRITE_ALL}.
* @param buf buffer
* @param count number of items in buffer
* @param type datatype of each buffer element
* @return request object
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public Request iWriteAll(Buffer buf, int count, Datatype type) throws MPIException
{
MPI.check();
assertDirectBuffer(buf);
Request req = new Request(iWriteAll(handle, buf, count, type.handle));
req.addRecvBufRef(buf);
return req;
}
private native long iWriteAll(long fh, Buffer buf, int count, long type)
throws MPIException;
/** /**
* Java binding of {@code MPI_FILE_SEEK}. * Java binding of {@code MPI_FILE_SEEK}.
* @param offset file offset * @param offset file offset
@ -1234,6 +1321,19 @@ public final class File
private native void setAtomicity(long fh, boolean atomicity) private native void setAtomicity(long fh, boolean atomicity)
throws MPIException; throws MPIException;
/**
* Java binding of {@code MPI_FILE_GET_ATOMICITY}.
* @return current consistency of the file
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public boolean getAtomicity() throws MPIException
{
MPI.check();
return getAtomicity(handle);
}
private native boolean getAtomicity(long fh) throws MPIException;
/** /**
* Java binding of {@code MPI_FILE_SYNC}. * Java binding of {@code MPI_FILE_SYNC}.
* @throws MPIException Signals that an MPI exception of some sort has occurred. * @throws MPIException Signals that an MPI exception of some sort has occurred.
@ -1246,4 +1346,44 @@ public final class File
private native void sync(long handle) throws MPIException; private native void sync(long handle) throws MPIException;
/**
* Java binding of the MPI operation {@code MPI_FILE_SET_ERRHANDLER}.
* @param errhandler new MPI error handler for file
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public void setErrhandler(Errhandler errhandler) throws MPIException
{
MPI.check();
setErrhandler(handle, errhandler.handle);
}
private native void setErrhandler(long fh, long errhandler)
throws MPIException;
/**
* Java binding of the MPI operation {@code MPI_FILE_GET_ERRHANDLER}.
* @return MPI error handler currently associated with file
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public Errhandler getErrhandler() throws MPIException
{
MPI.check();
return new Errhandler(getErrhandler(handle));
}
private native long getErrhandler(long fh);
/**
* Java binding of the MPI operation {@code MPI_FILE_CALL_ERRHANDLER}.
* @param errorCode error code
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public void callErrhandler(int errorCode) throws MPIException
{
callErrhandler(handle, errorCode);
}
private native void callErrhandler(long handle, int errorCode)
throws MPIException;
} // File } // File

Просмотреть файл

@ -13,6 +13,7 @@
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights * Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2017 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -427,6 +428,19 @@ public final class Win implements Freeable
private native void setErrhandler(long win, long errhandler) private native void setErrhandler(long win, long errhandler)
throws MPIException; throws MPIException;
/**
* Java binding of the MPI operation {@code MPI_WIN_GET_ERRHANDLER}.
* @return MPI error handler currently associated with window
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public Errhandler getErrhandler() throws MPIException
{
MPI.check();
return new Errhandler(getErrhandler(handle));
}
private native long getErrhandler(long win);
/** /**
* Java binding of the MPI operation {@code MPI_WIN_CALL_ERRHANDLER}. * Java binding of the MPI operation {@code MPI_WIN_CALL_ERRHANDLER}.
* @param errorCode error code * @param errorCode error code