NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

麻省理工学院扩展 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:001877

评论

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

员工离职率高如何解决?

优秀

企业管理 员工离职

清华年薪百万大佬,带你深入JVM实战调优,看完还敢说你懂JVM

小二,上酒上酒

Java 马士兵

javascript 高级编程 之 Array 用法总结

hellocoder2029

JavaScript

太厉害了!GitHub上标星80K的微服务实战笔记,看完跪了

小二,上酒上酒

Java 微服务

华为云虚拟专用网络VPN,助力现代企业云上业务创新发展

科技怪授

网络 网络VPN

聊一聊作为高并发系统基石之一的缓存

Java全栈架构师

Java 缓存 后端 高并发 架构师

企业为什么需要UI快速开发框架

力软低代码开发平台

JavaScript刷LeetCode模板技巧篇(二)

Geek_07a724

JavaScript LeetCode

华为云虚拟专用网络VPN,专为解决现代企业云链路痛点而生

科技怪授

网络 网络VPN

太厉害了!阿里年薪120W架构师整理的学习笔记,看完收获良多

小二,上酒上酒

Java 架构 微服务 高并发

华为云CDN,是怎样满足各行业全场景加速需求

IT科技苏辞

华为云CDN,如何赋能企业数字化发展?

IT科技苏辞

华为云弹性公网IP,如何解决现代企业的网络IP烦恼

科技怪授

弹性公网IP

JavaScript刷LeetCode-字符串类解题技巧

Geek_07a724

JavaScript LeetCode

京东T8架构师墙裂推荐:史上最全高性能MySQL实战(赶紧收藏)

小二,上酒上酒

【文本检测与识别白皮书-3.2】第一节: 基于分割的场景文本识别方法

合合技术团队

人工智能 文字识别 文字检测 智能识别

将 NGINX 部署为 API 网关,第 3 部分:发布 gRPC 服务

NGINX开源社区

nginx api 网关 gprc

【融云出海白皮书免费看】出海洞察之沙特的「土豪行为」盘点

融云 RongCloud

白皮书 出海

这几款音乐人必备的软件,你了解吗?

懒得勤快

京东T8连夜肝出的《JVM性能优化知识点》吊打所有提问的面试官

小二,上酒上酒

性能优化 JVM Java虚拟机

重塑感知,荣耀金洋,银行APP用户体验外滩峰会相聚上海

易观分析

银行 峰会 上海

js通过经纬度来计算两地之间的距离

源字节1号

微信小程序 软件开发 前端开发 后端开发

阿里技术专家压箱底好货:Redis深度历险笔记

小小怪下士

Java redis 程序员

华为云CDN,用技术实力助力企业创新,促进产业化转型

IT科技苏辞

华为云虚拟专用网络VPN,为现代企业打造优质的混合云计算环境

科技怪授

网络VPN

javascript尾递归优化

hellocoder2029

JavaScript

来了!Spring Boot从入门到入土的私藏教程,不收藏你就亏了

小二,上酒上酒

spring springboot

特征平台在数禾的建设与应用

阿里云大数据AI技术

sql 大数据 flink 企业号十月 PK 榜

腾讯T4耗时36天整理出了:多线程+JVM+设计模式+Redis+MySQL

小二,上酒上酒

MySQL redis JVM 多线程

阿里架构师耗时三个月整理的 Spring实战笔记:入门到实战

小二,上酒上酒

spring

华为云CDN,海量资源智能路由,让内容传输更快一步

IT科技苏辞

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