执行在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...
}
}
这是什么问题?如果我犯了错误,请纠正我。
答案 0 :(得分:1)
那么为什么for循环还有一个额外的pragma?你已经把你的流程分叉了。 如果你真的想再次分叉(请不要这样做,请!)然后“i”需要再次设置为私有。但是我认为你只想删除“omp for”pragma。
答案 1 :(得分:0)
Jonathan Dursi是正确的,因此总而言之,for循环边界参数不能为私有。在您的示例中,for(i = start_pos; i