Parallel processing 原子最小运算的高性能实现

Parallel processing 原子最小运算的高性能实现,parallel-processing,openmp,intel,intel-mic,intel-parallel-studio,Parallel Processing,Openmp,Intel,Intel Mic,Intel Parallel Studio,OpenMP中没有原子最小操作,Intel MIC的指令集中也没有固有的操作 #pragmma omp critial在性能上非常不足 我想知道英特尔麦克风是否有高性能的原子最小值实现。根据(第2.12.6节),使用#pragma omp atomic构造代替#pragma omp critical可以执行许多快速原子最小值操作(从而避免锁的巨大开销) 使用#pragma omp-atomic构造的可能性概述 将x作为线程共享变量: 使用#pragma omp atomic read可以自动

OpenMP中没有原子最小操作,Intel MIC的指令集中也没有固有的操作

#pragmma omp critial
在性能上非常不足

我想知道英特尔麦克风是否有高性能的
原子最小值实现。

根据(第2.12.6节),使用
#pragma omp atomic
构造代替
#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
    ;事实上,只能在
    x
    -独立表达式和
    x
    之间分配一个新值作为二进制运算(
    binop
    ):

    x++;
    x--;
    ++x;
    --x;
    x binop= expr;
    x = x binop expr;
    x = expr binop x;
    
  • 使用
    #pragma omp atomic capture
    可以自动读取和更新共享变量
    x
    (按照您想要的顺序);事实上
    capture
    读取
    更新
    构造的组合:

    • 您有
      更新
      阅读
      的简短表格:

      v = ++x;
      v = --x;
      v = x binop= expr;
      v = x = x binop expr;
      v = x = expr binop x;
      
    • 以及它们的结构化块类似物:

    • 您有一些简短的表单,用于
      阅读
      ,然后
      更新

      v = x++;
      v = x--;
      
    • 以及他们的结构化块类似物:

    • 最后,您还有额外的
      读取
      ,然后是
      更新
      ,它只存在于结构化块形式中:

在前面的表述中:

  • x
    v
    均为标量型
  • expr
    是标量类型的表达式
  • binop
    +
    *
    -
    /
    &
    ^
    中的一种
  • binop
    binop=
    ++
    --
    不是重载运算符
根据(第2.12.6节),通过使用
#pragma omp atomic
构造代替
#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
    ;事实上,只能在
    x
    -独立表达式和
    x
    之间分配一个新值作为二进制运算(
    binop
    ):

    x++;
    x--;
    ++x;
    --x;
    x binop= expr;
    x = x binop expr;
    x = expr binop x;
    
  • 使用
    #pragma omp atomic capture
    可以自动读取和更新共享变量
    x
    (按照您想要的顺序);事实上
    capture
    读取
    更新
    构造的组合:

    • 您有
      更新
      阅读
      的简短表格:

      v = ++x;
      v = --x;
      v = x binop= expr;
      v = x = x binop expr;
      v = x = expr binop x;
      
    • 以及它们的结构化块类似物:

    • 您有一些简短的表单,用于
      阅读
      ,然后
      更新

      v = x++;
      v = x--;
      
    • 以及他们的结构化块类似物:

    • 最后,您还有额外的
      读取
      ,然后是
      更新
      ,它只存在于结构化块形式中:

在前面的表述中:

  • x
    v
    均为标量型
  • expr
    是标量类型的表达式
  • binop
    +
    *
    -
    /
    &
    ^
    中的一种
  • binop
    binop=
    ++
    --
    不是重载运算符

难道你不知道
#pragma omp atomic
#pragma omp atomic
只适用于
++
--
op=
等,通常可以编译成单处理器操作码,如递增、递减、异或。@Kyle u黑客你在中寻找整数的最小值,或浮点类型之一吗C或Fortran?难道你不知道
#pragma omp atomic
#pragma omp atomic
只适用于
++
--
op=
等,它们通常可以编译成单处理器操作码,如递增、递减、异或。@Kyle\u你在寻找整数的最小值,或浮点值之一pes?用C还是Fortran?