写点什么

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

评论

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

Dockerfile创建镜像异常问题解决

百度搜索:蓝易云

亚马逊Amazon商品详情API接口(主图|SKU|标题|价格|库存)

tbapi

亚马逊 亚马逊商品详情接口 亚马逊API接口 亚马孙商品数据采集

好的测试用例应该具备哪些特质

老张

软件测试 质量保障 测试用例 研发管理工具

电子阅读软件中文版MarginNote 3 for Mac

Mac相关知识分享

数据分析统计软件Minitab Express for Mac激活版

Mac相关知识分享

数据分析 Mac软件

得物Flink内核探索实践

得物技术

flink 技术分享 企业号2024年8月PK榜

强大全景图拼接制作工具PTGui Pro for Mac

Mac相关知识分享

Mac软件 图像制作

云服务应用就在828,精准优化企业管理,华为云Flexus X实例有你好看!

YG科技

云计算优化震撼828,华为云Flexus X实例邀请您分享数字化转型红利

YG科技

基于51单片机设计的计算器

DS小龙哥

8月月更

京东秒送LBS场景下的容灾数据备份方案

京东零售技术

架构 数据 LBS 企业号2024年8月PK榜

谷歌访问助手插件 for Mac中文版

Mac相关知识分享

谷歌插件

解决Apache Tomcat “Request header is too large“ 异常

百度搜索:蓝易云

科大讯飞学习机P30和C10 Pro 区别对比评测

妙龙

科大讯飞 学习机

LLM活动 | 与UP主“老陈打码”一起使用PAI×LLaMA Factory搭建AI诸葛亮

阿里云大数据AI技术

人工智能 阿里云 AIGC LLM PAI

京东集团项目管理人才发展通道代表受邀参加第三届中国PMO&PM大会

京东零售技术

企业号2024年8月PK榜

大促高并发系统性能优化实战--京东联盟广告推荐系统

京东零售技术

算法 数据 企业号2024年8月PK榜

陶建辉在第 41 届中国数据库学术会议上深度解析时序数据库

TDengine

LED显示屏批发需要注意的关键事项

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家 市场 采购

强大 SSH 工具Termius mac 版

Mac相关知识分享

讯兔科技携手豆包大模型,勇闯AI投研“深水区”

新消费日报

如何在云服务器上部署网站

百度搜索:蓝易云

合约量化系统开发详细流程丨量化合约系统开发源码实例说明分析

V\TG【ch3nguang】

量化合约系统开发

使用PAI × LLaMA Factory 微调 Llama3 模型

阿里云大数据AI技术

人工智能 模型训练 LLM PAI

高性能无锁队列 Disruptor 核心原理分析及其在i主题业务中的应用

vivo互联网技术

Disruptor 无锁 伪共享 内存队列 CPU Cache

超越传统:观测云的监控功能与 AI 集成

可观测技术

人工智能

没有它,你的Scrum无法实现!

敏捷开发

Scrum 敏捷开发

Java Agent 开发初探

FunTester

互联网快速发展电商APP云服务器使用与服务

百度搜索:蓝易云

执行可执行程序时遇到error while loading shared libraries错误解决

百度搜索:蓝易云

零信任SDP更新 卓越性能全新体验

芯盾时代

iam 统一身份认证 零信任 sdp

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