并行简单循环时的OpenMP分段错误

时间:2020-04-03 02:00:19

标签: c segmentation-fault openmp

我有一个接收数组并在for循环中更新数组的函数,如下所示:

void compute(double values[], int num_points, double ders[]){
    for(int i = 0; i < num_points; ++i)
    {
        double a = values[i* 3 + 0 ];
        double b = values[i* 2 + 1 ];
        ders[i*4 + 0] = a * b;
        ders[i*4 + 1] = a * a;
        ders[i*4 + 2] = b * b;
        ders[i*4 + 3] = b * a * a;
   }
}

所有这些都很好,但是我随后更新代码以尝试与OpenMP并行执行

void compute(double values[], int num_points, double ders[]){
   omp_set_dynamic(0);
   omp_set_num_threads(2);
   #pragma omp parallel for
    for(int i = 0; i < num_points; ++i)
    {
        double a = values[i* 3 + 0 ];
        double b = values[i* 2 + 1 ];
        ders[i*4 + 0] = a * b;
        ders[i*4 + 1] = a * a;
        ders[i*4 + 2] = b * b;
        ders[i*4 + 3] = b * a * a;
   }
}

现在我遇到了细分错误。

我觉得我必须在两个线程中覆盖一些值-但der和value中的所有内容均根据'i'进行索引,因此感觉到并行化应该很简单。

我在做什么错了?

0 个答案:

没有答案