MPI_Win_{attach,detach} : add Java bindings
Этот коммит содержится в:
родитель
ade7de549c
Коммит
0836344673
@ -55,6 +55,29 @@ JNIEXPORT jlong JNICALL Java_mpi_Win_create_dynamicWin(
|
|||||||
return (jlong)win;
|
return (jlong)win;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_mpi_Win_attach(
|
||||||
|
JNIEnv *env, jobject jthis, jobject jBase,
|
||||||
|
jint size)
|
||||||
|
{
|
||||||
|
void *base = (*env)->GetDirectBufferAddress(env, jBase);
|
||||||
|
MPI_Win win;
|
||||||
|
|
||||||
|
int rc = MPI_Win_attach(win, base, (MPI_Aint)size);
|
||||||
|
|
||||||
|
ompi_java_exceptionCheck(env, rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_mpi_Win_detach(
|
||||||
|
JNIEnv *env, jobject jthis, jobject jBase)
|
||||||
|
{
|
||||||
|
void *base = (*env)->GetDirectBufferAddress(env, jBase);
|
||||||
|
MPI_Win win;
|
||||||
|
|
||||||
|
int rc = MPI_Win_detach(win, base);
|
||||||
|
|
||||||
|
ompi_java_exceptionCheck(env, rc);
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_mpi_Win_getGroup(
|
JNIEXPORT jlong JNICALL Java_mpi_Win_getGroup(
|
||||||
JNIEnv *env, jobject jthis, jlong win)
|
JNIEnv *env, jobject jthis, jlong win)
|
||||||
{
|
{
|
||||||
|
@ -97,6 +97,51 @@ private int getBaseType(Datatype orgType, Datatype targetType)
|
|||||||
return baseType;
|
return baseType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Java binding of {@code MPI_WIN_ATTACH}.
|
||||||
|
* @param assertion program assertion
|
||||||
|
*/
|
||||||
|
public void attach(Buffer base, int size) throws MPIException
|
||||||
|
{
|
||||||
|
MPI.check();
|
||||||
|
if(!base.isDirect())
|
||||||
|
throw new IllegalArgumentException("The buffer must be direct.");
|
||||||
|
|
||||||
|
int baseSize;
|
||||||
|
|
||||||
|
if(base instanceof ByteBuffer)
|
||||||
|
baseSize = 1;
|
||||||
|
else if(base instanceof CharBuffer || base instanceof ShortBuffer)
|
||||||
|
baseSize = 2;
|
||||||
|
else if(base instanceof IntBuffer || base instanceof FloatBuffer)
|
||||||
|
baseSize = 4;
|
||||||
|
else if(base instanceof LongBuffer || base instanceof DoubleBuffer)
|
||||||
|
baseSize = 8;
|
||||||
|
else
|
||||||
|
throw new AssertionError();
|
||||||
|
|
||||||
|
int sizeBytes = size * baseSize,
|
||||||
|
|
||||||
|
attach(handle, base, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
private native void attach(long win, Buffer base, int size) throws MPIException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Java binding of {@code MPI_WIN_DETACH}.
|
||||||
|
* @param assertion program assertion
|
||||||
|
*/
|
||||||
|
public void detach(Buffer base) throws MPIException
|
||||||
|
{
|
||||||
|
MPI.check();
|
||||||
|
if(!base.isDirect())
|
||||||
|
throw new IllegalArgumentException("The buffer must be direct.");
|
||||||
|
|
||||||
|
detach(handle, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
private native void detach(long win, Buffer base) throws MPIException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Java binding of the MPI operation {@code MPI_GET_GROUP}.
|
* Java binding of the MPI operation {@code MPI_GET_GROUP}.
|
||||||
* @return group of processes which share access to the window
|
* @return group of processes which share access to the window
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user