簡體   English   中英

在C中調試並行程序

[英]Debugging Parallel Program In C

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

有時會給出0或3作為斐波那契數,或者崩潰會導致細分錯誤。

#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); 
}

該程序有什么問題?

輸出如下:

來自(3)的Hello world

Fib(8)= 3 x 3

您需要像#pragma omp taskwait taskwait一樣,先執行taskwait,然后再返回(i+j) 否則,它將在完全計算數字之前返回,而無需等待其他任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM