学习笔记
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。
浙公网安备 33010602011771号