当前位置: 首页 > backend >正文

多面体编译,具体操作模式

1)

抽象分析阶段是基于ISL、PET 等开源库的方式来实现。PET 库是基于LLVM
编译框架与Clang 前端的多面体模型库。系统利用PET 库自动识别并抽取代码
中存在的静态控制块(静态控制块是代码的主要优化区域,常见的样式为嵌套
循环等),并对静态控制块进行迭代域、访问关系与依赖关系的分析,完成多
面体建模。识别出程序中的内核函数,使用ISL 库中的Feutrier 算法计算得到实
例间的依赖关系。线性整数规划工具ISL 以库的形式封装在多面体编译工具内。

2)

在变换过程中,首先输入串行C 语言代码,利用PET 库自动识别并抽取代
码中存在的静态控制块,在当前的实现中,数据传输是自动处理的,只发生在
静态控制循环嵌套的开始和结束,使用#pragma 标识。其次,使用ISL 为程序中
的依赖关系构建重调度所需的限制条件,并利用ISL 库中的增量调度求解器为
静态控制块求解出调度树,以便找到程序中具有并行性的带节点。

3)

在满足依赖关系的前提下,对默认的原始调度重计算转换成一个新的调度,
实质上是多维空间几何的变基过程,目的是找到程序中具有并行性的循环。将

具有并行性的调度带以及子树映射到DCU,旨在提升程序的并行性和数据的局
部性。

4)

将调度树中具有并行性的外层调度带节点及其子树标记为kernel 节点,表
示为一个内核函数,并按层次分别映射到DCU 的线程块和线程,调度带上层部
分生成主机端代码。接着,对于分块后的块循环,依据数组访问关系分析块循
环的单次迭代中语句访问数组的重叠情况,若存在被不同线程束重叠使用的数
组区域,则将其放入共享内存中。此时,在调度树中插入共享内存申请及拷贝
节点。

5)

在代码生成阶段,根据生成的调度树生成抽象语法树(AST)。使用ISL API
完成AST 的生成,将调度树中的节点转换为ISL-AST 表达式,计算出grid_size
的AST 表达式,对设备端数组声明、空间申请规模的计算表达式,同步语句的
AST 节点,还有其他的一些数据传输节点:init/clear/copy_to/copy_form device。

感觉是这个流程

使用了PET和ISL

感谢《基于多面体模型的国产DCU源源编译优化技术研究_牛靖钰》

http://www.xdnf.cn/news/13328.html

相关文章:

  • 使用 origin -> master 强制覆盖本地 master
  • 蜗牛TV_PTV-8608_GK6323V100A-原机备份
  • Everything配置优化指南:打造最快文件搜索工具
  • 手写muduo网络库(二):文件描述符fd及其事件的封装(Channel类的实现)
  • 第十章、无线通信之红外遥控协议NEC及红外接收模块驱动的构建
  • 洛谷P1923 【深基9.例4】求第 k 小的数
  • 【SQL学习笔记2】深入理解 CASE WHEN 的魔法用法
  • 可视化在车间质量管控中的创新应用,提升品质
  • python模拟键盘 鼠标操作 通过ctypes调用Windows API实现底层输入模拟
  • filebeat原理架构
  • css~word-break属性
  • 核方法、核技巧、核函数、核矩阵
  • 模型训练-关于token【低概率token, 高熵token】
  • 【Python】 -- 趣味代码 - 飞船大战游戏
  • DiffBP: generative diffusion of 3D molecules for target protein binding
  • 智慧园区综合运营管理平台(SmartPark)和安全EHS平台的分工与协作
  • 电动汽车VCU扭矩控制模式分类方法
  • 【javascript】泡泡龙游戏中反弹和查找匹配算法
  • Jaeger开源分布式追踪平台深度剖析(三)Jaeger默认存储Badger原理剖析
  • 网格布局示例代码解析
  • (三)总结(缓存/ETag请求头)
  • CentOS7下的Redis部署
  • XS2105M IEEE 802.3af 兼容、受电设备接口控制器
  • Day27 函数专题2:装饰器
  • 从中科大镜像获取linux内核5.10.168的git方法
  • Python 字符串、字节串与编解码:数据转换的奥秘
  • 【Redis/1-前置知识】分布式系统概论:架构、数据库与微服务
  • 【力扣数据库知识手册笔记】索引
  • java--怎么定义枚举类
  • 状态模式:对象行为的优雅状态管理之道