2012-03-23 52 views
2

我只是想知道这是否可能,如果它是任何人都有一个使用MPI_Op_create创建一个具有许多gsl和或将其内部的boost函数传递给mpi_reduce命令。在我的情况顺序并不重要,但串行和Openmp太慢,我想要做什么,所以我想尝试将其转换为mpi。使用MPI_Op_create与外部库函数,如boost或GSL

代替标准的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 
          } 

回答

3

没有限制哪些用户定义的操作可以这样做:他们只是给出从输入一些元素,并有望计算结果。用户操作的唯一要求是它们是关联的。也没有办法预测函数将获得多少元素:这取决于MPI实现,并且由参数len指定。

+0

它说我可以特定关联+交换或不(从openMPI文档,可能会因不同的实现而有所不同)在我的情况顺序并不重要,所以这是个好消息,谢谢 – pyCthon 2012-03-23 14:19:21