OpenMP错误消息

时间:2010-07-22 10:40:07

标签: openmp

执行在VS2008 C ++中使用openmp的程序时,我收到以下输出错误消息

  

主题编号:0

     

主题编号:1

     

致命用户错误1002:'for'循环执行时参数不一致   线程

我的程序执行以下操作:

    omp_set_dynamic(0);
    omp_set_num_threads(2);

    int i = 0;
    int start_pos   = 0;
    int end_pos     = 0;

#pragma omp parallel default(none) private(i, start_pos, end_pos)
    {
        int nThreadNum = omp_get_thread_num();
        printf("thread number: %d\n", nThreadNum);
        start_pos   = 0;
        end_pos     = (number_of_model_points / 2 + 1);
        if (nThreadNum != 0) {
            start_pos   = (number_of_model_points / 2) + 1;
            end_pos     = (number_of_model_points);
        }

#pragma omp for
        for(i = start_pos; i < end_pos; i++) {
                      ...some code here...
        }
}

这是什么问题?如果我犯了错误,请纠正我。

2 个答案:

答案 0 :(得分:1)

那么为什么for循环还有一个额外的pragma?你已经把你的流程分叉了。 如果你真的想再次分叉(请不要这样做,请!)然后“i”需要再次设置为私有。但是我认为你只想删除“omp for”pragma。

答案 1 :(得分:0)

Jonathan Dursi是正确的,因此总而言之,for循环边界参数不能为私有。在您的示例中,for(i = start_pos; i