Fibonacci的并行算法实现

并行算法

P-FIB(n)
    if n ≤ 1
        return n
    else x = spawn P-FIB(n-1)
        y = P-FIB(n-2)
        sync
        return x+y

Linux C的简单实现

#include 
#include 
#include 

void* P_FIB(void* arg){
    int n = (int)arg;
    int* p = malloc(sizeof(int));
    if(n<=1){
        *p = n;
        return p;
    }else{
        pthread_t pid;
        pthread_create(&pid,NULL,P_FIB,(void*)n-1);
        int* y = P_FIB((void*)n-2);
        int* x = 0;
        int err;
        if((err = pthread_join(pid,&x)) != 0){
            printf("%s\n",strerror(err));
        }
        *p = *x + *y;
        free(x);
        free(y);
        return p;
    }
}

int main(){
    int i;
    for(i=0;i<10;i++){
        int* res = P_FIB((void*)i);
        printf("%d\n",*res);
        free(res);
    }
}

C++11的简单实现

#include 
#include 
using namespace std;

void P_FIB(int* res,int n){
    if(n <= 1){
        *res = n;
    }else{
        int x(0),y(0);
        thread t(P_FIB,&x,n-1);
        P_FIB(&y,n-2);
        t.join();
        *res = x+y;
    }
}
int main(){
    int i;
    for(i=0;i<10;i++){
        int res(0);
        P_FIB(&res,i);
        printf("%d\n",res);
    }
}

以上,做法只是对并行算法的实现,实际上对于Fibonacci并不具备可行性,最有效的方式是使用DP。

你可能感兴趣的:(Fibonacci的并行算法实现)