[MPI] 用户自定义归约操作

学习资料 《MPI并行程序设计》(都志辉) 13.17节

学习笔记

int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op)

function    用户自定义的函数(函数)

commute   可交换则为true,否则为 false   NOTE: 这里 可交换定义? 运算的可交换?

op              操作

 

       MPI_OP_CREATE 将用户自定义的函数 function 和操作 op联系起来, 这样的操作op可以像MPI预定义的归约操作一样用于各种MPI的归约函数中。用户自定义的操作必须是可以结合的。 如果commute=ture, 则此操作同时也是可交换的。如果commute=false,则此操作不满足交换律。

       用户自定义函数 function 必须具备四个参数: invec, inoutvec, len 和 datatype。 在C中的函数原型是:

         typedef void MPI_User_function(void *invec, void *inoutvec, int *len, MPI_Datatype *datatype)

       > invec 和 inoutvec 分别指出将要被归约的数据所在的缓冲区的首地址,

       > len指出将要归约的元素的个数, datatype 指出归约对象的数据类型

       > datatype, 指出归约对象的数据类型

       从非正式的角度来看,可以认为invec和inoutvec 是函数中长度为len的数组, 归约的结果重写了inoutvec 的值。每次调用此函数都导致了对这len个元素逐个进行相应的操作。

      在用户自定义的函数中不能调用MPI中的通信函数。 当函数出错时可能会调用MPI_ABORT。

 

函数:

int  MPI_Op_free(MPI_Op *op)

     MPI_Op_free 将用户自定义的归约操作撤销, 将op设置成MPI_OP_NULL。

 

 

     

      

       

posted on 2012-10-28 00:44  applesun0757  阅读(1077)  评论(0)    收藏  举报