写点什么

麻省理工学院扩展 LLVM IR 使并行程序可得到更好的优化

  • 2017-02-19
  • 本文字数:1320 字

    阅读完需:约 4 分钟

麻省理工学院的研究人员过去一直致力于 LLVM 的 fork 的研究,以探索优化并行代码的新方式,该方式通过将 fork-join parallelism 直接嵌入编译器的中间表示(IR)中进行优化。这些研究人员认为,这使针对并行程序最大程度地利用IR 层进行串行优化成为可能。

Fork-join parallelism 是一种组织并行程序的方式,它特别适合于分而治之的算法,比如归并排序。 通过一组语言扩展,例如由 OpenMP (比如#pragma omp parallel 和#pragma omp parallel 等等)和 Cilk Plus (比如 cilk_spawn 和 cilk_sync)提供的扩展,GCC 和 LLVM 之类的主流编译器内均可支持 fork-join parallelism。这些编译器前端处理这些语言扩展到“较低层”并行结构到更原始的表示,然后转化成 IR。例如,以下代码片段使用 Cilk cilk_for 扩展使之可以并行运行该循环的每次迭代:

__attribute__((const)) double norm(const double *A, int n); void normalize(double *restrict out, const double *restrict in, int n) { cilk_for (int i = 0; i 这种方式的其中一个缺点是,虽然编译器中端再也看不到循环了,但运行期调用是不透明的,它提取自己函数内的代码块传入库函数,该库函数处理大量生成的循环迭代并随后同步。这实际上妨碍了中端针对循环在IR 层进行的各类优化,比如循环不变式代码调整、调度等。

Schardl、Moses 和 Leierson 的工作是通过一个扩展的 IR 直接将 fork-join 模型放入中端,这使之前需要由并行处理添加额外代码的代码可以应用所有各类优化策略了。这种方式本身并不新颖,几个特殊的 IR 已经特别设计以表示程序内的并行了,然而:

……在主流编译器中使用单独的 IR 一直以来都受非议,因为策划、开发和维护这个额外的 IR 到像编译器已有的串行 IR 同样的标准需要付出相当大的工作量。

关键是麻省理工学院的三位研究人员已经找到了扩展 LLVM 的 IR 的方法,即通过保留它们的串行语言去表示逻辑任务并行。他们新的 IR 被称为 Tapir,代表并行任务不对称,这表示并行任务必须在执行流程能被同步之前率先完成,从而使 LLVM 之类的串行中端可以去高效地优化并行代码,这些研究人员们说。

Tapir 通过增加三个新命令扩展 LLVM 的 IR:detach、reattach 和 sync。虽然 detach 大致相当于像 fork 一样的抽象,但是 reattach 和 sync 所代表的与 join 稍有不同。由于目的在于实现可串行化这一需求,所以并行计算必须确保分离锁在分支续延之前执行完成。因此,虽然 detach 和 reattach 表示一个并行任务的开发和结束,但是同步任务的同步是在其并行上下文内发生的。

为了评估他们这些新方法的好处,麻省理工学院的研究员们比较了 Cilk-enabled LLVM 编译器和 Tapir-enabled 的 LLVM 编译器,用它们同时去编译一组 20 个 Cilk 程序的套件。

在这 20 个程度中的 17 个,使用新 IR 的编译器产出了更高效的软件,其中三分之一提升了 10% 到 25%。而新编译器所产出的更低效率的软件,其下降幅度也仅低于 2%。

在 GitHub 上可以获得 Tapir ,可运行以下命令进行构建:

复制代码
git clone --recursive https://github.com/wsmoses/Tapir-Meta.git
cd Tapir-Meta/
./build.sh
source ./setup-env.sh

查看英文原文 MIT Extended LLVM IR to Enable Better Optimization of Parallel Programs

2017-02-19 18:002104

评论

发布
暂无评论
发现更多内容

企业内部IM即时聊天软件WorkPlus,自主可控的信创即时通讯IM

WorkPlus

告别手绘,15款网络拓扑图软件全攻略

职场工具箱

【玩转 EdgeOne】进阶玩法

梦笔生花

Golang微服务框架Kratos轻松集成并使用Swagger UI

swagger protobuf OpenAPI Kratos #微服务

网络拓扑图一本通:手把手教你怎么画

职场工具箱

ios ipa包上传需要什么工具

雪奈椰子

迪斯克质押众筹挖矿系统程序开发/技术/Python语言

V\TG【ch3nguang】

手把手带你打一场时间序列比赛—优化

打工人!

机器学习 模型融合

Linux mkdir命令:创建目录(文件夹)

梦笔生花

总结Nginx的安装、配置与设置开机自启?

百度搜索:蓝易云

nginx 云计算 Linux 运维 Web

产品经理必备!9个提升效率的工具盘点,你都用过哪些?

彭宏豪95

产品经理 科技 在线白板 办公软件 在线协作

Python 中多态性的示例和类的继承多态性

小万哥

Python 程序员 软件 后端 开发

Nautilus Chain 联合香港数码港举办 BIG DEMO DAY活动,释放何信号?

石头财经

Nautilus Chain 联合香港数码港举办 BIG DEMO DAY活动,释放何信号?

BlockChain先知

MobPush数智化推送,精准定位万圣节狂欢年轻一族

MobTech袤博科技

智能合约ARB链上质押挖矿系统DAPP开发

V\TG【ch3nguang】

Swagger API 未授权访问漏洞问题解决方法

Liam

Java 程序员 API swagger Swagger API

MobPush厂商通道回执配置指南(Vivo,荣耀)

MobTech袤博科技

第15期 | GPTSecurity周报

云起无垠

HBuilder开发者必备!Windows上传IPA文件的软件分享

雪奈椰子

PAXGOLD(PAXG)子母双币质押挖矿系统开发(技术分析)

V\TG【ch3nguang】

用docker搭建selenium grid分布式环境实践

百度搜索:蓝易云

Docker 云计算 Linux 运维 selenium

Nautilus Chain联合香港数码港举办BIG DEMO DAY活动,释放何信号?

小哈区块

权威认可!应急专家吴志强少将高度认可卓翼系留无人机高层灭火解决方案

硬科技星球

企业im即时通讯软件私有化部署,确保信息安全与高效办公

WorkPlus

Wealth威尔士质押挖矿系统技术开发(详情分析)

V\TG【ch3nguang】

LP单双币质押挖矿代币奖励模式系统开发源码详情

V\TG【ch3nguang】

私有化部署企业IM即时通讯app,群聊多样化管控

WorkPlus

退运险业务及系统架构演进史

ZA技术社区

众安科技 众安保险 ZA技术社区

释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握

汀丶人工智能

人工智能 自然语言处理 向量检索 语义搜索 语义搜索系统

Nautilus Chain联合香港数码港举办BIG DEMO DAY活动,释放何信号?

西柚子

麻省理工学院扩展LLVM IR使并行程序可得到更好的优化_语言 & 开发_Sergio De Simone_InfoQ精选文章