是否可以将单指令用于原始指令
例如:
#pragma omp atomic
for (i=0;i<5;i++)
A[i]++;
答案 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
标准进一步明确将v
和operator=
限制为标量类型,因此即使您要实现A
,也不允许使用矢量/数组类型。
如果要使此更新以原子方式显示,则必须保护整个更新以及对具有关键区域,锁定的checkout.js
的所有访问,或确保不执行任何并发访问和内存可见性保证。如果没有更具体的代码,我无法提供更具体的建议。