多面体模型-学习笔记2

1)

多面体模型被应用于解决程序变换问题,并有效地推动了程
序自动并行化等技术的发展。与传统的解决程序变换的方法相比,多面体模型
具有许多优势[5]。多面体模型提供了一种强大的抽象,将每个语句的动态语句执
行实例视作一个多面体中的一个整数坐标点,来推测需要执行的程序变换。利
用这样的语句表示和准确的语句间依赖关系,可以依赖于线性代数和线性规划
的数学语言来推断程序变换是否满足正确性。这种变换体现在代码生成中对语
句执行实例之间的顺序重排,可以提升程序的数据局部性或程序并行性。

2)

在源到源编译过程中,多面体模型是实现循环变换的一种高效的数学抽象
模型,其中包括循环分块、循环合并等多种程序变换优化手段,用于优化程序
性能、实现自动并行化和代码生成。对于许多计算密集型应用程序中,嵌套循
环占用了大部分的运行时间。

多面体模型是一种针对循环嵌套的优化模型,实现程序并行性和局部性优

3)

。1967 年,Karp 等人首先提出了多面体模型[7]。为了应用调度变换,Feautrier[8,9]
主要针对程序循环结构中的迭代依赖关系进行分析,确定计算实例之间的依赖
关系。Lim 等人[10,11]提出了基于划分平面的调度算法。以最大限度地提高程序的
并行度和最小化同步度为目的,找到最佳仿射调度。

4)

Bondhugula 等人[12]设计了
Pluto 模型,它以最小通信数据量为目的,基于代价模型对多面体划分平面,进
行调度变换。Pluto 算法实现了通信数据量最小化。Acharya[13,14]等人在Pluto 算
法基础上实现了Pluto+算法,解决了Pluto 算法无法计算带有负数的划分平面,

5)

https://github.com/Meinersbur/isl

Verdoolaege S. Isl: an integer set library for the polyhedral model[C]. In Proceedings of the Third international congress Conference on Mathematical software (ICMS'10).
Springer-Verlag, Berlin, Heidelberg, 2010.299–302.

ISL库,

目前,在多面体编译领域,Pluto 及相关算法被广泛应用。Sven
等人在ISL 库[15]中实现了Pluto 算法的一个变种,该算法广泛应用于多种传统编
译框架[16,17]和DSL 编译器中[18,19]。除ISL 之外,Polylib[20]、Omega[21]、PPL[22]
以及PIP[23]等也是线性整数规划工具,这些工具的共同点是,它们都是基于数学
建模的方法,通过将程序分析为多面体表示,并使用线性整数规划技术进行求
解。

Polly[24,25]是由Tobias 等人开发的多面体优化框架。它可以根据输入的多面
体程序和优化目标自动生成优化代码,并与现有的编译器集成,从而提高程序
性能。

,Bastoul[29]实现了一个名为CLooG 的代码生成工具,该工具被多个多面体编
译工具如PPCG 作为其代码生成阶段的算法。Grosser[30]等人提出了一种基于多
面体的AST 生成的方法,无需编写专门的代码生成器,实现了对特定区域的AST
生成,优化了PPCG 的代码生成模块。

并行性和局部性问题,循环分块技术也到广泛的应用

不同的分块
大小与形状也对程序性能有着重要的影响。Pluto 算法使用形状为平行四边形进
行分块。多面体模型中的钻石分块[35]是一种常见的优化方法,将多维循环迭代
空间划分为一个网格,每个点都是多面体的顶点,形成一个钻石形状。这种划
分技术可以帮助程序员将循环结构转换为基于块的迭代,从而可以更好地利用
现代处理器的并行计算能力和缓存层次结构。Tobias[36]提出了混合六角形分块,
将沿时间维度和一个空间维度的六边形分块形状用于与其他维度的经典分块相
结合,有利于全局内存合并访问和利用不同内存层次中的数据重用。李颖颖[37]
提出了一种基于平行四边形的分裂分块算法,解决了传统分裂分块算法依赖非
仿射表达式的问题。另外,赵捷[38]基于多面体编译实现了一种重叠分块,将其
重新转换为可与任何仿射调度算法组合的计划树上的仿射变换。

多面体编译优化技术

在编译领域,多面体模型被成功地应用于解决程序变换问题,并有效的推
动了程序自动并行化等技术的发展。基于多面体模型的编译优化技术是编译器
优化的一个重要研究方向。目前,已经出现了多种自动变换的代码生成工具,
如C-to-CUDA[2]、CUDA-Chill[3]和PPCG[4]等。这些工具面向GPU 平台生成CUDA
并行代码,以最大限度利用GPU 的计算和内存带宽。

多面体计算调度策略方面,Khaled[39]提出了一种新技术来计算仿射程序的
资源分块大小。以交叉编译器的方式使用整数线性规划ILP 约束和目标,以有
效地模拟基于多面体的GPU 编译器PPCG 中的应用转换。Jun[40]提出了一种新的
GPU 并行性编译器优化算法。基于多面体模型,通过叠加的思想将多面体调度
扩展到实现两级并行化,它集成了线程块级和线程级的单独并行调度。与最先
进的多面体并行代码生成器(PPCG)相比,得到了很大的性能提升。Metha[41]
提出了一种在多面体框架中实现的循环合并算法,基于两个目标函数来选择循
环合并区域,分别是实现良好的数据重用和保持源代码中固有的并行性,在大
型基准程序SPEC 中得到好的性能。Acharya[42]在Pluto-lp-dfp 中提出了一种称为
合并冲突图(FCG)的数据结构,能够在其他仿射循环变换存在的情况下有效地
对循环融合进行建模,提出不同的循环合并策略,找到性能最高的调度变换。
胡伟方等人[43,44]在LLVM 的Polly 模块中提出了一种数据重用分析的循环合并策
略,实现了面向不同并行层次的并行性合并限制,以找到循环语句最优合并方
案。

针对传统多面体模型难以表示多层级并行性与内存分配的问题,在面向
GPU 的调度映射方面,Patwardhan 等人[45]基于多面体编译框架PPCG,提出了
使用纹理内存、表面内存等多层次存储结构,并修改对应的抽象语法生成树。
Alexander[46]等人提出了一种数据自动分区方法将GPU 代码编译为多内核应用的
概念。Abhishek[47]使用多面体模型对特定种类的GPU 缓存进行盈利能力建模,
自动利用GPU 缓存/内存层次结构。

同时,循环分块大小的选择影响程序的性能。Juega[48]提出了一种代码映射的技术,依赖于内存资源的估计来探索映射空间,并为每个线程块的线程数和分块大小计算适当的值。Albert 提出了DynTile 算法[49],用于将未分块的包含仿射不完美嵌套循环的C 代码转换为参数化分块代码,用于在多核处理器上并行执行的系统。Nirmal[50]为模板计算开发了一个模型用于预测生成的代码的执行时

间,目标是建模和参数选择产生高度调优的代码并预测分块大小。Jangda 和Bondhugula[51]提出了一种动态规划算法来有效地搜索分块和合并变换空间。利用线性/仿射约束将调度系数之间的关系建模为指数。Jangda 和Guha[52]引入了一种图像处理管道执行技术,该技术可以生成符合线程束的重叠瓦片,以减少同步开销。

多面体编译技术在深度学习编译器方面也有广泛的研究。TVM[53]是一个开
源的深度学习编译器,它基于多面体模型进行循环嵌套优化和并行化。MLIR[54]
是一个基于多面体模型的中间表示语言,它可以用于优化和转换深度学习模型。
PolyMage[55]是一个基于多面体模型的图像处理和机器学习编译器,它可以将算
法转换为多面体表示,然后进行循环嵌套优化和并行化。Halide[56]是一种基于多
面体模型的图像处理语言和编译器,支持基于多面体模型的循环嵌套优化和并
行化技术。Halide 提供了一些高级优化方法,例如自动调度和自动并行化,可用
于优化和加速各种图像处理应用。TensorFlow XLA 是TensorFlow[57]的一个加速
器,它基于多面体模型进行编译优化,提高了TensorFlow 模型的计算效率。
Bastoul 等人[58]提出了在AI/DL 框架中使用多面体调度约束优化深度学习算子,
为GPU 生成有效的代码。William 介绍了Polygeist[59],它是一个由C,C++前端
组成的编译工具,能够将各种代码转换为适用于多面体的MLIR。

当前,已有的多面体编译优化技术是面向GPU 平台的CUDA 编程模型。如
何针对不同体系结构如国产加速器件DCU 改进现有的多面体编译技术是一个紧
迫需要解决的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于django+vue的健身房管理系统-vue

开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…

Spring AI中使用ChatMemory实现会话记忆功能

文章目录 1、需求2、ChatMemory中消息的存储位置3、实现步骤1、引入依赖2、配置Spring AI3、配置chatmemory4、java层传递conversaionId 4、验证5、完整代码6、参考文档 1、需求 我们知道大型语言模型 (LLM) 是无状态的,这就意味着他们不会保…

Java 高级泛型实战:8 个场景化编程技巧

文章目录 一、通配符高级应用:灵活处理类型关系二、泛型方法与类型推断三、泛型类的嵌套使用四、受限泛型与边界条件五、泛型与反射结合六、泛型在函数式接口中的应用七、类型擦除与桥接方法八、自定义泛型注解总结 在Java编程中,泛型不仅是类型安全的保…

[蓝桥杯 2024 国 B] 立定跳远

问题描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 n 个检查点 a1,a2,...,an且 ai≥ai−1>0。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时,小明可以自行再增加 m 个检查点让自己跳得更轻松。在运动会前&#xf…

2025年全国I卷数学压轴题解答

第19题第3问: b b b 使得存在 t t t, 对于任意的 x x x, 5 cos ⁡ x − cos ⁡ ( 5 x t ) < b 5\cos x-\cos(5xt)<b 5cosx−cos(5xt)<b, 求 b b b 的最小值. 解: b b b 的最小值 b m i n min ⁡ t max ⁡ x g ( x , t ) b_{min}\min_{t} \max_{x} g(x,t) bmi…

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…

解决网页导出PDF部分内容被遮挡问题

问题描述 以学习通为例&#xff0c;在使用CtrlP打印页面或截图时&#xff0c;固定侧边栏会遮挡部分内容&#xff0c;影响完整内容的获取。如下图所示&#xff1a; 解决办法 通过浏览器开发者工具临时移除固定侧边栏&#xff0c;具体步骤如下&#xff1a; 在目标页面右键点…

机器学习监督学习实战六:五种算法对新闻组英文文档进行文本分类(20类),词频统计和TF-IDF 转换特征提取方法理论和对比解析

本文主要介绍了20 Newsgroups数据集及其在文本分类任务中的应用。20 Newsgroups数据集包含约20,000篇新闻组文档&#xff0c;分为20个不同主题的新闻组&#xff0c;数据集被分为训练集和测试集。在数据预处理阶段&#xff0c;使用了CountVectorizer和TfidfVectorizer两种方法将…

易学探索助手-个人记录(十四)

项目背景 在大语言模型&#xff08;LLM&#xff09;完成指令微调&#xff08;SFT&#xff09;之后&#xff0c;虽然可以处理开放式问答任务&#xff0c;但在专业领域&#xff08;如《周易》&#xff09;仍面临知识更新滞后、事实性薄弱等问题。为此&#xff0c;本文介绍如何通…

从“人找政策”到“政策找人”:智能退税ERP数字化重构外贸生态

离境退税新政核心内容与外贸企业影响 &#xff08;一&#xff09;政策核心变化解析 退税商店网络扩容 新政明确鼓励在大型商圈、旅游景区、交通枢纽等境外旅客聚集地增设退税商店&#xff0c;并放宽备案条件至纳税信用M级企业。以上海为例&#xff0c;静安区计划新增1000家退…

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化&#xff1f; 在数据科学和分析领域&#xff0c;可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 内置的可视化功能因其与数据结…

曼昆《经济学原理》第九版 第十一章公共物品与公共资源

一、物品分类的基本框架 排他性&#xff1a;能否阻止他人使用该物品的特性竞争性&#xff1a;一个人使用是否减少他人使用的特性 根据这两个特性可将物品分为四类&#xff1a; 私人物品&#xff1a;既有排他性又有竞争性&#xff08;如冰淇淋、衣服&#xff09;公共物品&…

基于大模型预测原发性急性闭角型青光眼的技术方案研究大纲

目录 一、引言二、技术方案概述三、术前阶段(一)数据采集与处理(二)大模型预测(三)手术方案制定(四)麻醉方案确定(五)术前健康教育四、术中阶段(一)实时数据监测与输入(二)手术策略动态调整(三)并发症预警与处理(四)术中健康教育五、术后阶段(一)恢复监测与…

基于React 的 AntD 库进行前端开发过程中的问题汇总

背景 最近写了半个月的 React 前端&#xff0c;三年没写过 React 前端了&#xff0c;有些生疏了&#xff0c;汇总一下 基于React 前端的 antD 库编写过程中的低级问题吧。 PS 一下&#xff0c;半个月没有发布博客了&#xff0c;C站产品经理又悄默默地改了样式&#xff0c;博客…

Spring @Scheduled vs XXL-JOB vs DolphinScheduler vs Airflow:任务调度框架全景对比

引言 从单机定时任务到分布式工作流调度&#xff0c;不同场景需要选择匹配的调度框架。 本文对比 Spring Scheduled、XXL-JOB、DolphinScheduler &#xff08;海豚调度器&#xff09;和 Apache Airflow 的核心差异&#xff0c;助你避免过度设计或功能不足。 一、核心定位与适用…

springMVC-10验证及国际化

验证 概述 ● 概述 1. 对输入的数据(比如表单数据)&#xff0c;进行必要的验证&#xff0c;并给出相应的提示信息。 2. 对于验证表单数据&#xff0c;springMVC提供了很多实用的注解, 这些注解由JSR303 验证框架提供. ●JSR 303 验证框架 1. JSR 303 的含义 JSR&#xff0…

OpenCV 滑动条调整图像对比度和亮度

一、知识点 1、int createTrackbar(const String & trackbarname, const String & winname, int * value, int count, TrackbarCallback onChange 0, void * userdata 0); (1)、创建一个滑动条并将其附在指定窗口上。 (2)、参数说明: trackbarname: 创建的…

ReadWriteLock(读写锁)和 StampedLock

1. ReadWriteLock&#xff08;读写锁&#xff09;&#xff1a;实现高性能缓存 总结&#xff1a; 要点 内容 适用场景 读多写少、高并发读取场景&#xff08;如缓存&#xff09; 锁类型 ReadWriteLock接口&#xff0c;ReentrantReadWriteLock实现 读锁 vs 写锁 多线程可…

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…