- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级语言程序中的数据结构优化.doc
中南大学
本科生毕业论文(设计)
论文翻译
题 目 数据结构可视化实验平台
学生姓名 祝 杰
指导教师 余 腊 生
学 院 信息科学与工程学院
专业班级 计科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)。我们同时定义复数为
您可能关注的文档
最近下载
- 2025年北师大版高二英语新教材选择性必修二课文及翻译 .pdf VIP
- 胺碘酮抗心律失常治疗应用指南.pptx VIP
- 提升企业应急处置能力的策略.pptx VIP
- 2025届上海市中考各区二模考试物理试卷 (共12套,附答案)_可有哪些信誉好的足球投注网站.docx VIP
- 2025届上海市中考各区二模考试语文试卷 (共9套,附答案)_可有哪些信誉好的足球投注网站.docx VIP
- 2025届上海市中考各区二模考试数学试卷 (共12套,附答案).pdf VIP
- 高中地理一轮复习专题复习第18讲《流水地貌》 学案.doc VIP
- 博帕尔化学品泄漏事故案例分析.pptx VIP
- 2024年秋季七年级数学入学分班考试模拟卷02(人教版).docx VIP
- 2025届高考语文复习:分析修辞手法构成及表达效果 课件.pptx VIP
文档评论(0)