写点什么

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

评论

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

户外全彩LED广告屏安装的注意要点

Dylan

LED LED display LED显示屏 户外LED显示屏 LED屏幕

PowerVerse:利用Web3激励机制实现算力去中心化

PowerVerse

NFT web3 去中心化云算力

白鲸开源WhaleStudio与崖山数据库管理系统YashanDB完成产品兼容互认证

白鲸开源

数据库 认证 崖山数据库 白鲸开源 WhaleStudio

政企产品经理AI工作流分享:需求->产品的敏捷实现(深度长文)

Ben的AI实验室

AI 产品经理 工作流 GPT DeepSeek

OpenManus:开源版 Manus,无需邀请码,5 分钟极速体验!

阿里巴巴云原生

阿里云 云原生

Sentieon软件发布V2020503版本

INSVAST

版本更新 基因检测 Sentieon 变异检测 生物信息分析服务

Amazon Q 从入门到精通 – 集成企业代码库

亚马逊云科技 (Amazon Web Services)

AI智上 | 智能会计:某大型商业地产管理公司领先实践

用友智能财务

NocoBase 本周更新汇总:联动规则条件左侧支持变量

NocoBase

开源 低代码 零代码 无代码 版本更新

十几行代码实现 Manus,Spring AI Alibaba Graph 快速预览

阿里巴巴云原生

阿里云 云原生

蚂蚁数科开源虚拟机DTVM 开启区块链AI开发时代

科技热闻

KubeEdge边缘设备管理系列(六):Mapper-Framework开发示例

华为云原生团队

云计算 容器 云原生

Full GC 频率优化实战

vivo互联网技术

Java 后端 垃圾回收 系统优化

立马耀:通过阿里云 Serverless Spark 和 Milvus 构建高效向量检索系统,驱动个性化推荐业务

阿里云大数据AI技术

大数据 spark 阿里云 Serverless EMR

大模型向量数据库去重的N种实现方案!

王磊

12种API认证全场景解析:从Basic到OAuth2.0,哪个认证最适合你的业务?

数据追梦人

HCLSoftware推出解决方案

财见

观测云产品更新 | 用户访问、基础设施、监控和事件等

观测云

产品迭代

CST表面等离子极化激元SPP --- 光脊波导与缝隙波导的转换

思茂信息

cst CST软件 CST Studio Suite

金仓数据库同城双中心灾备方案

金仓技术

KingBase 金仓数据库

浅谈国产数据库多租户方案:提升云计算与SaaS的资源管理效率

猫头虎

数据库

什么是安全密钥,它是如何工作的

运维有小邓

单点登录 多因素身份验证 安全密钥

月薪3K测试 vs 30K测开:差距在这3个技能​

测试人

软件测试

得物业务参数配置中心架构综述

得物技术

业务架构 构架

《Operating System Concepts》阅读笔记:p777-p777

codists

操作系统

AI与智能能源管理:如何通过AI优化能源分配和消耗?

天津汇柏科技有限公司

人工智能 AI

Apipost免费版、企业版和私有化部署详解

数据追梦人

征程 6 VIO Frame buffer管理

地平线开发者

自动驾驶; 算法工具链 地平线征程6

MES系统数据采集功能:自动化设备数据采集

万界星空科技

数据采集 mes 设备 设备管理 设备数据采集

新闻速递丨Altair 与 Databricks 达成合作,加速数据驱动型创新

Altair RapidMiner

人工智能 机器学习 数据分析 RapidMiner 数据准备

CSSBuy 淘宝代购系统搭建攻略

tbapi

淘宝代购系统 反向海淘系统

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