原子指令openmp带循环

时间:2017-04-16 09:39:31

标签: openmp atomic directive

是否可以将单指令用于原始指令

例如:

#pragma omp atomic
for (i=0;i<5;i++)
A[i]++;

1 个答案:

答案 0 :(得分:1)

,这是不可能的。

从技术上讲,omp atomic结构适用于对特定存储位置的访问。以下语句是read(对于C / C ++)的有效表达式,符合标准2.13.6:

  • 如果 atomic-clause v = x;

    write
  • 如果 atomic-clause x = expr;

    update
  • 如果 atomic-clause x++; (and -- as well as prefix forms) x binop= expr; x = x binop expr; x = expr binop x; 或不存在:

    capture
  • 如果 atomic-clause v = x++; (and -- as well as prefix forms) v = x binop= expr; v = x = x binop= expr; v = x = expr binop= x;

    {v = x; x++;}
    {x++; v = x;}
    

    在这种情况下,允许使用一些特定的结构化块:

    v = x

    更新表单的所有组合都与x

  • 相关联

标准进一步明确将voperator=限制为标量类型,因此即使您要实现A,也不允许使用矢量/数组类型。

如果要使此更新以原子方式显示,则必须保护整个更新以及对具有关键区域,锁定的checkout.js的所有访问,或确保不执行任何并发访问和内存可见性保证。如果没有更具体的代码,我无法提供更具体的建议。