1
1

Comm.reduceLocal: add missing offset artifact

This commit was SVN r30108.
Этот коммит содержится в:
Oscar Vega-Gisbert 2014-01-02 21:57:48 +00:00
родитель fb0f7d7fa5
Коммит c9b7ea6d1a
2 изменённых файлов: 25 добавлений и 10 удалений

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

@ -1965,18 +1965,17 @@ JNIEXPORT jlong JNICALL Java_mpi_Comm_iReduceScatterBlock(
return (jlong)request;
}
JNIEXPORT void JNICALL Java_mpi_Comm_reduceLocal_1jni(
JNIEnv *env, jobject jthis,
jobject inbuf, jobject inoutbuf,
jint count, jobject type, jobject op)
JNIEXPORT void JNICALL Java_mpi_Comm_reduceLocal(
JNIEnv *env, jobject jthis, jobject inbuf, jint inoff,
jobject inoutbuf, jint inoutoff, jint count, jobject type, jobject op)
{
MPI_Datatype mpi_type =
(MPI_Datatype)((*env)->GetLongField(env,type,ompi_java.DatatypeHandle));
int baseType = (*env)->GetIntField(env, type, ompi_java.DatatypeBaseType);
void *inptr, *inbase, *inoutptr, *inoutbase;
inptr = ompi_java_getBufPtr(&inbase, env, inbuf, baseType, 0);
inoutptr = ompi_java_getBufPtr(&inoutbase, env, inoutbuf, baseType, 0);
inptr = ompi_java_getBufPtr(&inbase, env, inbuf, baseType, inoff);
inoutptr = ompi_java_getBufPtr(&inoutbase, env, inoutbuf, baseType, inoutoff);
int rc = MPI_Reduce_local(inptr, inoutptr, count, mpi_type,
ompi_java_op_getHandle(env, op, baseType));

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

@ -2631,12 +2631,28 @@ public final void reduceLocal(Object inbuf, Object inoutbuf, int count,
{
MPI.check();
op.setDatatype(type);
reduceLocal_jni(inbuf, inoutbuf, count, type, op);
int inoff = 0,
inoutoff = 0;
if(isHeapBuffer(inbuf))
{
inoff = ((Buffer)inbuf).arrayOffset();
inbuf = ((Buffer)inbuf).array();
}
if(isHeapBuffer(inoutbuf))
{
inoutoff = ((Buffer)inoutbuf).arrayOffset();
inoutbuf = ((Buffer)inoutbuf).array();
}
reduceLocal(inbuf, inoff, inoutbuf, inoutoff, count, type, op);
}
private native void reduceLocal_jni(Object inbuf, Object inoutbuf, int count,
Datatype datatype, Op op)
throws MPIException;
private native void reduceLocal(
Object inbuf, int inoff, Object inoutbuf, int inoutoff,
int count, Datatype datatype, Op op) throws MPIException;
/**
* Sets the print name for the communicator.