网站大量收购独家精品文档,联系QQ:2885784924

高级语言程序中的数据结构优化概要.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中南大学 本科生毕业论文(设计) 题 目 数据结构可视化实验平台 学生姓名 祝 杰 指导教师 余 腊 生 学 院 信息科学与工程学院 专业班级 计科0902班 完成时间 2013年4月 高级语言程序中的数据结构优化 基于分级的可扩展编译器新方向 Tiark Rompf Arvind K.Sujeeth Nada Amin Kevin J. Browny Vojin Jovanovic HyoukJoong Leey Manohar Jonnalagedda Kunle Olukotuny Martin Odersky 瑞士洛桑理工大学: {first.last}@epfl.ch Oracle实验室 斯坦福大学: {asujeeth, kjbrown, hyouklee, kunle}@ 摘要 高层次的数据结构是现代编程的基石,同时也阻碍了编译器优化。为了解释用户或库定义的数据结构,编译器需要具备可扩展性。扩展编译器的通用机制分为两类。前端宏,分级或部分评估系统,可用于在程序进入编译器前以编程的方式删除抽象,进行相应的具象化。此外,有些编译器通过在编译过程中添加新的变型或增加新的中间表示(IR)类型来扩展编译内部的运作。这两者单独都不足以处理高层次的数据结构所带来的挑战。本文展示了一种新颖的方式将两者结合起来,这种方式所产生效益远远大于两者效益之和。 分段技术不仅可以用于前端,我们在内部编译器变型中也可以使用分段。这些内部类型通过程序的执行来创建变型IR。总所周知,分段可以简化程序的生成,并可以通过同样的方式简化程序的转换。把转化定义为阶段IR解释器比在IR转化器上实现低级的IR要来得简单。通过自定义IR节点,很多被表示为从IR节点到分级程序片段的重写的优化可以被整合成一个变型,以缓和无序问题。推理性的重写可以在循环结构周围保持乐观的判断。 我们演示了几个使用了这种架构而且功能特别强大的程序优化方式,它们面向以下数据结构:一个新的循环融合和砍伐森林算法,结构数组到数组的结构之间的转换,面向多样并行设备的对象扁平化和代码生成。我们通过一些展现出巨大加速的不平凡的案例研究来验证我们的方法。 分类和主题描述 D.3.4[编程语言]:处理器-代码生成,优化,运行时环境;D.1.3[编程技术]:并发程序设计-并行程序设计 通用术语 设计,语言,性能 关键词 分级,代码生成,数据结构,可扩充编译程序 // 向量 object Vector { def fromArray[T:Numeric](a: Array[T]) = new Vector { val data = a } def zeros[T:Numeric](n: Int) = Vector.fromArray(Array.fill(n)(i = zero[T])) } abstract class Vector[T:Numeric] { val data: Array[T] def +(that: Vector[T]) = Vector.fromArray(data.zipWith(that.data)(_ + _)) ... } // 矩阵 abstract class Matrix[T:Numeric] { ... } // 复数 case class Complex(re: Double, im: Double) { def +(that: Complex) = Complex(re + that.re, im + that.im) def *(that: Complex) = ... } 图 1. 高等级的Scala线性代数包的框架 引言 将高级语言程序编译成低级语言程序是很难的,特别是因为这样的程序,使用了高层次的抽象和定义。编译器无法看穿这些抽象和定义(“抽象代价”),它不能推理出领域特有的属性(“通用瓶颈”)。数据结构和操作集是其中最重要的抽象,也是目前被认为最难使用到优化编译程序中的。 让我们考虑在Scala中的高级语言编程实例。我们要实现一个稠密线性代数包。图1显示了一个通过Array扩展而来的Vector和Matrix的框架,框架内部使用了高级操作集(fill,zipWith)。Vector和Matrix包含数值类型(模板类Numeric

文档评论(0)

119220 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档