针对DSP指令生成与二进制翻译的汇编器实现.pdf_第1页
针对DSP指令生成与二进制翻译的汇编器实现.pdf_第2页
针对DSP指令生成与二进制翻译的汇编器实现.pdf_第3页
针对DSP指令生成与二进制翻译的汇编器实现.pdf_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中图分类号 TP314文献标识码 A 文章编号 1009 2552 2011 03 0047 04 针对 DSP 指令生成与二进制翻译的汇编器实现 肖贺 刘佩林 上海交通大学电子信息与电气工程学院 上海 200240 摘要 DSP 指令生成与优化和二进制翻译是现代编译工具值得关注的热点问题 针对 DSP 指 令的特点提出一种通用的 DSP 指令生成 支持 VLIW 指令 与二进制翻译技术 并应用于 GNU 汇编器 GAS 包含该技术的汇编器 PCA Post Compilation Assembler 先将输入的汇编指令转 化成类似 LISP 的中间语言 PCA 通过对此中间语言分析以及窥孔优化 最终生成高质量的目标 平台 DSP 代码 关键词 DSP 指令生成 VLIW 指令 二进制翻译 编译后优化 窥孔优化 Implementation of assembler for DSP code generation and binary translation XIAO He LIU Pei lin School of Electronic Information and Electrical Engineering Shanghai Jiaotong University Shanghai 200240 China Abstract DSP code generation and optimization along with binary translation has become a well concerning focus of the modern tool chain This paper on account of the specialties of DSP instruction proposed a general method of DSP code generating include VLIW and binary translation which applied in GNU assembler GAS GAS with this technology called PCA first translates source assembly instructions into LISP like intermediate representation IR by analyzing the behaviors of the IR statements and employing post compilation techniques such as peephole optimization PCA will produce DSP codes of high quality suitable for the target platform Key words DSP code generation VLIW binary translation post compilation optimization peephole optimization 0引言 在现代编译工具的研究中 为了尽可能地让编 译器编译出适应于特定 DSP 架构的代码 设计者提 出一种编译后优化的方法来控制编译器进行机器相 关的优化 编译后优化的方法有很多 窥孔优化便 是其中很重要的一种 1 窥孔优化的基本思想是 考察窥孔窗中的一组指令 一般是 3 5 个 对这 组指令进行局部优化 然后滑动窗的位置 对下一组 指令执行优化操作直到所有指令扫描结束 目前成 熟的 DSP 编译器通常会采用窥孔优化技术来生成 与机器架构相关的特殊指令和优化代码 2 3 此外 现代工具链有一个很有前景的应用称之 为二进制翻译 也就是说 某一架构的汇编二进制程 序通过特定的工具能够被翻译为能在另一种架构上 执行的可执行代码 同时保证二进制程序不会有太 明显的性能降低 据研究 4 5 表明 窥孔优化十分 适用于二进制翻译 为了满足上述两方面的要求 提出一种采用编 译后优化技术生成特定 DSP 指令和完成二进制翻 译的汇编器 PCA 它将窥孔优化技术从编译阶段推 迟到汇编链接阶段 这样的编译结构有三方面的好 处 首先 该汇编器结构为二进制翻译创造了可 收稿日期 2010 10 27 作者简介 肖贺 1986 男 硕士研究生 主要研究方向为 DSP 处理器体系架构及其编译器汇编器实现 74 能 其次 该结构提出优化技术可以用于不同高级 编程语言下的程序优化 也能适用于高级语言与汇 编语言混合编程的情况 最后 在编译阶段得不到 的许多程序相关信息例如符号信息 变量存储形式 内存或是寄存器 可以在汇编阶段获得 能够更加 有效地进行优化 1整体设计 提出的汇编器 PCA 首先将汇编代码 编译器生 成或者手写汇编代码 翻译转化成一种通用的中间 语言 PCA 接着采用基于窥孔优化的指令翻译生 成算法对中间语言进行分析与优化 最终生成所需 要的目标代码 从流程框架和中间语言匹配两方面 对 PCA 展开具体讨论 1 1PCA 流程框架 PCA 是基于 GNU 汇编器 GAS 而开发的 而 GAS 是以行为单位进行扫描并生成最终二进制代 码 这种传统的汇编器结构不适合进行二进制翻译 和构造 DSP 指令 PCA 对此结构进行了相应的调 整 PCA 的工作原理如图 1 所示 图 1 PCA 工作流程图 源汇编代码首先通过 PCA 的解析单元转换成 中间语言 IR Intermediate Representation 同时重建 程序控制流信息 并生成符号表 被转换过的中间 语言通过窥孔优化算法与预先定义的 DSP 架构指 令库中的模式进行匹配与选择变换 同时更新优化 后 IR 序列的符号表 最后 PCA 将最终的中间语 言序列和符号表生成可执行文件 1 2中间语言 IR 描述与匹配 PCA 采用类似于 GCC 中 RTL 语言 6 的 IR 结 构作为其中间语言 如图 2 所示 可以看出 IR 结 构包含两个部分 操作部分 opcode 和操作数部分 operands 图 2 IR 结构图 其中 opcode 中的 CODE 域指定当前中间语言 语句完成的行为 PCA 定义了一组标准名来指定一 些通用的操作 例如 PLUS 表示加法 MINUS 表示减 法 SHIFT 表示移位操作等等 CODE 集合亦可以 根据特定的 DSP 指令架构而进行扩展 IR TYPE 域标识指令模板的分类 该分类使用于 VLIW 模板 中 operands 部分指定特定操作下操作数的特征 其中第一个操作数为目标操作数 其他为源操作数 它包含 TYPE operandx 和 WIDTH 三个域 TYPE 域指定操作数的类型 例如 REG 表示普通寄存器 SPR 表示特殊寄存器 MEM 内存 以及 IMM 表示立 即数 operandx 域标识操作数的名称 例如 REG r7 表示某条语句的一个操作数是寄存器型 名称是 r7 不同的 IR 语句中相同的操作数名称表明了他 们对同一个操作数进行了操作 WIDTH 域指定了 操作数的位宽 2具体实现 给出了 PCA 的工作流程以及介绍了中间语言 结合 DSP 指令特点来详细说明 PCA 生成 DSP 指令 代码的过程 2 1控制流重建 重建输入程序的控制流对于汇编器来说是一个 比较大的挑战 为了有效地优化和解析源汇编代码 的功能 PCA 首先需要将直接转换过来的 IR 语句 分割成不同的基本块 具体做法是 PCA 找出跳转 语句 将它们作为基本块最后一条语句 并将它们的 跳转目标作为基本块的第一条语句 以此来分割 IR 程序 接着通过分析基本块中各语句的 OPERAND 域标识得它们的依赖关系后 PCA 以这些被分割的 基本块为基本单元解析并生成 DSP 指令 2 2指令翻译生成算法 指令翻译生成算法的基本原理是 IR 中间语句 匹配 所谓的中间语句匹配 是指当汇编指令经过解 释器转换成中间语句后 该语句的 OPCODE 域 TYPE 域和 WIDTH 域和某个预先定义的 IR 模板相 一致 IR 支持嵌套结构以进行复杂的窥孔优化 即 一个 IR 语句的操作数可以是一条 IR 语句结构 由 于 IR 语句的作用是改变目标操作数的值 那么 IR 语句本身可以等价于一个与目标操作数相同的一个 操作数 一般来说 DSP 指令可以大致分为两类 一类称 为增强指令 能够完成很强大的运算操作 另一类是 VLIW 指令 包含多个发射槽 PCA 预先定义复杂 的 IR 模板 通过 IR 语句合并算法可以实现第一类 84 指令 通过指定指令封包的格式可以实现第二类指 令 对于第一类增强指令 IR 语言模板可以是一系 列简单模板的嵌套 第二类指令的模板为一系列格 式的指令包 而对于普通非 DSP 指令来说 翻译过 程比较简单 本文不多赘述 指令翻译生成算法的流程图如图 3 所示 图 3 的左半部分实现 IR 语句合并生成 DSP 增强指令的 过程 首先 PCA 会根据 DSP 增强指令模板生成 IR 语句合并器 IR 语句合并但与会根据操作数依赖 关系将基本块中符合模板的多条 IR 语句合并起来 如果 IR 语句合并单元确实对当前 IR 语句执行了合 并操作 则会对所有参与合并的 IR 语句进行标识 以便 PCA 将参与合并的 IR 语句从缓冲区内删除 否则 该 IR 语句将直接进入下一级模块 图 3指令翻译生成算法流程图 DSP 指令封装过程如图 3 右半部分所示 PCA 根据预先定义的 DSP 封包规则 生成一个 IR 语句 封装器 IR 语句封装器接收 IR 语句合并单元的输 出 IR 语句 并根据封包规则对这些 IR 语句进行封 装 例如 如果当前的 DSP 架构支持的是支持同时 发射 3 条指令 那么 PCA 会根据 IR 语句的依赖关 系将不相关的 IR 语句进行封装 若不存在 3 条这样 的指令 那么则通过插入 NOP 指令来进行封装 若 DSP 架构不符合 VLIW 结构 则可通过指定封装规 则为一次发射一条指令来实现此 DSP 单发射架构 2 3DSP 指令变换匹配 不符合 DSP 模板的 IR 语句存在两种情况 一 种是通过相应的变换后可以符合某种 DSP 模板 另 一种是无法符合任何 DSP 模板的 由于 PCA 最关 注的问题是如何尽可能多地生成符合 DSP 模板的 指令 因此 PCA 尽量转换第一类 IR 语句为匹配 IR 语句 对于 PCA 来说 匹配变换的方法有以下 两种 1 操作数位置交换 DSP 指令的源操作数通 常不具有可交换性 例如 某 DSP 加法指令要求第 一源操作数为内存操作数 第二源操作数为寄存器 操作 那么第一源操作数为寄存器 第二源操作数为 内存的 IR 加法语句无法直接匹配模板生成相应的 指令 通过交换两源操作数的位置 可以使该 IR 语 句匹配 DSP 加法模板 2 操作数类型转换 DSP 指令对操作数类型 一般有严格的限定 对于无法通过置换操作数位置 的第一类 IR 语句 PCA 通过类型变换来匹配某些 IR 模板 例如 某 DSP 移位法指令要求所有的操作 数为寄存器操作数 对于其中第一源操作数为立即 数的 IR 移位语句 可以通过在该语句前插入一个将 立即数搬移到寄存器操作的语句 然后再将此移位 语句的所有操作数修改为相应的寄存器 以符合 DSP 移位模板生成特定的移位指令 可以看出 第一种匹配方法不会引入额外的代 价 不会增加新的指令 而第二类匹配方法则会带 来额外的开销 插入新的指令 在实际的 DSP 指 令生成过程中 通过权衡计算匹配操作给 PCA 代码 生成时候带来好处或者额外的开销 可以选择在特 定的基本块中是否使用该匹配操作 3结果分析 PCA 的目标机为 AISA 它一款包含 DSP 音频 加速指令的处理器 7 该处理器包含两条流水线 一条流水线执行 RISC 基本指令集 BASIC INST 包 含运算 跳转 比较等指令 另一条流水线执行音 频扩展指令 AUDIO EXTENTION 测试程序为 HE LIX 非商用免费的 AAC 解码器 该源代码中包含了 大量的乘法操作 内存变量加法操作等等 且这些运 算操作在 AISA 中有相应的 DSP 音频加速指令与之 对应 3 1二进制翻译性能比较 为了测试 PCA 的二进制翻译能力 使用 PCA 将 ARM 工具链编译生成的 AAC 解码二进制程序翻 译为 AISA 可执行的 BASIC INST 二进制程序 表 1 94 为测试码流 表 1 HELIX AAC LC 无 SBR 测试码流 名称采样率比特率声道数长度 AM 9644kHz96kbpsMono20 帧 AS 12844kHz128kbpsStereo20 帧 将 ARM 二进制程序仅翻译为 BASIC INST 程序 的原因有两个 一是避免了 AISA 中 DSP 音频加速 指令带来的性能提升会对 PCA 翻译能力不足产生 掩蔽现象 二是由于 ARM 基本指令集和 BASIC INST 指令集的硬件运算能力类似 PCA 翻译前后的 二进制程序的性能比较的结果能够较为准确和清晰 地反映出 PCA 的翻译能力 实验结果如表 2 所示 表 2PCA 翻译性能结果比较 AS 128 测 试 架 构 O0 O2 静态指令动态指令静态指令动态指令 ARM14208049625732276667519774 AISA158035572184567273933623643 从表 2 的结果可以看出 在 arm linux gcc 在 O0选项编译下的 AAC 在 armulator 上运行的动 态指令数与 BASIC INST 相差不大 这在很大程度上 归功于 ARM 的 CPU 架构与 AISA 的 BASIC INST 指 令集架构和寄存器组织类似 使得在二进制翻译过 程不会引入太多的额外开销 在arm linux gcc 02 选项下 BASIC INST 的性能相比有所下降 这是 因为 arm linux gcc 在 02 选项会执行与 arm 架 构相关的优化策略 例如指令乱序 而这些优化策 略可能对 BASIC INST 指令集没有像 ARM 指令集一 样带来显著的性能提 从结果来看 在没有任何加 速指令情况下 PCA 将一种基本指令集和程序翻译 为另一种基本指令集和程序的性能良好 3 2DSP 指令生成的性能比较 AAC 解码器中包含大量的乘法和移位 以及内 存变量的加减法操作 这些都可以通过 AISA 的音 频扩展指令 AUDIO EXTENSION 来加速运算 通过 比较 PCA 对 AAC 解码器编译最终仅生成 BASIC INST 指令和同时生成包含 BASIC INST 与 AUDIO EXTENSION 指令这两种情况下的解码性能 动态指 令条数 得出 PCA 生成 DSP 指令的能力 这里特 别需要指出 后种情况 含 AUDIO EXTENTION 指 令 的二进制程序是 PCA 以第一种情况下 仅 BAS IC INST 指令 的二进制程序通过反汇编为汇编文 件作为输入 通过 DSP 指令翻译生成算法最终生成 的 结果如表 3 所示 表 3 PCA DSP 指令生成结果比较 测 试 ISA O0 O2 AM 96AS 128AM 96AS 128 BASIC372228785490938842167587817239 AUDIO265641683348861729973285686220 通过表 3 的比较可以很容易看出包含音频加速 指令 AUDIO EXTENSION 的 AAC 解码器解码能力 有接近两倍的性能提升 这一方面是因为 AISA 的 AUDIO EXTENSION DSP 指令功能强大 非常适合 音频应用 另一方面也说明 PCA 在 DSP 指令生成方 面的功能比较强劲 4结束语 根据设计实现了一种支持 VLIW 指令 DSP 汇编 链接器 PCA 由于 PCA 在汇编器这一环节进行窥 孔优化 使得它能同时实现二进制翻译工作 PCA 首先将输入的指令集架构汇编语言转换为中间语言 IR 并通过基于窥孔优化的指令翻译生成算法最终 生成包含特定 DSP 指令或另一指令集架构的可执 行二进制文件 实现了 DSP 指令 包括 VLIW 指令 的生成优化和二进制翻译功能 通过基于 AISA 平 台的性能比较和分析 可以看出 PCA 具备了高性能 的 DSP 指令生成和较好的二进制翻译能力 能够适 用于包含大量 DSP 加速指令运算的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论