OpenMP依赖列表中的指针和数组

时间:2017-04-26 12:48:10

标签: openmp

我有类似head.h的内容:

struct mystruct {  
  double * a;                 
  double * t_a;          
}
typedef struct mystruct pm_t;

和我的OpenMP task代码mycode.c

int foo(pm_t* t_lb){

#pragma omp task default(none) shared(t_lb, BLOCK) private(i)   \
  firstprivate(baseIndex) depend (in: t_lb->a, t_lb->t_a)
    {
               ...  

使用Intel 17编译我得到:

error: invalid entity for this variable list in omp clause
    firstprivate(baseIndex) depend (in: t_lb->a,t_lb->t_a)
                                          ^

我知道OpenMP不处理依赖语法中的指针,但我也尝试过使用

firstprivate(baseIndex) depend (in: t_lb->a[:1], t_lb->t_a)

没有成功。有人看到这个有问题吗?

1 个答案:

答案 0 :(得分:1)

显然,根据OpenMP规范,这应该是一个错误:

  

属于另一个变量的变量(例如。的元素)   结构)但不是数组元素或数组部分不能   出现在depend子句中。“(版本4.5,第171页,第18行)。

但是,计划在5.0版本中删除此限制,并且Cray编译器已在内部完成此操作。所以这将失败GCC和英特尔,但将与Cray编译器一起使用。