在C中调试并行程序

时间:2016-01-24 21:01:00

标签: c parallel-processing openmp fibonacci

我在OPen MP(C)中有以下程序。

它有时会给出0或3作为fibonnaci数或崩溃给出分段错误。

#include <stdlib.h>
#include <stdio.h>
#include <omp.h>

static int fib(int);

int main(){
 int nthreads, tid;
 int n =8;
 #pragma omp parallel num_threads(4) private(tid)

{
 #pragma omp single

{
 tid = omp_get_thread_num();
 printf("Hello world from (%d)\n", tid);
 printf("Fib(%d) = %d by %d\n", n, fib(n), tid);

}
 } // all threads join master thread and terminates
 }
static int fib(int n){
 int i, j, id;
 if(n < 2)
 return n;
 #pragma omp task shared (i) private (id)

{

i = fib(n-1);

}
 #pragma omp task shared (j) private (id)
{
 j = fib(n-2);

}

 return (i+j); 
}

该计划有什么问题?

输出如下:

  

Hello World from(3)

     

Fib(8)= 3乘3

1 个答案:

答案 0 :(得分:1)

在返回#pragma omp taskwait之前,您需要在(i+j)之前有一个taskwait。否则它将在数字完全计算之前返回,而不等待其他任务。