使用OpenMP编程模型的动态/嵌套并行GPU

时间:2015-08-06 08:27:12

标签: openmp gpgpu openacc

我的问题与OpenMP的声明目标结构和GPU的动态/嵌套并行性功能有关。 OpenACC 2.0以两种方式支持动态并行; 例程指令并以嵌套方式使用并行/内核指令。但是在OpenMP中禁止使用嵌套设备指令,例如目标,团队或分发。但是声明目标指令在我看来与OpenACC的例程指令类似。

然而,语义及其用法尚不清楚。我的示例代码是这样的。

#pragma omp declare target
void foo(){

  //work-1

#pragma omp target teams distribute parallel for 
for(...)
{
    if(...){
       foo();
    {
      //work-2
    }
}

//work-3
}
#pragma omp end declare target

int main(){
//work 

foo();

}

在该示例中,我期望函数foo将被映射为设备函数。但由于它内部有目标构造,编译器将以某种方式转换此代码。我的问题是,当线程在目标构造中遇到foo函数调用时会发生什么?

1 个答案:

答案 0 :(得分:0)

目前,OpenMP不支持目标区域的嵌套。所以你的代码很可能无法编译。或者,当遇到嵌套目标构造时,它可能在运行时崩溃。或产生意外结果。基本上,不符合程序的结果是未指定的。