490 likes | 630 Views
谈谈编译器设计. 魏 继 增 VLSI 设计与应用研究所 计算机工程系 计算机科学与技术学院 2012.3.27. 为什么关注编译器设计. 目录. 我们做了什么工作. 大家做些什么工作. 为什么关注编译器设计 ……. 后 PC 时代. 低价化效应弥漫整体 PC 产业,无论是桌上型或者是 笔记型计算机 ; 从产业的最上游至最下游,每个环节的成本都压缩到 极至 ; Moore’s Law 已经没有几年光景, Wintel 不再能驱 动 PC 成长 ; PC 每年出货量不再以 2 位数字成长,而是变成常态的 个位数字成长.
E N D
谈谈编译器设计 • 魏 继 增 • VLSI设计与应用研究所 • 计算机工程系 • 计算机科学与技术学院 • 2012.3.27
为什么关注编译器设计 目录 我们做了什么工作 大家做些什么工作
后PC时代 • 低价化效应弥漫整体PC产业,无论是桌上型或者是 • 笔记型计算机; • 从产业的最上游至最下游,每个环节的成本都压缩到 • 极至; • Moore’s Law已经没有几年光景,Wintel不再能驱 • 动PC成长; • PC每年出货量不再以2位数字成长,而是变成常态的 • 个位数字成长 Canalys公司发布报告,2011年全球智能手机出货量达到了4.87 亿部,首次超过了全球市场PC的出货量
SoC (System on-Chip) Processor Co-processor Accelerator Memory Peripheral Bus
处理器 MIPS 指令集 Intel 龙芯 Motorola授权 ARM 国芯C*Core TI DSP 自主研发 君正XBurst
ARM的成功模式 • ARM从没生产过一颗芯片,但它却像是一个隐 • 形芯片帝国 • 从手机到洗衣机,从汽车到电视,只要使用到芯 • 片,平均全球每四颗芯片,就有一颗来自ARM血统 • 全世界每卖出一支智能手机,里头就有五至六颗芯 • 片使用ARM专利,平均每支智能手机,要向ARM缴 • 交大约0.5美元专利费 • ARM公司提供IP核授权,多加厂商提供各种基础软 • 件和应用解决方案(ARM的生态系统)
处理器生态系统 • 生态系统(Ecosystem):任何生物群体与其所 • 处的环境组成的统一体都是生态系统; • 处理器生态系统:支持处理器使用的全套工具链 • 和解决方案,包括:编译器、指令集仿真器、调 • 试器、电子系统级设计工具、操作系统等基础软 • 件以及各种主流应用解决方案等 • 我国投入大量人力/物力(上百亿)突破处理器技 • 术瓶颈,却忽略生态系统的建设,使得生产的处 • 理器最终没有市场,成为“垃圾”
处理器生态系统 从事没有生态系统的处理器的研发劳民伤财 编译器作为生态系统的重要组成部分是一切软件运行的基础,是处理器性能得到充分发挥的保障!!!
编译器引起重视 • 国家的的需求 • “核高基”重大项目(核心电子器件、高端通用芯片及基础软件产品) • 工业界的需求 • ARM、威盛、Intel、苏州国芯… • 后PC时代的需求 • 产品多样化、苛刻用户需求(后端更重要) • 自身职业规划(计算机专业)
T*CORE处理器 • T*CORE是基于TTA的嵌入式处理器 • 轻量级协处理器 • 不是一款具体处理器,而是处理器模板 • 完全的可配置性与可扩展性 • 灵活的指令结构
传输触发体系结构(TTA) 类VLIW(超长指令字) 混合流水线 非全连接
指令格式 传输触发替代操作触发 数据传输细节在体系结构一级可见 去除冗余数据传输
T*CORE应用(音频解码) 已在0.13μm 工艺下成功流片 面积为 3.25mm2 最大主频可达到150MHZ 静态功耗仅为2.27mw
T*CORE可重定目标编译器 GCC, SUIF, LLVM, Trimaran, VEX
寄存器分配 • 通过将程序变量尽可能地分配到寄存器,从而提高 • 程序执行速度的一种方法; • 当寄存器数目不足以分配某些变量时,就必须将这 • 些变量溢出到内存中,该过程成为spill; • 需要读取此溢出变量时,从内存中将其提取的过程 • 为reload
寄存器分配 冲突图 变量生命周期
线性扫描 V是程序中所有变量的集合,I是程序中所有指令的集合 定义1: Collection(a) = {Vi | Vi∈V, a∈I, 且Vi为存活状态}; 定义2: Live(Vi) = [a, b]即存在a, b∈I,其中,a = start(Vi)并且b = end(Vi),对于任意m < a, n > b,Vi∈Collection(m)并且Vi∈Collection(n)。 定义3: active(a) = { Vi | Vi∈V, V表示当前程序点a上占用物理寄存器的所有变量的集合, 若end(Vi) < end(Vj), 则Vi < Vj}。
线性扫描 • 扫描到一个新变量Vi时,转向扫描active集合,将生命区间不与这个新变量Vi有重叠的变量从active中去掉。因为被去掉的变量的结束点早于变量Vi的开始点,使得其占用的寄存器被释放,被释放的自由寄存器可以重新分配给其它变量。然后给变量Vi分配一个寄存器,并按active的顺序规则将Vi放入active集合中。 • 若|active|=N(物理寄存器的数目),并且∨ Vj∈active,star(Vi) < end (Vj),则Spill; • 出现Spill时,Vi和Vj中使用频率最低的变量进行Spill • 充分利用生命周期洞(Lifetime Hole)减轻寄存器的压力
指令调度 • 指令调度指的是在保持程序语义的前提下通过重新排列指令的顺序来提高流水、多发射以及超长指令字等处理器的指令级并行度。 • 指令调度分为:硬指令调度(超标量处理器)和软指令调度(超长指令字处理器) • 常用的方法:表调度(List Scheduling)
基于遗传算法指令调度策略 是否满足优化准则 是 否 最佳个体 产生初始种群 计算适应度 选择 结束 开始 交叉 变异
基于遗传算法指令调度策略 初始种群和编码: • 映射S:Transport -> Instruction,其中,Transport为T*CORE处理器某一串行未调度程序中所有传输操作的集合,Instruction为完成调度后,相应数据传输所在指令的编号所构成的集合,并且|Transport| = |Instruction| = N,N为所有传输操作的数目。 • 每个1×N向量Instruction表示种群中的一个个体,向量Instruction中的每个元素xi表示第i个传输操作所在指令的编号。 • xi为[1,N/B]中的随机数,其中N是所有传输操作的数目,B是总线的数目。
基于遗传算法指令调度策略 最小延迟矩阵: • 1. #11->add_o, • 2. #12->add_t, • 3. add_r->r1, • 4. r1->sub_o, • 5. #13->sub_t, • 6. sub_r->r2, • MinDelay(1,2)=0, MinDelay(2,3)=(fu_delay), MinDelay(2,4)=1, • MinDelay(4,5)=0, MinDelay(5,6)=(fu_delay), MinDelay(3,5)=-(fu_delay - 1)=-1 • MinDelay(3,4)=1
基于遗传算法指令调度策略 形式化描述:
基于遗传算法指令调度策略 调整为可行解:
基于遗传算法指令调度策略 选择与交叉 • 精英保留,劣势淘汰 • 所有个体按适应度进行排序 • 前20%个体随机选择,后20%个体随机淘汰
基于遗传算法指令调度策略 变异 • 变异概率设定为2% • 随机选取一个操作指令(优先选择入度为0的操作) • 将其编码修改为其他编号(优先选择NOP操作过 • 多的指令)
指令筛选 • 指令筛选:基于目标机器指令,搜索从应用程序的 • 中间表示(机器无关)到其汇编代码(机器相关) • 的有效映射; • 指令筛选从本质可被视为模式匹配和覆盖问题; • 指令筛选可分为两阶段; • 识别(identification)和选择(selection) • 指令筛选是一个NP-Complete问题
指令筛选 基于0-1规划的形式化描述 • Subject Graph G=(V, E),其中,V是表示具体机器指令的顶点集合,E是指令之间依赖关系的集合; • T={T1, T2, …, Tk},Ti表示第i个机器指令的tile模板; • weight(Ti),表示tile模板的权重(Cycle、Area、Power…) • 通过对G进行BFS搜索,获得和所有tile模板匹配的子图集合N • N={SGi(j)},SGi(j)表示G中和第i个tile模板匹配的第j个子图的顶 • 点的结合
指令筛选 基于0-1规划的形式化描述 • Select-vector S,|S|=|N| • 分量取值为“0”或“1”,表示相应的匹配方案是否被选取。 • Weight-vector W,|W|=|N| • 分量表示对应的匹配方案所具有权重weight(Ti)=weight(SGi(j))
指令筛选 基于0-1规划的形式化描述 objective function: Min(S×WT) 注:以Cycle为优化目标 s.t.1:∪Np= V (p=1,2, …, |N|), iff S(p) = 1 s.t.2:Np ∩ Nq = Null, iffp ≠ q and S(p) = S(q) =1
指令筛选 基于禁忌搜索的指令筛选 (1). 给定算法参数,产生初始解x,置禁忌表为空。 (2).判断算法终止条件是否满足?若是,则结束算法并输出优化结 果;否则,继续以下步骤。 (3).利用当前最优解的邻域函数产生其所有(或若干)邻域解,并 从中确定若干候选解。 (4).对候选解判断藐视准则是否满足?若成立,则用最佳解y替代x 成为新的当前解,并用与y对应的禁忌对象替换最早进入禁忌 表的禁忌对象,然后转步骤2;否则,继续以下步骤。 (5).选择候选解集中非禁忌对象对应的最佳状态为新的当前解,同 时用与之对应的禁忌对象替换最早进入禁忌表的禁忌对象元素。
指令筛选 基于禁忌搜索的指令筛选(初始解) • 对集合N中的元素按Cycle从小到大进行排序,采用贪婪算法在 • 满足约束条件的前提下获得初始可行解
指令筛选 基于禁忌搜索的指令筛选(搜索邻域) • RNi = {∪ Na|Na ∈ N ∧ all the Na have the same root node i} • 任意Na,令S(a) = 1,所有属于RNi-{Na}的元素其所对应的向量 • S中的分量设置为“0” • 根据s.t.1和s.t.2调整S得到S’,所有S’的集合构成基于node i • 的搜素邻域
C*CORE处理器 • 苏州国芯科技有限公司引进摩托罗拉先进水平的低功耗、 • 高性能32位RISC嵌入式CPU M*Core 技术及其SoC设计方法 • 对其进行、架构再开发,形成满足不同市场需求的,具有 • 我国自主知识产权的C*CORE(China Core)系列处理器 • C310面向控制领域;CX4X系列具备高速缓存和内存管理; • CSX2X系列信息安全专用;CX0X系列超低功耗、超小面 • 积;TriCore系列多核处理器
C*CORE310处理器特点 • 32 位精简指令集计算机(RISC )架构,固定16 位指令长度 • 16 个32 位通用寄存器 • 高效的4 级执行流水线 • 多数指令单周期执行,分支指令访问仅需2个周期 • 支持字节、半字和字三种类型的存储器访问 • 16 个专用的交替寄存器,支持快速中断 • 支持向量和自动向量中断 • 硬件整数乘法器阵列 • 超级用户模式和普通用户模式 • 大端模式是C*CORE处理器的缺省操作模式
C*CORE310编译器设计 任务:基于GCC编译生成C*CORE310指令 实验平台:Linux操作系统(推荐Ubuntu或Red Hat) 软件环境:binutils,gcc,newlib,gdb
C*CORE310编译器设计 方法:(以ARM为例) 学习制作arm-elf交叉编译链(参照文档arm-elf交叉编译链的制作.docx) 修改gcc源文件文件中的指令描述(主要修改” gcc-4.1.2\gcc\config\arm”路径下的arm.md, arm.h以及arm.c这三个文件) 重新编译,制作交叉编译链 编译C语言程序,验证是否可以生成C*CORE310汇编程序
C*CORE310编译器设计 收获: 熟悉至少两款嵌入式处理器的指令(ARM和C*CORE) 掌握编译器中对于具体目标机的编译处理过程 学会交叉编译链的制作 make、autoconfig等多文件工程管理的方法
Q & A? 魏继增:weijizeng@tju.edu.cn 郭 炜:weiguo@tju.edu.cn