OpenMP优化调研系列文章(4)

LLVM对OpenMP实现的优化[1]

  1. Parallel region merged with parallel region at . [OMP150]
    这个优化让一个并行区域与其他区域合并成了一个单一的并行区域,以减少fork-join开销。

void foo() {
#pragma omp parallel
parallel_work();

sequential_work();

#pragma omp parallel
parallel_work();
}
$ clang++ -fopenmp -O2 -Rpass=openmp-opt -mllvm -openmp-opt-enable-merging omp150.cpp
omp150.cpp:2:1: remark: Parallel region merged with parallel region at merge.cpp:7:1. [OMP150]
#pragma omp parallel
^
2. Removing parallel region with no side-effects. [OMP160]
这个优化是删除没有任何副作用的并行区域。判断依据是如果并行区域内的代码没有将任何结果写入并行区域外代码可见的内存。这种优化是必要的,因为并行区域和串行区域之间的barrier通常会阻止死代码的消除来完全移除并行区域,仍会有fork-join的开销。

void foo() {
#pragma omp parallel
{ }
#pragma omp parallel
{ int x = 1; }
}
$ clang++ -fopenmp -O2 -Rpass=openmp-opt omp160.cpp
omp160.cpp:4:1: remark: Removing parallel region with no side-effects. [OMP160] [-Rpass=openmp-opt]
#pragma omp parallel
^
delete.cpp:2:1: remark: Removing parallel region with no side-effects. [OMP160] [-Rpass=openmp-opt]
#pragma omp parallel
^
^
Optimizing Barrier Synchronization on ARMv8 Many-Core Architectures[2]
一个barrier同步通常包括了三

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值