我只是想知道这是否可能,如果是的话,任何人都会有一个使用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,&amp; 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
}
答案 0 :(得分:3)
用户定义的操作可以做什么没有限制:只需从输入中给出一些元素,并期望计算结果。用户操作的唯一要求是它们是关联的。也无法预测函数将获得多少元素:这取决于MPI实现,并由len
参数指定。