正确使用openMP目标构造

时间:2014-06-23 20:01:11

标签: multithreading openmp

我试图弄清楚我是否正确使用了Openmp 4构造。

如果有人能给我一些提示,那就好了。

class XY {
 #pragma omp declare target
  static void function_XY(){
    #pragma omp for
      loop{}
 #pragma omp end declare target


main() {
  var declaration
  some sequential stuff

  #pragma omp target map(some variables) {
  #pragma omp parallel {

  #pragma omp for
     loop1{}

  function_XY();

  #pragma omp for
     loop2{}

  }
  }

  some more sequential stuff
}

我的整体代码正在运行,并且随着更多线程变得更快,但我想知道代码是否在目标设备上正确执行(xeon phi)。 此外,如果我删除所有omp东西并按顺序执行我的程序,它运行速度比执行多个线程(任何数字)。也许是因为omp的初始化?

我想要的是在目标设备上并行执行:loop1,function_XY,loop2。

1 个答案:

答案 0 :(得分:0)

"我想知道代码是否在目标设备上正确执行(xeon phi)"

好吧,如果您使用-mmic标志正确编译代码,那么它将生成仅在麦克风上运行的二进制文件。

要在麦克风上运行代码(在纯模式下),将可执行文件复制到麦克风(通过scp),复制所需的库,SSH到麦克风,然后执行它。

请勿忘记导出LD_LIBRARY_PATH以指示麦克风上库的路径。

现在,假设您确实在协处理器上运行代码,在禁用线程时提高了性能,表明代码中某处存在瓶颈。但这需要更多信息来分析。