指针的OpenMP 4.0任务依赖性(OmpSs风格)

3

我希望在通过指针引用变量时,能够指定#pragma omp task depend(...)子句。在OmpSs中,这是可行的,看起来像是:

#pragma omp task in(*var1) out(*var2)

基本上这就是我想在OpenMP 4.0中做的事情,但以下代码:

#pragma omp task depend(in: *var1) depend(out: *var2)

产生以下错误:

error: expected identifier before ‘*’ token
    #pragma omp task depend(in: *var1) depend(out: *var2)

这该怎么在OpenMP 4.0中实现呢?

关于OmpSs,我一直想知道的是:如果他们不支持parallel结构,他们怎么能声称扩展了OpenMP呢? - Massimiliano
3
根据 OmpSs 规范,与 OpenMP 相比最显著的区别是缺少 parallel 子句来指定并行区域的开始和结束。在 OpenMP 中需要这个子句,因为它使用 fork-join 执行模型,用户必须指定何时开始和结束并行性。OmpSs 使用 StarSs 实现的模型,在应用程序启动时隐式创建并行性。这更像是一种演变而不是通常意义上的扩展。 - Hristo Iliev
OpenMP 4.0 不是我的部门,但可能可以使用数组部分代替,例如:depend(in: var1[:1]) depend(out: var2[:1]) - Hristo Iliev
1
@Massimiliano,我猜他们的意思是他们扩展了_OpenMP模型_而不是_OpenMP规范_。或者他们只是对“扩展”的含义有一个非常任意的解释 :) - Hristo Iliev
@HristoIliev 好的,没问题 :) - Massimiliano
显示剩余2条评论
1个回答

3
根据Hristo Iliev评论中的说法,正确的解决方法是将指针视为大小为1的数组:
#pragma omp task depend(in: var1[:1]) depend(out: var2[:1])

depend指示符允许使用 arr[lower bound : length] 数组语法,如果省略,则将 lower bound 设置为0,将 length 设置为数组大小(指针类型不允许这样做)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接