Parallel processing 原子最小运算的高性能实现
OpenMP中没有原子最小操作,Intel MIC的指令集中也没有固有的操作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可以自动
#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?