2

我只是想知道这是否可行,以及是否有人有使用 MPI_Op_create 创建一个 Op 的示例,该函数内部具有许多 gsl 和/或 boost 函数,以将其传递给 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 回答