工作如果是和编译器相关的或者编译器爱好者们,谁没有点冲动想自己写个编译器出来。我也做了一些调研,分享如下:

–介绍如何使用JAVA语言完成一个面向LLVM后端的编译器,以mjava作为目标语言,这是JAVA语言的一个子集。包括词法分析,语法分析,错误控制,符号表管理,类型检查等部分

–采用一种逐步增加功能的方式构造编译器,作者的文章写的很深入前出(我只看了abstract和introduction部分)

–作者从1988-1995年用了7年的时间完成了这份介绍。没有使用flex和yacc这些东西,纯手工制作。使用pascal语言写出的编译器。是一位学物理的博士,很是钦佩!

MIT OCW 6.035 Computer Language EngineeringMIT关于计算机工程的开放课程,使用JAVA语言创建一个完整的Decaf语言编译器。我也曾看过一点,但这门课的实验要求有MIT的环境,还有一些库什么的。外面的人拿不到,所以没办法,只能作参考了。

–编译器课程,使用C++实现一个Cool(Classroom Object-Oriented Language)语言编译器.也是因为没有缓环境和库,只能作罢。

– 很有特色的一门课,也是使用C++实现COOL语言的编译器,但将LLVM融入进来,前端输出中间表示到LLVM,在作一些后端的实验。另外UIUC还有一门高级的编译器课程,是使用JAVA语言来编写。重要的是这个CS426 能够下到所有课程的资料,包括源码。 感兴趣的朋友可以试试。

– 这个系列的文章主张使用现有的工具体验如何实现编译器。注重快速高效的实现,主要关注前端。有兴趣了解和学习LLVM 中间表示和工作机制的朋友不要错过。

还有如下的参考资料(¶ Link to a PDF, $ Link to a printed book):

两个新闻组,可以上去请教问题:

想起某人在饭桌上曾经的感慨,I have a dream…..
一直以来,都觉得编译器高深莫测。做个编译器出来,或许很难,但做了可能就不能。 可能是勇气不足。再等等吧,总有一天我要把它实现!。。。。。。。

 

循环嵌套优化(LNO)
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页

  • 循环嵌套优化

循环嵌套优化(LNO)概述
该优化主要在嵌套循环上做转换。该部分工作的范围时每个顶层循环内的嵌套,优化分析过程中并不构建控制流图,而是通过数据依赖分析驱动。使用标量优化阶段(WOPT)提供的别名和使用-定义信息,并通过代码生成器将数据依赖信息附注在每个use上(仅在最内层循环),这部分优化需要对硬件资源建模。

  • 依赖测试

依赖的定义:给定两个引用R1和R2,若它们都访问同一块内存且从R1到R2有路径存在,则称R2依赖于R1,依赖分为:真依赖,反向依赖(anti dependence)和输出依赖三种。另外还要说明访问数组和向量(vector)的区别,访问数组当每个数组的下表时循环归纳变量时,访问向量时所有的向量下标都访问数组。依赖测试(输入是访问数组时),参考论文<高效精准的数据依赖分析>(Efficient and Exact Data Dependence Analysis),Dror Maydan,et al.., PLDI’91. 依赖测试的输出是依赖向量,每一维表示一个循环嵌套的层。

  • LNO实施的三类优化

数据缓存转换(?),协助其他优化的转换,向量化和并行化 Continue reading »

 

这个错误在于类型不符,可能是宏定义造成的,见下。最多的可能是因为;  {} () 没有写对,造成编译器识别错误而出错。根据搜索结果整理如下:

1,宏定义问题

头文件
[code lang="cpp"]
#ifndef MAIN_H_
#define MAIN_H_
#include<map>
#include<string>
#include<vector>
using namespace std;
typedef map< string, vector<string> > pvMap;
typedef map< string, vector<string> >::iterator pviter;
typedef pair<map<string,vector<string> >,bool> insiter;
#endif /* MAIN_H_ */
[/code] Continue reading »

 

此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页

代码生成

  • 目标机信息表(targ_info)

该机制来自Cydrome,并进行了增强。将目标机指令集,ABI和调度信息参数化。通过表生成机制来编译和链接,生成的表是用于CG阶段的C++文件(?).这种机制能将优化算法和体系结构细节分开,而且再移植到新结构上时能最小化编译器的改动,因为机器相关的内容存放在机器相关的文件夹内。支持ISA子集。不同处理器的调度信息实现编译成独立的.so文件,并使用编译选项控制dlopen()使用哪个.so文件

  • 代码生成中间表示(CGIR)

这种中间表示的每个操作(op)对应一条机器指令,通过targ_info来格式化指令。在一个目标机op中操作数和结果都存放在TN中(或者寄存器符号中).TN有符号、直接量和寄存器三种类型。TN的类型都是依据指令格式制定的。每个操作都使用两个操作数,并写出一个结果(和RISC相似),某些特殊的指令也能写两个结果(如 mul) Continue reading »

 

此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com

Fred Chow 原版讲义见最后一页

Open64课程–过程间分析优化

  • IPA的角色

唯一在程序间的优化操作。分析:收集整个程序的信息; 优化:在程序过程之间进行优化。IPA的整个优化效果取决于它之后的优化;IPA也为之后的优化阶段提供了跨文件的信息。

 

Adobe AIR(Adobe Integrated Runtime)是跨平台的运行时系统,是在Apollo的基础上更名的系统。

开发人员可以通过它将HTML,Ajax Adove Flash和Flex等技术联系在一起,在桌面创建更胖的应用。adobe AIR让用户使用已经熟悉的Adobe工具或者其他的文本编辑器来创建应用,并且能很容易的发布应用。跨平台:windows linux MAC等
传统的浏览器将用户和服务器站点上的内容、应用交互起来。Adobe AIR能够用浏览器中的技术开发桌面应用。简言之,它能将Web应用桌面化。

目前它能很方便的实现桌面集成,包括拖拽,粘帖,任务管理和通知提醒等。并能直接访问本地存储,包括SQL Lite,本地文件读写。
Adobe AIR2.0中新增加的特性:按照类型用默认的程序打开文件,大容量存储设备检测,本地进程API,多点触摸和手势支持等 Continue reading »

 

此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页

全局标量优化II-Main-OPT

  • 三种和依赖有关的优化策略(Re-cap?)
    • 删除无用计算—死存储删除
    • 删除冗余计算—通用子表达式、循环无关代码移动、部分冗余删除
    • 计算排序—循环转换、指令调度
    • 本节将会讨论前两种
  • 部分冗余删除
    • 什么是部分冗余—执行某些路径时的冗余计算
    • 方法:在非冗余路径上插入的计算导致的完全的冗余(相对于部分冗余)
    • 这样,完全的冗余就会被删除
    • 部分冗余删除比循环无关代码外提要好

    wopt-2_html_452c7d7f Continue reading »

 

如何能做上高薪的程序员

这个题目有点功利,其实目的不是为了强调钱,只是为了强调这程序员背后的价值,也就是为何能拿到高薪。

我一直很想把一切做技术的看作是在练功,一种修为的锻炼。学编程的,学法律的,学传媒的,各行各业都有自己的门道。都需要长时间的积累和锻炼才能有大的收获,才能在这个行业有自己的地位,让自己的价值得到体现。虽然自己现在都已经研二了,但是还是买了《我是一只IT小小鸟》这本书来看,主要是想刺激一下自己。这本书是一些已经算是有点小成绩的刚刚走出学校或是还在读研究生的学生,但各个都是传说中的牛人。每个人都从自己的角度介绍了自己求学的几年时间里的经验和教训。是本好书,尤其适合想做IT的大学本科生。

这本书里,几乎所有的人都先谈到了自己大学前的经历,简言之就是兴趣爱好。有了这个才能在这一行里走的更远,这个就不多说了。

说说书里一些人的成功经验:

Continue reading »

 

作为即将的房奴的80后,今日偶尔看到了日本房产泡沫这个说法。于是google之,隧想写篇博文,只为抱怨。
目前支持泡沫论和崩溃论的理由:
各个大城市房价快速上涨。人民币升值压力大,热钱流入比较明显
但是依本博之见,上涨是肯定的,崩溃是很久以后的,至少应该在我拼命快要还清房贷的时候:
首先,日本的房价上涨从20世纪50年代到80年代持续了30年,最终在90年代的时候崩溃。上涨用了30年的时间。中国的改革开放才刚刚30年,北京的涨势从90年代末开始的,到现在才持续了十几年。相对于中国庞大的人口基数和强劲的需求,中国的房间估计上涨势头要比日本强。
其次,日元的升值和末期的经济政策最终导致崩溃,人民币的升值压力现在也不小,但是现在升值幅度并不大,所以出口受阻,热钱流入现在应该不是很剧烈。
最重要的,对于经济发展还很不平衡的中国,年轻一代的城乡青年很向往大城市的生活,因此市场中,只要需求是刚性的,就不会有大的跌势。 Continue reading »

 

今天的会议日程比昨天轻松。五个报告。

  1. 台湾资讯研究院的游本中老师,未来编译研究的潜在领域展望。
  2. 江南所,关于精细编译调优的
  3. 计算所,关于并行的
  4. 上交 关于llvm的
  5. 武大 关于MCU编译器开发的

其中,游老师的演讲最为重量级,也对我们这些晚生最有指导意义。大牛就是大牛,在美国混了这么久,现在又是台湾某个研究所的所长,编译领域的了解可谓渊博,虽然还谦虚的说自己的讲义只是匆匆的准备,但是演讲的过程却功底颇厚。 Continue reading »

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量