[Mpi-forum] user-defined reductions and re-entrancy
Jeff Hammond
jeff.science at gmail.com
Tue Oct 20 11:02:40 CDT 2015
Is there anything in the MPI standard preventing this sort of disgusting
behavior?
/* user code increments evil once between every call to this function so
that it should never fail in single-threaded execution */
static int evil = 0;
MPI_User_function(void* invec, void* inoutvec, int *len, MPI_Datatype
*datatype)
{
evil++;
double * in = (double*)invec;
double * out = (double*)inoutvec;
if (*datatype == MPI_DOUBLE && (evil%2)==0) {
for (int i=0; i<*len; i++) out[i] = evil*in[i];
} else {
MPI_Abort(1,MPI_COMM_WORLD);
}
}
My goal is to illustrate a user-defined reduction that is not reentrant.
If you dislike my example, then please mentally replace it with a better
one of your own creation :-)
The more general question is, are there any constraints on whether
implementations may internally use multiple threads to call user-defined
reductions? I do not see any, but perhaps this is an oversight on my part.
Thanks,
Jeff
--
Jeff Hammond
jeff.science at gmail.com
http://jeffhammond.github.io/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpi-forum/attachments/20151020/84001c01/attachment.html>
More information about the mpi-forum
mailing list