OpenMP的错误消息

问题描述:

我而执行使用的openmp在VS2008 C++OpenMP的错误消息

线程编号方案得到了与错误消息的输出如下:0

线程号:1

致命用户错误1002 :for for循环执行 之间的参数不一致

我的程序会执行以下操作g:

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... 
     } 
} 

这里有什么问题?如果我犯了一个错误,请纠正我。

那么为什么还有一个额外的for循环的编译指示?您已经完成了您的流程。 如果你真的想再次分岔(不要这样做,请!),那么“我”需要再次设置为私人。不过,我认为你只是想删除“omp for”编译指示。

+0

这是错误原因的正确答案。你通常希望在'#pragma omp parallel'里面做一个'#pragma omp for'来利用工作共享 - 'omp for'会为你分割循环,否则你会拥有所有的线程(而不是进程)执行相同的循环。 **但是**,在这里你已经完成了自己手动分解循环的工作;有时这是有利的,虽然我没有看到这方面的好处。所以你希望所有的线程都为循环做同样的事情,每个线程都在自己的区域内进行。所以你不需要omp。 – 2012-04-04 15:15:14