OpenMP For Loop Ranges

时间:2012-02-23 06:48:56

标签: c++ parallel-processing openmp

我想使用OpenMP来并行化2d网格上的操作,其中每个线程将与网格的子部分一起工作。

想象一个函数f(lower,upper,grid),它将处理一个子区域,给定它的下限和上限(假设下面和上面指的是网格的一个轴)。

我的问题是,是否可以在未明确计算flower的情况下致电upper

例如,如果我有一个for循环,OpenMP将自动划分线程之间的循环。有没有办法让OpenMP划分范围并将范围分配给f

谢谢!

更新

澄清一下,如果我有一个for循环:

#pragma omp parallel for
for(int i=0;i<50;i++)

OpenMP会将for循环分开。我想知道的是类似于知道for循环是如何划分的。

2 个答案:

答案 0 :(得分:0)

你可以尝试omp task,具体取决于每项任务的重要性(比parallel for

更重的开销

答案 1 :(得分:0)

我有理由相信你的问题的答案是否定的。我认为你必须编写诸如

之类的代码
f(lower(omp_get_thread_num()),upper(omp_get_thread_num()),grid)

其中upper()lower()现在是执行所需域分解的函数,它将线程id作为输入参数。

我让你知道OpenMP是否符合你的工作方式,或者让你的工作方式适应OpenMP(这意味着在这种情况下,让OpenMP在线程之间划分循环迭代)更好感觉对你很重要。