2012-03-23 51 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