我想使用OpenMP来并行化2d网格上的操作,其中每个线程将与网格的子部分一起工作。
想象一个函数f(lower,upper,grid)
,它将处理一个子区域,给定它的下限和上限(假设下面和上面指的是网格的一个轴)。
我的问题是,是否可以在未明确计算f
和lower
的情况下致电upper
?
例如,如果我有一个for循环,OpenMP将自动划分线程之间的循环。有没有办法让OpenMP划分范围并将范围分配给f
?
谢谢!
更新
澄清一下,如果我有一个for循环:
#pragma omp parallel for
for(int i=0;i<50;i++)
OpenMP会将for循环分开。我想知道的是类似于知道for循环是如何划分的。
答案 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在线程之间划分循环迭代)更好感觉对你很重要。