使用OpenMP并行化for循环

时间:2016-09-12 05:26:51

标签: c++ multithreading openmp

我是OpenMP的新手。当我使用

并行化for循环时
  #pragma omp parallel for num_threads(4)
  for(i=0;i<4;i++){
    //some parallelizable code
  }

是否保证每个线程只采用一个且i的值?当num_threads不等于或不均匀分配for循环的总次数时,循环如何在线程之间进行划分?是否有一个命令可用于指定每个线程只使用一个i值,或者每个线程的i值是多少?

1 个答案:

答案 0 :(得分:4)

循环结构中的工作分区由 schedule 决定。如果不存在schedule子句,则使用 def-sched-var 调度,这是实现定义的。

您可以使用schedule (static, 1),在您的情况下,保证每个线程只能获得一个值。

我强烈建议您查看OpenMP specification,表2.5和2.7.1.1。

进行这种假设可能有合理的理由,但一般来说,循环代码的正确性不应该依赖于此。主要是我会把它当作表现提示。

根据您的用例,您可能需要考虑任务或仅考虑并行结构。如果您依赖这些循环细节,请确保它在标准中已明确指定,而不是在您的特定实现中正常工作