これが可能かどうか疑問に思っています。MPI_Op_createを使用して、内部に多くのgsl関数やboost関数を含むOpを作成し、mpi_reduceコマンドに渡す例があります。私の状況では、順序は重要ではありませんが、シリアルとOpenmpは私がやりたいことには遅すぎるので、それをmpiに変換してみます。
標準のCの例の代わりに
void addem ( int *, int *, int *, MPI_Datatype * );
void addem(int *invec, int *inoutvec, int *len, MPI_Datatype *dtype)
{
int i;
for ( i=0; i<*len; i++ )
inoutvec[i] += invec[i];
}
その後、に渡されます
MPI_Op_create((MPI_User_function *)addem、1、&op);
私はそれを似たようなものに変更しますが、これよりもはるかに複雑です
void addgsl(gsl_vector* vec,gsl matrix* mat, int num,.....,MPI_Datatype *dtype)
for (int i=0; i <num; i++) {
//some complicated boost or gsl mathematical formula here
}