我有类似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)
没有成功。有人看到这个有问题吗?
答案 0 :(得分:1)
显然,根据OpenMP规范,这应该是一个错误:
属于另一个变量的变量(例如。的元素) 结构)但不是数组元素或数组部分不能 出现在depend子句中。“(版本4.5,第171页,第18行)。
但是,计划在5.0版本中删除此限制,并且Cray编译器已在内部完成此操作。所以这将失败GCC和英特尔,但将与Cray编译器一起使用。