2

これが可能かどうか疑問に思っています。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
                             }
4

1 に答える 1

3

ユーザー定義の操作で実行できることには制限はありません。入力からいくつかの要素が与えられるだけで、結果を計算することが期待されます。ユーザー操作の唯一の要件は、それらが関連付けられていることです。また、関数が取得する要素の数を予測する方法もありません。これはMPI実装次第であり、lenパラメーターによって指定されます。

于 2012-03-23T09:33:37.143 に答える