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 <stdio.h>
#include <stdlib.h>
#include <pthread.h>

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 <iostream>
#include <thread>
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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容