Segfault具有简单的递归openmp任务

时间:2012-11-30 19:59:58

标签: c segmentation-fault openmp valgrind

我试图用openmp并行化这个递归函数:

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

void rec(int from, int to){
    int len=to-from;
    printf("%X %x %X %d\n", from, to, len, omp_get_thread_num());
    if (len > 1){
        int mid = (from+to)/2;
        #pragma omp task
        rec(from, mid);
        #pragma omp task
        rec(mid, to);
    }
}

int main(int argc, char *argv[]){
    long len=1024;

    #pragma omp parallel
    #pragma omp single
    rec(0, len);

    return 0;
}

但是当我运行它时,我会遇到段错误:

$g++ -fopenmp -Wall -pedantic -lefence -g -O0 test.cpp && ./a.out
0 400 400 0
0 200 200 1
200 400 200 0
Segmentation fault

当我在valgrind中运行它时,它没有显示任何错误。没有-lefence它也有效。

我尝试了#pragma omp子句的所有可能组合,它是单线程或段错误。

有什么问题?

非常感谢。

0 个答案:

没有答案