Found this compatibility code yesterday when reviewing some of the C++
bindings with Dan: it's no longer necessary since we're firmly tied to Open MPI (I'm not sure it was ever necessary, actually...). This commit was SVN r17017.
Этот коммит содержится в:
родитель
ef5fa7aed5
Коммит
728eccda87
@ -635,42 +635,8 @@ MPI::Comm::NULL_COPY_FN(const MPI::Comm& oldcomm, int comm_keyval,
|
|||||||
void* extra_state, void* attribute_val_in,
|
void* extra_state, void* attribute_val_in,
|
||||||
void* attribute_val_out, bool& flag)
|
void* attribute_val_out, bool& flag)
|
||||||
{
|
{
|
||||||
#if SIZEOF_BOOL != SIZEOF_INT
|
flag = false;
|
||||||
int f = (int)flag;
|
|
||||||
int ret;
|
|
||||||
if (MPI_NULL_COPY_FN != 0) {
|
|
||||||
|
|
||||||
// Portland pgCC 5.0-2 has a bug that we have to workaround here.
|
|
||||||
// MPI_NULL_COPY_FN is actually a #define for ((MPI_Copy_function
|
|
||||||
// *) 0). If we try to invoke it, such as:
|
|
||||||
// ret = MPI_NULL_COPY_FN(...);
|
|
||||||
// the preprocessor will resolve this to:
|
|
||||||
// ret = ((MPI_Copy_function *) 0)(...);
|
|
||||||
// which should be fine. But unfortunately, pgCC 5.0-2 makes this
|
|
||||||
// into a real symbol that will refuse to link. The workaround is
|
|
||||||
// to assign this into a temp variable and then invoke through the
|
|
||||||
// function pointer. This shouldn't be necessary. :-(
|
|
||||||
|
|
||||||
MPI_Copy_function *stupid_compiler = MPI_NULL_COPY_FN;
|
|
||||||
ret = stupid_compiler(oldcomm, comm_keyval, extra_state, attribute_val_in,
|
|
||||||
attribute_val_out, &f);
|
|
||||||
flag = OPAL_INT_TO_BOOL(f);
|
|
||||||
} else {
|
|
||||||
ret = MPI_SUCCESS;
|
|
||||||
flag = true;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
#else
|
|
||||||
if (MPI_NULL_COPY_FN != 0) {
|
|
||||||
|
|
||||||
// See note above.
|
|
||||||
|
|
||||||
MPI_Copy_function *stupid_compiler = MPI_NULL_COPY_FN;
|
|
||||||
return stupid_compiler(oldcomm, comm_keyval, extra_state,
|
|
||||||
attribute_val_in, attribute_val_out, (int*)&flag);
|
|
||||||
} else
|
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int
|
inline int
|
||||||
@ -695,13 +661,6 @@ inline int
|
|||||||
MPI::Comm::NULL_DELETE_FN(MPI::Comm& comm, int comm_keyval, void* attribute_val,
|
MPI::Comm::NULL_DELETE_FN(MPI::Comm& comm, int comm_keyval, void* attribute_val,
|
||||||
void* extra_state)
|
void* extra_state)
|
||||||
{
|
{
|
||||||
if (MPI_NULL_DELETE_FN != 0) {
|
|
||||||
|
|
||||||
// See note in MPI_NULL_COPY_FN.
|
|
||||||
|
|
||||||
MPI_Delete_function *stupid_compiler = MPI_NULL_DELETE_FN;
|
|
||||||
return stupid_compiler(comm, comm_keyval, attribute_val, extra_state);
|
|
||||||
} else
|
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user