原子最小化操作的高性能实现

时间:2013-07-30 05:08:53

标签: parallel-processing openmp intel intel-mic intel-parallel-studio

OpenMP中没有原子最小操作,英特尔MIC的指令集也没有内在操作。

#pragmma omp critial表现非常不足。

我想知道英特尔MIC是否有atomic minimal的高性能工具。

1 个答案:

答案 0 :(得分:3)

根据OpenMP 4.0 Specifications(第2.12.6节),许多快速原子最小化操作,您可以使用#pragma omp atomic构造代替{ {1}}(从而避免锁定的巨大开销)。


使用#pragma omp critical构造

的可能性概述

#pragma omp atomic成为你的线程共享变量:

  • 使用x,您可以原子地让您的共享变量#pragma omp atomic read被读取:

    x
  • 使用v = x; ,您可以自动为共享变量#pragma omp atomic write分配新值;新值表达式(x)必须为expr - 独立:

    x
  • 使用x = expr; ,您可以自动更新共享变量#pragma omp atomic update;实际上,您只能在x - 独立表达式和binop之间将新值指定为二进制操作(x):

    x
  • 使用x++; x--; ++x; --x; x binop= expr; x = x binop expr; x = expr binop x; ,您可以原子地让您的共享变量#pragma omp atomic capture被读取和更新(按您想要的顺序);实际上xcaptureread构造的组合:

    • 您有update的简短表格,然后是update

      read
    • 他们的结构化块类似物:

      v = ++x;
      v = --x;
      v = x binop= expr;
      v = x = x binop expr;
      v = x = expr binop x;
      
    • 您有{--x; v = x;} {x--; v = x;} {++x; v = x;} {x++; v = x;} {x binop= expr; v = x;} {x = x binop expr; v = x;} {x = expr binop x; v = x;} 然后read的一些简短形式:

      update
    • 他们的结构化块类似物:

      v = x++;
      v = x--;
      
    • 最后,您还有{v = x; x++;} {v = x; ++x;} {v = x; x--;} {v = x; --x;} ,然后是read,它只存在于结构化块表单中:

      update

在前面的表达式中:

  • {v = x; x binop= expr;} {v = x; x = x binop expr;} {v = x; x = expr binop x;} {v = x; x = expr;} x都是标量类型的l-value expressions;
  • v是一个标量类型的表达式;
  • exprbinop+*-/&,{{1}之一}},^|;
  • <<>>binopbinop=不是重载运算符。