并行编译技术及发展研究
‘壹’ 计算机专业分类
目前我国计算机专业主要分为三大类:计算机基础专业、与理工科交叉的计算机专业、与文科艺术类交叉的计算机专业。
1. 计算机基础专业
专业要求与就业方向:这些专业不但要求学生掌握计算机基本理论和应用开发技术,具有一定的理论基础,同时又要求学生具有较强的实际动手能力。学生毕业后能在企事业单位、政府部门从事计算机应用以及计算机网络系统的开发、维护等工作。
2. 与理工科交叉的计算机专业
与理工科交叉而衍生的计算机专业很多,如数学与应用数学专业、自动化专业、信息与计算科学专业、通信工程专业、电子信息工程专业、计算机应用与维护专业等。
1)数学与应用数学专业:
专业要求与就业方向:数学与应用数学是计算机专业的基础和上升的平台,是与计算机科学与技术联系最为紧密的专业之一。该专业就业面相对于计算机科学与技术专业来说宽得多,不但适用于IT 领域,也适用于数学领域。
2)自动化专业:
专业要求与就业方向:自动化专业是一个归并了多个自动控制领域专业的宽口径专业,要求学生掌握自动控制的基本理论,并立足信息系统和信息网络的控制这一新兴应用领域制定专业课程体系,是工业制造业的核心专业。自动化专业的毕业生具有很强的就业基础和优势。
3)信息与计算科学专业:
专业要求与就业方向:这是一个由信息科学、计算数学、运筹与控制科学等交叉渗透而形成的专业,就业面涉及到教学、商业、网络开发、软件设计等各个方面,就业率高达95%以上。
4)通信工程专业:
专业要求与就业方向:通信工程专业要求学生掌握通信基础理论和基本基础,掌握微波、无线电、多媒体等通信技术,以及电子和计算机技术,在信息时代有着极佳的就业优势。
5)电子信息工程专业:
专业要求与就业方向:电子信息工程专业是宽口径专业,主要培养信息技术、电子工程、网络系统集成等领域的高级IT 人才,毕业生可从事电子设备、信息系统和通信系统的研究、设计、制造、应用和开发工作。

(1)并行编译技术及发展研究扩展阅读:
毕业生主要面向交通系统各单位、交通信息化与电子政务建设与应用部门、各类计算机专业化公司、广告设计制作公司、汽车营销技术服务等从事IT行业工作。
WEB应用程序设计专业
毕业后能够从事网站应用程序开发、网站维护、网页制作、软件生产企业编码、软件测试、系统支持、软件销售、数据库管理与应用、非IT企事业单位信息化。
可视化程序设计专业
毕业后能够从事软件企业桌面应用开发、软件生产企业编码、软件测试、系统支持、软件销售、数据库管理与应用开发等工作。
数据库管理专业
毕业后能够从事企、事业单位数据库管理、软件开发、专业数据库应用设计与开发、数据库的应用与开发、信息管理系统开发、企、事业单位网络管理、软件销售等工作。
多媒体应用专业
毕业后能够从事计算机美工、动画制作、影视编辑与制作、广告设计与制作、多媒体综合应用开发、多媒体课件制作等工作。
移动应用开发专业
毕业后能够从事移动设备应用开发、嵌入式应用开发、移动网站开发、软件生产企业编码、软件测试、系统支持、软件销售、企、事业单位信息管理、办公自动化集成等工作。
电子政务软件专业
能够胜任基层政府部门、事业单位数字化政务管理系统的设计、维护与信息管理、办公自动化集成、办公室文员等工作。
软件测试专业
毕业后能够从事软件测试、软件编码、IT企事业单位系统支持、非IT企事业单位信息化软件销售等工作。
物流信息技术专业
毕业后能够胜任现代物流业信息管理,能在企事业单位从事物流系统设计、供应链管理、仓储管理以及运输等管理工作。
物流管理专业
毕业后能够胜任全省各级企事业单位物流系统设计、供应链管理、仓储管理以及运输等管理工作等工作。
网络系统管理专业
毕业后能够从事政府管理部门、经贸、金融、邮电、电子、学校、交通、社区以及应用计算机网络的有关行业,从事计算机网络系统的设计、维护、管理、从事网站开发与应用、网络安全管理、计算机软硬件调试、安装、计算机及网络产品营销等工作。
计算机游戏专业
毕业后能够从事网络游戏美术,网络游戏动漫设计,游戏概念/故事情节设计,网络游戏3D设计,网络游戏人物设计,网络游戏环境设计,网络游戏皮肤/纹理设计,网络游戏图形开发,网络游戏测试,网络游戏音频开发,游戏客户端开发,游戏服务器开发,游戏引擎开发,手机游戏策划,手机游戏开发,手机游戏程序开发,手机游戏美工,手机游戏测试等工作。
计算机图形/图像制作专业
毕业后能够从事广告企业平面的设计与制作、网络企业网页制作、企事业单位职员等工作。
目前,计算机专业在国内的高等院校中,以理工科的实力较强;以文科、综合性高等院校为补充,基本上每所高等院校都设有这样的专业;或者有这样的专业人才。
‘贰’ 臧斌宇的社会评价
被称为 “老大”的院长
——访复旦大学软件学院院长、博士生导师臧斌宇教授
开 篇
说出来你也许不相信,复旦大学软件学院里,上上下下都称年轻的臧斌宇院长为“老大”——一个颇具威慑力却又无比亲近的称呼。说起臧院长“老大”的由来,有段感人的故事。软件学院是复旦大学最年轻的学院之一,2001年开始筹备。在学院创建期间,各方面条件都比较艰苦——教职员工人手紧张,教学、实验、办公场地缺乏,资金也比较紧缺……唯一让人欣慰的是,一百多名来自电光源、化学、数学、物理、中文、国政等院系的新同学即将转入软件学院。一个学院有了学生,就有了一切。然而,他们来自多个院系,分散居住在学校的各个宿舍区,给同学之间的交流和学院工作的开展带来极大的不便。了解到这一问题之后,臧院长当机立断,向学校积极争取,以最快速度解决了学生寝室的集中问题,并亲自为那些同学安排转系转专业的调动手续。因为学生原专业不同,进入软院后,对新的学习生活有诸多不适应。
而臧院长不仅在学习上给与细心指导,还对他们的思想、生活付出了无微不至的关怀,经常与学生促膝谈心,帮助学生逐步适应新的学习环境。他像一位父亲,一位慈祥却不失严厉的“父亲”,把大山般、无私的爱毫无保留的给予软院的每个学生。在同学当中,“院长”并不存在,只有这样一个人:一个可以和学生一起吃几块钱盒饭的“伙伴”,一个在大家困难时能够给予足够支持的“朋友”,一个在彷徨犹豫时会对你循循善诱的“前辈”。对这样一个人,“老大”的称呼似乎再贴切不过,于是慢慢在学生之间传开,以至于有人问起“软件学院谁是院长”时,学生会莞尔一笑,“我们只有‘老大’”。“老大”是一种形象,也是一种精神,已深深植根在软院的师生心中。很多人认为,大学生活与中学不一样,学生与老师除了上课以外,平时师生之间接触的时间不多,更不要说是领导。但软院却迥然不同,师生一家人,没有上下级、领导与被领导的等级关系,只有“众志成城、团结一致”的信念。这,就是复旦软院人的精神。
这种精神的核心,就来自这位“老大”,或者说院长。臧斌宇院长是为响应党中央大力发展中国的软件产业的号召而从英特尔中国软件实验室回到复旦大学创办软件学院的。在学校的大力支持下,他在很短的时间内完成了软件学院的组建,并且对各项事务都身体力行,得到师生员工的一致认可。经过一年多的努力,目前学院已经拥有本科生400余人、软件工程硕士400余人,教职员工队伍超过30人,初具规模。“我没做什么的,大家一起的功劳。”谈到自己的工作成果,臧斌宇院长,一个计算机编译技术专家,一个不善言表的人,对自己的工作如此评价。
离家 回家 建家
1983年,臧斌宇从苏州第四中学以优异的成绩考入着名学府——复旦大学,专业是计算机科学,从此开始了他对信息技术孜孜不倦的追求。1990年硕士研究生毕业留校后,他一直从事教学和科研工作,并于1996年师从国内着名的并行计算处理专家朱传琪教授深入研究并行编译技术,1999年获得博士学位。随后,他于2001年晋升为复旦大学教授,2002年成为复旦大学博士生导师。十多年来,他在并行化编译、优化编译、动态优化编译等诸多领域都取得了突出成就:自行研制了并行化编译系统AFT(Automatic Fortran Transformer);与Minnesota大学合作研制了并行化编译系统开发平台Agassiz(目标语言为C、Fortran);并行化编译的科研成果在1996年获得国防科工委科技进步二等奖、上海市科技进步二等奖;在二进制动态翻译器研究领域获美国专利一项;在国际、国内权威刊物上发表论文数十篇;同时主持了众多科研计划,如“上海市启明星计划”、“Intel 大学合作计划”、“Philips大学合作计划”等等。除了科研方面取得的成就之外,臧教授还积极从事社会工作,担任中国共享软件联盟理事、中国计算机学会系统软件委员会委员等职务。这些丰富的科研、社会经历为他今日取得的辉煌业绩打下了坚实的基础。
“创办软件学院既是机遇,也是挑战”是臧院长开始他传奇故事的第一句话。软院创建的前前后后,臧院长经历了“离家——回家——建家”的曲折过程。从对学院教学体制改革的缘由谈起,臧院长用他简洁的语汇讲述了这段经历。1999年,他参加了当时所在的计算机系课程改革小组的工作,因此有机会接触到美国、加拿大等许多国家着名大学的计算机课程设置情况。他发现国外与国内在教学理念、教学方法、教学内容等方面存在着很大的差别。首先,国外课程体系比较完整,内容衔接合理。其次,学分制的实施也较为彻底。而在国内,课程体系不完整、教学内容有脱节的现象并不鲜见;而学分制的推进还仅处于初始阶段。这些原因使得国内的教学和人才培养水平与国外拉开了很大的差距,从某种程度上说,这也是中国软件业发展缓慢的原因之一。因此,在1999年的计算机系课程改革中,他特意引进了国外一些课程和教材,采用了国外计算机学科的部分教学体制,对2000级计算机系学生的课程体系做出了改革。但这次的教学改革力度并没有达到臧院长的预期要求,在他心中,始终期望能有一个更加自由的空间以实现他的教学理念。另外,人才培养的水平差距也体现在国内外科研水平的差距上,长期在高校工作的他,意识到科研体制的差异是产生这种差距的重要原因,但国外科研机构的体制究竟是什么样的,他并没有机会去深入了解。恰逢2000年8月,英特尔中国实验室有一个很重要的科研项目急需并行化编译方面的专家,于是对他发出了邀请。经过斟酌,他决定辞去计算机系的职务,去了解国外科研机构的运作机制。
于是,2000年,臧院长“离家”去了英特尔中国软件实验室。当时在他所工作的团队里,他是唯一一个“国产”的架构工程师,其余的都是外国人,这给他带来了充分施展才华和交流沟通的空间。在英特尔公司的一年,他深入了解了国外科研机构的现代化管理体制,深切感受到英特尔公司浓郁的企业文化。臧院长告诉我们,国外企业十分重视每个员工的职业发展规划,包括对一些技能的培训,以求最大限度地发挥每个员工的聪明才智,同时尽可能保证每位员工都可以在企业中找到自己的生存发展空间,员工就是企业文化的一部分。他印象最深的,就是“三大”与“三小”的差异:在英特尔等国外知名公司里,企业的人事、财务、总务等工作被称为“三小”,这些部门的宗旨就是服务,为技术、生产、销售等部门服务。相反,这些部门在国内很多企业中都变成“三大”,权大,官架大,派头大,没有或很少有服务理念。
在英特尔公司一年的工作经历使臧院长原有的改革信念更加坚定,改革想法更为成熟。但此时的他还没有想到实施变革的机会——被他笑称为“戏剧性转变”的时刻正悄悄来临。
2001年下半年,教育部、国家发展计划委员会下发《教育部、国家计委关于批准有关高等学校试办示范性软件学院的通知》,复旦大学获准试办国家示范性软件学院。新的学院需要新的领军人物,原信息学院的同事向王生洪校长推荐了臧院长。此时,他在英特尔公司已取得不少科研成果,所领导的项目小组成功完成多个课题任务,自己对公司也有了感情。但在和校领导的座谈中,听到校长谈到软件学院的办学方针、办学体制以及国际化办学的想法时,臧院长毅然决定放弃在英特尔公司的优厚待遇,欣然接受使命。明知创业之难,却“偏向虎山行”,“离家”一年,他又“回家”了,而且回的是一个尚处于构思之中的“家”。虽然此时的“家”几乎“家徒四壁”,但他却坚信,十多年的知识、经验积淀以及一年的跨国企业科研经历,一定可以把“家”建立起来。采访过程中,臧院长说过的一句话,“在这里(指Intel公司)做得再好,都是为别人做。现在国家需要培养人才,领导信任我,以后我就可以为咱们自家人做事情了。”
到2001年12月,软件学院开始筹建,臧院长正式走马上任。
招生 引才 育人
没有学生,学院无以为本,因此当务之急就是招生。按照教育部精神,可以从在校学生中招收转系转专业学生,于是臧院长立即组织人手开展招生宣传,从策划、设计到制作招生海报、宣传广告及宣传彩页一气呵成,并利用一切可以利用的方法和手段发布信息:举办讲座、张贴海报、散发传单、校园广播、架设网站、开设BBS专版等等,吸引了2000级各院系200多名学生前来报名。选拔考试安排在春节以后,根据成绩择优录取了107人。2000年3月18日,软件学院举行开学典礼,首届本科生开始上课,一所国家示范性软件学院开始了它的历程。接着,学院又于同年开展了面向2001、2002级本科的招生,成功完成了招生计划。9月,作为软件学院办学目标之一的国际合作办学也尘埃落定:和爱尔兰都柏林大学签署了软件人才联合培养计划,并招收了第一届联合培养学生。自此,学院的本科生培养体系基本完备。
成立软件学院的一个重要目标是培养具有国际竞争力的和创新能力的高层次的复合型软件人才,因此除了本科生教育,还需要面向国内、国际开展工学硕士、工程硕士的学历与学位教育。于是,招收软件工程硕士、工学硕士自然成为学院的一大任务。经过充分的筹备和宣传,2002年完成了两届工程硕士的招生。用臧院长的话来说,2002年是招生年,一年内先后招进5届学生,这在以前是从来没有过的。今年,首次从全国高中毕业生中按照填报志愿和高考成绩招收了130余名新生,标志着学院的招生工作走上了正规化的道路。
为了实现学院的办学目标,一支优秀的师资队伍是必不可少的。鉴于软件领域知识更新快、对人员素质要求高的特点,臧院长除了引进具有丰富教学和科研经验的中老年教师外,还大胆启用年轻教师,并给青年教师提供全方位发展的机会。学院的人事以“用人不疑,疑人不用”为原则,在保证教学质量的前提下,给每位教师充分的自由发挥空间。人才,始终是学院师资建设过程中关注的核心问题。在招聘教师的过程中,有这样一个故事:清华大学一位自控系毕业的博士,凭其博士论文的产业价值出任一家公司的CTO。当他闻知复旦大学软件学院的情况后,慕名前来应聘。经过了解和交谈,臧院长认为他是个难得的人才,因此竭尽所能诚邀博士加盟。这位博士希望继续他的科研,为此学院必须提供非常充分的条件,都得到臧院长的一一拍板。精诚所至,金石为开,这位博士最终辞掉了原来的职务,成为复旦软件学院的一员。他的妻子,一个同样从事IT业的出色女性,也和他一起落户复旦。难怪在最近一次联欢会上,这对博士夫妇发出感慨,“夫妻双双把家还,软院就是我们的家”。
一年多来,以相对稳定、合理流动、专兼结合为原则,学院从国内外着名高校和知名IT企业吸收了不少人才。臧院长高兴地告诉我们,目前,学院师资建设已初步建立起相对稳定的骨干层与出入有序的流动层相结合的教师队伍管理模式和教师资源配置与开发的有效体制,一支学术造诣高、学缘结构良好、教学和软件开发经验丰富的教师队伍正在逐步形成。
学生、师资已经有了规模,教学工作必须相应地提高水准。为此,臧院长在教学体制方面也付出了诸多心血。他着眼于软件的系统级应用和企业级应用,提出课程设置应以分布式、异构平台上的高端和低端开发为核心,加强程序设计、算法、数据结构、体系结构、工程管理等基础理论和基本技能训练,吸收欧美知名大学课程体制宽度和深度并重的优势,结合当前市场对人才的需求并把握产业发展的前瞻性,全面提高学生的分析设计能力和开发实践能力。整个课程体系的设计不拘泥于流行工具的教授,而是要注重基本理论的吸收和思维方式、学习能力的训练。除此之外,对于软件工程硕士而言,还要注重方法论的讲授、管理思想的提升,应以案例研究为核心,以软件开发过程为着力点,促使学生胜任系统分析与项目管理的职位。
在教学方面,臧院长告诉我们,学院强调大信息量的授课内容、大量的课外阅读材料和高强度的课后实习项目,培养学生掌握坚实的基础理论和宽广的专业知识,锻炼学生分析与解决问题的能力,进而形成较强的国际竞争力。同时,臧院长为提高教学质量,要求教师使用多媒体进行教学,并且建立了新教师试讲制度、学生评议制度、教学督察制度等,一种全新的教学管理体制已经浮出水面。
除此之外,现代化的科研管理体制和行政管理体制也在臧院长的主持下建立起来,整个学院的工作全面铺开。作为对一段时期工作的总结,今年7月,在杭州举行的全体教职员工的工作会议上,臧院长提出了学院未来发展的三句话方针:“学科建设为基础,工程硕士为重点,体制建设为保障”。
说完工作,臧院长又提到进入软院的第一批学生,说现在学院事情很多,没有更多的时间与学生在一起,还得找个时间补上,因为这是学院的传统:专业导师全面贴近学生,对学生的发展提供全方位的指导,让他们从软院毕业时能学到些实在的本领,树立健全的人格。院长带头对学生给予的关怀,从学生的成果中体现出了它的价值。今年第一届软院学生进入IBM、微创、惠普、戴尔、索尼、毕博、宝信、复旦金仕达等多家知名IT企业实习,其综合素质和工作能力都得到这些企业的认可,它们都对复旦的学生表示出极大的满意。这样的形势导致学生供不应求,例如IBM希望招聘40名实习生,但学院只能提供十多个,令公司意犹未尽。谈到这里,臧院长脸上显现出一丝欣慰,许久以来沉重的担子似乎可以稍稍放下,长期的四处奔波也已略见成效。
家庭 贤妻 爱子
宝剑锋从磨砺出,梅花香自苦寒来。臧院长多年的执着追求,让他获得了事业上的丰收,但这只是“幸福的一半”。他的“另一半幸福”系之于他那温馨和睦的家庭。臧院长爱人是学校物理系的博士,主要从事科研工作,而他们的儿子也已经7岁了。说起家来,臧院长脸上不禁流露出浓浓的爱意。他说,过去在并行所担任科研工作的时候,还可以享受到家庭的乐趣,基本上可以平衡工作科研与家庭的关系。自从任职软件学院以来,工作压力很大,事务繁多,在家的时间越来越少,可谓“日出而作,日落而息”。两个人工作一忙,孩子没人照顾,自己总是弄得“脏西西”的,夫妻俩索性就把孩子的小名叫做“臧兮兮”。对于妻子的理解与支持,臧院长只说了一句话,“她知道我这边脱不开身的”;提起儿子,父亲的脸上再次洋溢出幸福和兴奋。孩子小时候没人照顾,夫妻俩就给孩子书看。孩子这点倒像爸爸,看起书来全神贯注,安安静静的。在谈到平衡家庭与工作的关系时,臧院长还是那句话,“软件学院优先级最高,科研其次,最后为家庭。”但臧院长也说,只要有空,他一定会和家人一起度过。闲暇时,还会陪儿子看看书,识识字。
结 语
中国软件产业的发展水平与美国、印度、爱尔兰等国家相比还存在着一定的差距,国家在高校创办软件学院目的之一就是希望能通过人才培养促进中国软件产业的发展,提高整个国家的软件研发能力,让信息技术更好地为经济发展服务,并使软件产业成为新的国民经济增长点之一。复旦大学软件学院经过上下一致的努力,发展到如今的规模,已经起到了一个很好的示范作用。作为学院奠基人之一的臧斌宇院长也担当了一个领军人物的角色,功不可没。
在采访结束时,天色已晚,臧院长却打开了电脑,说还要处理完一些工作后再回家。我们深深祝愿,这位“老大”院长今后的人生之路更加灿烂,复旦大学软件学院在他的带领下,取得更加丰硕的办学成果。

‘叁’ 编译技术的发展历程
1954年至1957年间,IBM的John Backus带领一个小组开发FORTRAN语言及其编译器,使得上面的担忧不必要了。
但由于当时处理中所涉及到的大多数程序设计语言的翻译并不为人所掌握,所以这个项目的成功也伴随着巨大的辛劳。
几乎与此同时,人们也在开发着第一个编译器,Noam Chomsky开始自然语言结构的研究。使得编译器结构异常简单,甚至还带有了一些自动化。
Chomsky的研究导致了根据语言文法(grammar,结构规则)的难易程度以及识别它们所需的算法来为语言分类。文法有4个层次:0型、1型、2型和3型文法,且其中的每一个都是其前者的专门化。2型(或上下文无关文法context-free grammar)是程序设计语言中最有用的,代表着程序设计语言结构的标准方式。
人们接着又深化了生成有效的目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其误称为优化技术(optimization technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(code improvement technique)。
在70年代后期和80年代早期,大量的项目都关注于编译器其他部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

‘肆’ 编译器的发展史
编译器
编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般为高级语言(High-level language),如Pascal,C++等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。
一个现代编译器的主要工作流程如下:
源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)
目录 [隐藏]
1 工作原理
2 编译器种类
3 预处理器(preprocessor)
4 编译器前端(frontend)
5 编译器后端(backend)
6 编译语言与解释语言对比
7 历史
8 参见
工作原理
翻译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。
编译器种类
编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。
预处理器(preprocessor)
作用是通过代入预定义等程序段将源程序补充完整。
编译器前端(frontend)
前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a, =, b , +, c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。
编译器后端(backend)
编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。
一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。
编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。
常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的 变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等等。
上述的程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。 优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。
机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。
编译语言与解释语言对比
许多人将高级程序语言分为两类: 编译型语言 和 解释型语言 。然而,实际上,这些语言中的大多数既可用编译型实现也可用解释型实现,分类实际上反映的是那种语言常见的实现方式。(但是,某些解释型语言,很难用编译型实现。比如那些允许 在线代码更改 的解释型语言。)
历史
上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。现在它已是编译原理中的一个标准部分。
有限状态自动机(Finite Automaton)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。
人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。
当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最着名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。
在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。
编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。另一方面,尽管近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变,它现在正迅速地成为计算机科学课程中的中心环节。
在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。这些工具可用来编译所有的计算机程序语言。它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。
大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。
编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。
编译器工作方法
首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。
‘伍’ 毕业设计 我想阐述一下并行计算的发展
从20世纪40年代开始的现代计算机发展历程可以分为两个明显的发展时代:串行计算时代、并行计算时代。每一个计算时代都从体系结构发展开始,接着是系统软件(特别是编译器与操作系统)、应用软件,最后随着问题求解环境的发展而达到顶峰。
并行计算机是由一组处理单元组成的。这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。因此,并行计算机的两个最主要的组成部分是计算节点和节点间的通信与协作机制。并行计算机体系结构的发展也主要体现在计算节点性能的提高以及节点间通信技术的改进两方面。
节点性能不断进步
20世纪60年代初期,由于晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。这些技术发展的结果导致了并行计算机的出现。这一时期的并行计算机多是规模不大的共享存储多处理器系统,即所谓大型主机。IBM 360是这一时期的典型代表。
到了20世纪60年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了。与单纯提高时钟频率相比,这些并行特性在处理器内部的应用大大提高了并行计算机系统的性能。伊利诺依大学和Burroughs公司此时开始实施Illiac Ⅳ计划,研制一台64颗CPU的SIMD主机系统,它涉及到硬件技术、体系结构、I/O设备、操作系统、程序设计语言直至应用程序在内的众多研究课题。不过,当一台规模大大缩小的原型系统(仅使用了16颗CPU)终于在1975年面世时,整个计算机界已经发生了巨大变化。
首先是存储系统概念的革新,提出虚拟存储和缓存的思想。以IBM 360/85和IBM 360/91为例,两者是属于同一系列的两个机型,IBM 360/91的主频高于IBM 360/85,所选用的内存速度也较快,并且采用了动态调度的指令流水线。但是,IBM 360/85的整体性能却高于IBM 360/91,惟一的原因就是前者采用了缓存技术,而后者则没有。
其次是半导体存储器开始代替磁芯存储器。最初,半导体存储器只是在某些机器中被用作缓存,而CDC7600则率先全面采用这种体积更小、速度更快、可以直接寻址的半导体存储器,磁芯存储器从此退出了历史舞台。与此同时,集成电路也出现了,并迅速应用到计算机中。元器件技术的这两大革命性突破,使得Illiac Ⅳ的设计者们在底层硬件以及并行体系结构方面提出的种种改进都大为逊色。
处理器高速发展
1976年Cray-1问世以后,向量计算机从此牢牢地控制着整个高性能计算机市场15年。Cray-1对所使用的逻辑电路进行了精心的设计,采用了我们如今称为RISC的精简指令集,还引入了向量寄存器,以完成向量运算。这一系列技术手段的使用,使Cray-1的主频达到了80MHz。
微处理器随着机器的字长从4位、8位、16位一直增加到32位,其性能也随之显着提高。正是因为看到了微处理器的这种潜力,卡内基·梅隆大学开始在当时流行的DEC PDP-11小型计算机的基础上研制一台由16台PDP-11/40处理机通过交叉开关与16个共享存储器模块相连接而成的共享存储多处理器系统C.mmp。
从20世纪80年代开始,微处理器技术一直在高速前进。稍后又出现了非常适合于SMP方式的总线协议。而伯克利加州大学则对总线协议进行了扩展,提出了Cache一致性问题的处理方案。从此,C.mmp开创出的共享存储多处理器之路越走越宽。现在,这种体系结构已经基本上统治了服务器和桌面工作站市场。
通信机制稳步前进
同一时期,基于消息传递机制的并行计算机也开始不断涌现。20世纪80年代中期,加州理工学院成功地将64个i8086/i8087处理器通过超立方体互连结构连结起来。此后,便先后出现了Intel iPSC系列、INMOS Transputer系列,Intel Paragon以及IBM SP的前身Vulcan等基于消息传递机制的并行计算机。
20世纪80年代末到90年代初,共享存储器方式的大规模并行计算机又获得了新的发展。IBM将大量早期RISC微处理器通过蝶形互连网络连结起来。人们开始考虑如何才能在实现共享存储器缓存一致的同时,使系统具有一定的可扩展性。20世纪90年代初期,斯坦福大学提出了DASH计划,它通过维护一个保存有每一缓存块位置信息的目录结构来实现分布式共享存储器的缓存一致性。后来,IEEE在此基础上提出了缓存一致性协议的标准。
20世纪90年代至今,主要的几种体系结构开始走向融合。
属于数据并行类型的CM-5除大量采用商品化的微处理器以外,也允许用户层的程序传递一些简单的消息。
Cray T3D是一台NUMA结构的共享存储型并行计算机,但是它也提供了全局同步机制、消息队列机制,并采取了一些减少消息传递延迟的技术。
随着微处理器商品化、网络设备的发展以及MPI/PVM等并行编程标准的发布,集群架构的并行计算机出现开始。IBM SP2系列集群系统就是其中的典型代表。在这些系统中,各个节点采用的都是标准的商品化计算机,它们之间通过高速网络连接起来。
1.2 有限元并行计算的发展和现状
目前,在计算力学领域内,围绕着基于变分原理的有限元法
和基于边界积分方程的边界元法,以及基于现在问世的各种并行
计算机,逐渐形成了一个新的学科分支——有限元并行计算。它
是高效能的,使得许多现在应用串行计算机和串行算法不能解决
或求解不好的大型的、复杂的力学问题能得到满意的解答,故其
发展速度十分惊人。在国际上已经掀起了利用并行机进行工程分
析和研究的高潮。从1975到1995年的二十年间,有关有限元方法
和相应的数值并行计算的文章已发表1000余篇。
有限元并行计算正在向两个方向发展。一是对系统方程组实
施并行求解的各种算法。二是并行分析方法,包括有限元并行算
法和边界元并行算法,前者趋向成熟,而后者的研究较少。对这
一方面的研究,是为了挖掘有限元计算自身潜在的并行性,是有
限元并行计算的根本问题。
1.2.1国内
并行算法的设计和有效实现强烈地依赖于并行机的硬软件环
境。国内仅极少数单位拥有并行机,且机型杂乱,因此研究人员
少,起步晚,而且局限于特定的硬件环境。从有限元分析方法的
内容来看,发表的几十篇研究论文(报告)还未显示出较强的系
统性。
1)南京航空航天大学周树荃教授等在YH-1向量机上实现了刚度
矩阵计算、对称带状矩阵的Cholesky分解和线性方程组的求解等
并行处理。针对不规则结构工程分析问题,他们还采用了变带宽
存贮方法,并实现了刚度矩阵的并行计算以及求解变带宽稀疏线
性方程组的并行直接解法【20】。
2)中国科学院计算中心王荩贤研究员等在基于Transputer芯片
的分布式MIMD系统上,提出了有限元分析中变带宽线性方程组的
并行直接解法,初步完成了一个静力分析程序【21】。
3)重庆大学张汝清教授等借助于ELXSI-6400共享存贮器型MIMD
系统,先后开展了范围比较广泛的并行算法研究,主要成果有:
a)提出了静力分析中子结构解法的并行算法,以及动力分析中模
态综合子结构法的并行算法;
b)从波前法出发,发展了多波前并行算法以求解大型结构分析
问题;
c)从Jacobi块迭代法和加权残差法出发,导出了基于异步控制的
有限元方程并行解法和有限元并行迭代的基本格式;
d)利用图论中的着色理论,实现了刚度矩阵的并行计算;
e)实现了基于有色线剖分的SOR并行迭代解法;
f)实现了子空间迭代法、Lanczos法以及利用多项式割线迭代法
和矢量迭代法求解结构固有频率和模态的并行算法;
g)针对弹塑性分析,提出了一种多波前子结构并行算法;
h)针对弹性接触问题,提出了一种基于参数变分原理的并行解法;
i)实现了一步积分法的并行处理【22】。
4)南京航空航天大学乔新教授等借助于Transputer芯片的分布式
MIMD系统实现了有限元方程组的并行直接解法,并提出了基于子结
构的预处理共轭梯度法的并行计算方法【23】。
此外,浙江大学姚坚【24】、中国科学院西南计算中心马寅国、
东北工学院张铁以及国防科技大学六系也曾对有限元分析的并行计
算开展了一些研究。
上述研究结果表明,国内并行计算方法的研究,在硬件上基于
向量机、分布式并行机和共享存贮式并行机;在内容上,似乎面很
广,但系统性和深度还很不够,软件开发距实际应用和商品化还有
很大距离,对不依赖并行机具体环境的通用并行算法研究还很少,
同样对旨在进行结构有限元分析的并行计算的硬件研究也很少。
1.2.2国外
自从美国国家宇航局(NASA)的A.K.Noor于1975年发表第一篇
有限元并行计算的文章以来,有限元并行处理技术几乎与并行计算
机同步发展。距不完全统计,到1992年,国外已发表了400余篇这方
面的论文,其中后5年的文章篇数是前12年的总和。在研究内容上也
由过去的算法研究发展到了算法、软件和硬件相结合的研究,并针对
一些机型开发了一些实用的大型结构分析软件。
1)有限元机器FEM【25】(Finite Element Machine)。早在70年
代末,就有人发表了有关FEM的论文,1982年美国国家宇航局Langley
研究中心的O.O.Storaasli等撰文详细地介绍了该中心设计的供研究
用的FEM。该机器由1个处理器阵列、1台作为控制器的微机和1个并行
操作系统及一些模块化了的通用并行算法程序组成,用户使用系统的
文本编辑器和控制器的其它特殊功能,能建立有限元计算模型并进行
分析。10多年来,又有一些人在这一方面进行了不懈的努力,但FEM
的发展前景仍然不太令人乐观。
2)心动阵列并行机【26】。心动阵列并行机主要应用于信号和图象
的并行处理,但由于其高效的矩阵计算功能,近年来有人把它应用于
有限元分析,并作了一些有益的尝试。
3)巨型向量机【27】。在有限元分析中越来越显示出巨大的威力,
处于领先的是美国思维公司的CM-2。许多结构分析家把这个具有65536
个处理器的巨型向量机应用于有限元计算,如T.Belyschko等人采用显
式方法,完成了具有32768个单元的壳的非线性有限元计算,并行效率
极高,速度几乎比CRAY X-MP/14并行机高出1个数量级。
4)并行机网络和工作站网络【28】。日本东京大学矢川等借助高速网
络把3台CRAY Y-MP机联成网络进行有限元分析,有限元方程求解采用
的是基于区域分裂技术的共轭梯度法(CGM), 在求解三维弹性问题
时自由度个数超过了100万,系统平均运行速度高达1.74GFLOPS。另外,
他们还基于一个工程工作站网络,在并行环境下进行了类似的研究,
求解问题的自由度数高达20万个。
--
我左看右看前看后看可还是看不过来
这个....那个....我越看越奇怪....
不是我不明白,这世界变化快
‘陆’ 目前处理并行编译技术有哪几种方法
三种形式编辑
时间并行
时间并行指时间重叠,在并行性概念中引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。?
时间并行性概念的实现方式就是采用流水处理部件。这是一种非常经济而实用的并行技术,能保证计算机系统具有较高的性能价格比。目前的高性能微型机几乎无一例外地使用了流水技术。
空间并行
空间并行指资源重复,在并行性概念中引入空间因素,以“数量取胜”为原则来大幅度提高计算机的处理速度。大规模和超大规模集成电路的迅速发展为空间并行技术带来了巨大生机,因而成为实现并行处理的一个主要途径。空间并行技术主要体现在多处理器系统和多计算机系统。但是在单处理器系统中也得到了广泛应用。?
时间并行+空间并行
指时间重叠和资源重复的综合应用,既采用时间并行性又采用空间并行性。显然,第三种并行技术带来的高速效益是最好的。
‘柒’ 什么是计算机学科包括哪两个方面其核心概念有哪些
计算机学科即计算机科学与技术,是研究计算机的设计与制造和利用计算机进行信息获取、表示、存储、处理、控制等的理论、原则、方法和技术的学科。方法论是对计算机领域认识和实践过程中的一般方法及其性质特点、内在联系和变化规律进行系统研究的理论总结。
包括科学和技术2方面。计算机科学侧重于研究现象揭示规律。计算机技术则侧重于研制计算机和研究使用计算机进行处理的方法和技术手段。
计算机学科方法论是对计算机领域认识和实践过程中的一般方法及其性质特点、内在联系和变化规律进行系统研究的理论总结。据研究,其主要内容包括3个形态:
形态
3个形态:抽象过程、理论总结过程、设计过程。
计算机学科:计算机科学与技术属于工学门类里的一级学科,分为三个二级学科:计算机应用,计算机系统结构,计算机软件与理论,每个二级学科下面又分若干研究方向:
计算机应用
1. 人工智能;2. 智能控制机器人;3. 计算机视觉、语音及多媒体信息处理;4. 人工智能、多媒体技术;5. 计算机语言学、机器翻译及自然语言理解;6. 计算机图形学及可视化技术;7. 计算机及VLSI设计自动化。8. 大规模集成 电路与微电子系统计算机辅助设计、微电子学新工艺新器件和新结构集成电路及其物理基础等。9. 计算机网络技术及应用10. 信息安全技术及应用11. 数据库技术、数据仓库技术及应用;12. 并行计算13. 计算机科学理论14. 计算机应用支撑技术;15. 计算机在信息产业中的应用;16. 计算机在制造产业中的应用;17. 各个领域中计算机应用软件的开发技术;18. 计算机集成技术和分布式计算环境 ;19. 仿脑计算理论与仿脑计算机 ;20. 智能信息处理 ;21. 数据和知识管理;22. Web技术软件工程和环境。23. CIMS及其它先进制造技术24. 网络多媒体 25. 操作系统 26. 互联网络下的协同工作环境;27. 实与多媒体技术;28. 工程与过程工程;29. 互联网络体系结构;30. 信息安全技术;31. 容错计算技术;32. 计算机应用工程化;33. 虚拟环境方面;34. IPv6协议的中间件和软件应用;35. 实与多媒体技术;36. 微处理的开发应用研究:嵌入式设备(医疗设备(治癌仪、热疗仪等)、加密机(E1、DDN)等)的开发;研制类比推理部件(可作为独立的类比问题求解系统,也可以嵌入其它人工智能系统)。37. 远程教学;38. 多数据库系统集成技术研究;39. 以Intention形式化为核心的BDI建模;40. 以机器人足球为标准问题的MAS体系结构与合作规划;41. MAS中的策略协作学习;42. 基于多主体技术的Internet信息检索和用户建模43. 机器学习44. 计算智能:* 遗传算法的理论和应用;* 免疫模型与算法的基本原理及其应用;* 人工神经网络的理论和应用;* 网络智能信息检索与数据挖掘。45. 语言信息处理
计算机系统结构
1. 并行/分布处理及高性能计算机系统;2. 先进的计算机结果和网络计算;3. 系统的可重构和可扩展技术;4. 高性能存储系统及处理机同步通信机制;5. 并行编译技术;6. 并行调试技术;7. 并行与分布系统容错性、可用性、可靠性技术;8. 指令及并行处理(ILP)体系结果的理论与技术;9. 对称多处理器(SMP)并行体系结构的理论与技术;10. 机群并行处理体系结构、互连技术、程序设计环境以及计算密集型应用在机群系统中的实现;11. 超常指令字(VLIW)系统结构;12. 多线程机制;13. 并行处理技术;14. 并行算法及环境;15. 并行分布式算法;16. 各种并行与分布式软件、工具与环境;17. 分布式与多机系统新型计算机系统机构及语言;18. 计算机系统体系结构软件仿真环境构建方法研究;19. 当代主流并行机的体系结构模型、存储技术的研究;20. 高性能通信机制与策略的研究;21. 分布式资源管理、故障恢复、进程动态迁移、分布式存取控制技术22. 指令级并行关键技术研究;23. 格点计算模型及体系结构的研究;24. 工作站机群、网络和网格等环境下的并行分布式计算模型;25. 可视化并行程序设计环境;26. 大规模科学与工程计算;27. VLSI 系统机构及RISC技术;28. 芯片设计;29. 计算机支持的协同工作(CSCW)30. 嵌入式技术及其应用;31. 嵌入式系统整体设计方法、技术与应用研究;32. 嵌入式系统软硬件功能分配算法、软硬件协同验证、协同仿真方法研究;33. 嵌入式微处理器设计;34. 嵌入式操作系统;35. 计算网络及其应用;36. 高速互连网络;37. 网络计算环境下的知识处理、网络体系结构、网络管理;38. 多媒体信息在网络中的传输及处理;39. 高速计算机网络和网络服务质量;40. 网络互联、协议测试;41. 网络信息安全;42. 管理信息系统和网络信息检索;43. 新型高性能计算机系统及其软件技术;44. 计算机网络技术及应用;45. 智能卡技术;46. 信息安全与密码;47. 波分复用WDM全光网中的路由及波长分配算法的研究。
计算机软件与理论
1. 软件工程与方法;2. 数据库和知识工程;3. 计算机图形学与计算机辅助设计;4. 数据安全。5. 系统软件(操作系统、编辑系统、实时系统) ;6. 软件工程及环境;7. 分布对象计算;8. 并行及分布式处理;9. 语义理论及应用(自然语言、程序语言) ;10. 推理技术;11. 并行理论;12. 类型理论及应用;13. 计算语义学;14. CAD/CAM技术的理论研究、CAD/CAM系统的软件开发平台研制;15. 工程与科学计算方面,对数值模拟进行的多学科的应用研究;16. 计算机图形学与CAD;17. 群件与网络技术研究;18. 嵌入式数据库;19. 电子商务;20. 计算机网络及信息系统;21. 软件重建工程的理论与技术研究;22. 软件规格说明的形式方法与CASE工具研究。23. 形式化方法:形式语义、代数规范、范畴论、类型论和重写技术等的应用研究;24. 软件系统结构的研究; 25. 程序设计语言的设计于实现.26. 可计算性和计算复杂性;27. 各种高效实用的计算模型;28. 一般难解问题的高效实用算法;29. 面向应用的大尺度难解问题的工程实用算法;30. 工程算法集成和相应软件体系结构;31. 工程算法分析和评价体系等。
‘捌’ 编译原理的发展历程
在20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。开始时,这些程序都是用机器语言 (machine language )编写的。机器语言就是表示机器实际操作的数字代码,例如:
C7 06 0000 0002 表示在IBM PC 上使用的Intel 8x86处理器将数字2移至地址0 0 0 0 (16进制)的指令。
但编写这样的代码是十分费时和乏味的,这种代码形式很快就被汇编语言(assembly language )代替了。在汇编语言中,都是以符号形式给出指令和存储地址的。例如,汇编语言指令 MOV X,2 就与前面的机器指令等价(假设符号存储地址X是0 0 0 0 )。汇编程序(assembler )将汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。
汇编语言大大提高了编程的速度和准确度,人们至今仍在使用着它,在编码需要极快的速度和极高的简洁程度时尤为如此。但是,汇编语言也有许多缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。
发展编程技术的下一个重要步骤就是以一个更类似于数学定义或自然语言的简洁形式来编写程序的操作,它应与任何机器都无关,而且也可由一个程序翻译为可执行的代码。例如,前面的汇编语言代码可以写成一个简洁的与机器无关的形式 x = 2。
在1954年至1957年期间,IBM的John Backus带领的一个研究小组对FORTRAN语言及其编译器的开发,使得上面的担忧不必要了。但是,由于当时处理中所涉及到的大多数程序设计语言的翻译并不为人所掌握,所以这个项目的成功也伴随着巨大的辛劳。几乎与此同时,人们也在开发着第一个编译器, Noam Chomsky开始了他的自然语言结构的研究。他的发现最终使得编译器结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法(grammar ,指定其结构的规则)的难易程度以及识别它们所需的算法来为语言分类。正如现在所称的-与乔姆斯基分类结构(Chomsky hierarchy )一样-包括了文法的4个层次:0型、1型、2型和3型文法,且其中的每一个都是其前者的专门化。2型(或上下文无关文法(context-free grammar ))被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。
分析问题( parsing problem ,用于限定上下文无关语言的识别的有效算法)的研究是在20世纪60年代和70年代,它相当完善地解决了这一问题, 现在它已是编译理论的一个标准部分。它们与乔姆斯基的3型文法相对应。对它们的研究与乔姆斯基的研究几乎同时开始,并且引出了表示程序设计语言的单词(或称为记号)的符号方式。
人们接着又深化了生成有效的目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其误称为优化技术(optimization technique ),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(code improvement technique )。
这些程序最初被称为编译程序-编译器,但更确切地应称为分析程序生成器 (parser generator ),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最着名的是 Yacc (yet another compiler- compiler),它是由Steve Johnson在1975年为Unix系统编写的。
类似地,有穷自动机的研究也发展了另一种称为扫描程序生成器 (scanner generator )的工具,Lex (与Yacc同时,由Mike Lesk为Unix系统开发的)是这其中的佼佼者。在20世纪70年代后期和80年代早期,大量的项目都关注于编译器其他部分的生成自动化,这其中就包括代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。
编译器设计最近的发展包括:首先,编译器包括了更为复杂的算法的应用程序,它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言(可允许此类分析)的发展结合在一起。其中典型的有用于函数语言编译的Hindle y - Milner类型检查的统一算法。
其次,编译器已越来越成为基于窗口的交互开发环境(interactive development environment,IDE )的一部 分,它包括了编辑器、链接程序、调试程序以及项目管理程序。这样的IDE的标准并没有多少, 但是已沿着这一方向对标准的窗口环境进行开发了。

‘玖’ 并行处理的并行算法的基本策略
在并行处理技术中所使用的算法主要遵循三种策略:
1.分而治之法:也就是把多个任务分解到多个处理器或多个计算机中,然后再按照一定的拓扑结构来进行求解。
2.重新排序法:分别采用静态或动态的指令词度方式。
3.显式/隐式并行性结合:显式指的是并行语言通过编译形成并行程序,隐式指的是串行语言通过编译形成并行程序,显式/隐式并行性结合的关键就在于并行编译,而并行编译涉及到语句、程序段、进程以及各级程序的并行性。
二、并行性描述定义
利用计算机语言进行并行性描述的时候主要有三种方案:
1.语言扩展方案:也就是利用各种语言的库函数来进行并行性功能的扩展。
2.编译制导法:也称为智能编译,它是隐式并行策略的体现,主要是由并行编译系统进行程序表示、控制流的分析、相关分析、优化分析和并行化划分,由相关分析得到方法库管理方案,由优化分析得到知识库管理方案,由并行化划分得到程序重构,从而形成并行程序。
3.新的语言结构法:这是显式并行策略的体现。也就是建立一种全新的并行语言的体系,而这种并行语言通过编译就能直接形成并行程序。
三、并行软件
并行软件可分成并行系统软件和并行应用软件两大类,并行系统软件主要指并行编译系统和并行操作系统,并行应用软件主要指各种软件工具和应用软件包。在软件中所牵涉到的程序的并行性主要是指程序的相关性和网络互连两方面。
1.程序的相关性:程序的相关性主要分为数据相关、控制相关和资源相关三类。
数据相关说明的是语句之间的有序关系,主要有流相关、反相关、输出相关、I/O相关和求知相关等,这种关系在程序运行前就可以通过分析程序确定下来。数据相关是一种偏序关系,程序中并不是每一对语句的成员都是相关联的。可以通过分析程序的数据相关,把程序中一些不存在相关性的指令并行地执行,以提高程序运行的速度。
控制相关指的是语句执行次序在运行前不能确定的情况。它一般是由转移指令引起的,只有在程序执行到一定的语句时才能判断出语句的相关性。控制相关常使正在开发的并行性中止,为了开发更多的并行性,必须用编译技术克服控制相关。
而资源相关则与系统进行的工作无关,而与并行事件利用整数部件、浮点部件、寄存器和存储区等共享资源时发生的冲突有关。软件的并行性主要是由程序的控制相关和数据相关性决定的。在并行性开发时往往把程序划分成许多的程序段——颗粒。颗粒的规模也称为粒度,它是衡量软件进程所含计算量的尺度,一般用细、中、粗来描述。划分的粒度越细,各子系统间的通信时延也越低,并行性就越高,但系统开销也越大。因此,我们在进行程序组合优化的时候应该选择适当的粒度,并且把通讯时延尽可能放在程序段中进行,还可以通过软硬件适配和编译优化的手段来提高程序的并行度。
2.网络互连:将计算机子系统互连在一起或构造多处理机或多计算机时可使用静态或动态拓扑结构的网络。静态网络由点一点直接相连而成,这种连接方式在程序执行过程中不会改变,常用来实现集中式系统的子系统之间或分布式系统的多个计算结点之间的固定连接。动态网络是用开关通道实现的,它可动态地改变结构,使之与用户程序中的通信要求匹配。动态网络包括总线、交叉开关和多级网络,常用于共享存储型多处理机中。在网络上的消息传递主要通过寻径来实现。常见的寻径方式有存储转发寻径和虫蚀寻径等。在存储转发网络中以长度固定的包作为信息流的基本单位,每个结点有一个包缓冲区,包从源结点经过一系列中间结点到达目的结点。存储转发网络的时延与源和目的之间的距离(段数)成正比。而在新型的计算机系统中采用虫蚀寻径,把包进一步分成一些固定长度的片,与结点相连的硬件寻径器中有片缓冲区。消息从源传送到目的结点要经过一系列寻径器。同一个包中所有的片以流水方式顺序传送,不同的包可交替地传送,但不同包的片不能交叉,以免被送到错误的目的地。虫蚀寻径的时延几乎与源和目的之间的距离无关。在寻径中产生的死锁问题可以由虚拟通道来解决。虚拟通道是两个结点间的逻辑链,它由源结点的片缓冲区、结点间的物理通道以及接收结点的片缓冲区组成。物理通道由所有的虚拟通道分时地共享。虚拟通道虽然可以避免死锁,但可能会使每个请求可用的有效通道频宽降低。因此,在确定虚拟通道数目时,需要对网络吞吐量和通信时延折衷考虑。
四、硬件技术在硬件技术方面主要从处理机、存储器和流水线三个方面来实现并行。
1.处理机:主要的处理机系列包括CISC、RISC、超标量、VL1W、超流水线、向量以及符号处理机。
传统的处理机属于复杂指令系统计算(CISC)结构。指令系统大,指令格式可变,通用寄存器个数较少,基本上使用合一的指令与数据高速缓存,时钟频率较低,CPI较高,大多数利用ROM 实现微码控制CPU,而当今的精简指令系统计算(RISC)处理机指令格式简单规范,面向寄存器堆,采用重叠寄存器窗口技术,具有多级Cache,多种流水线结构,强调编译优化技术,时钟频率快,CPI低,大多数用硬连线控制CPU。
CISC或RISC标量处理机都可以采用超标量或向量结构来改善性能。标量处理机在每个周期内只发射一条指令并要求周期只完成从流水线来的一条指令。而在超标量处理机中,使用了多指令流水线,每个周期要发射多条指令并产生多个结果。由于希望程序中有许多的指令级并行性,因此超标量处理机更要依靠优化编译器去开发并行性。
VL1W 结构是将水平微码和超标量处理这两种普遍采用的概念结合起来产生的。典型的超长指令字VL1W 机器指令字长度有数百位。在VLlW 处理机中,多个功能部件是并发工作的,所有的功能部件共享使用公用大型寄存器堆,由功能部件同时执行的各种操作是用VL1W 指令来同步的,每条指令可指定多个操作。VL1W 指令译码比超标量指令容易,但在开发不同数量的并行性时总是需要不同的指令系统。VL1W 主要是开发标量操作之间的并行性,它的成功与否很大程度取决于代码压缩的效率,其结构和任何传统的通用处理机完全不兼容。即使同一结构的不同实现也不大可能做到彼此二进制兼容。VL1W 的主要优点在于它的硬件结构和指令系统简单,在科学应用领域可以发挥良好作用,但在一般应用场合可能并不很好用。
向量处理机对数组执行向量指令,每条指令都包含一串重复的操作。它是专门设计用来完成向量运算的协处理机,通常用于多流水线超级计算机中。向量处理机可以利用循环级展开所得的并行性,它可以附属于任何标量处理机。专用的向量流水线可以在循环控制中消除某些软件开销,它的效果与优化编译器将顺序代码向量化的性能很有关系。从理论上说,向量机可以具有和超标量处理机同样的性能,因此可以说向量机的并行性与超标量机相同。
符号处理机是为AI应用而研制的,已用于定理证明、模式识别、专家系统、知识工程、文本检索、科学以及机器智能等许多应用领域。在这些应用中,数据和知识表达式、原语操作、算法特性、存储器、I/0和通信以及专用的结构特性与数值计算是不一样的,符号处理机也称为逻辑程序设计语言处理机、表处理语言处理机或符号变换器。符号处理并不和数值数据打交道,它处理的是逻辑程序、符号表、对象、剧本、黑板、产生式系统、语义网络、框架以及人工神经网络等问题。这些操作需要专门的指令系统,通常不使用浮点操作。
2.存储器:存储设备按容量和存取时间从低到高可分为寄存器、高速缓存、主存储器、磁盘设备和磁带机五个层次。较低层存储设备与较高层的相比,存取速度较快、容量较小,每字节成本较高、带宽较宽、传输单位较小。
存放在存储器层次结构中的信息满足三个重要特性:包含性、一致性和局部性。所谓包含性,指的是一个信息字的复制品可以在比它高的所有层中找到,而如果在高层中丢失了一个信息,则在比它低的所有层中此信息也将丢失。CPU 和高速缓存之间的信息传送是按字进行的,高速缓存和主存储器间用块作为数据传送的基本单位,主存和磁盘之间又是以页面为基本单位来传送信息的,而在磁盘和磁带机之间的数据传送则是按文件级处理的。所谓一致性要求的是同一个信息项与后继存储器层次上的副本是一致的。也就是说,如果在高速缓存中的一个字被修改过,那么在所有更高层上该字的副本也必须立即或最后加以修改。为了尽量减少存储器层次结构的有效存取时间,通常把频繁使用的信息放在较低层次。维护存储器层次结构一致性一般有两种策略,一种是写直达策略,也就是如果,则立即在所有高层存储器中进行同样的修改;另一种是写回策略,也就是在较低层中对信息进行修改后并不立即在高层存储器中进行相应的修改,而是等到该信息将被替换或将从低层中消失时才在所有高层存储器中进行同样的修改。甚至可以将写直达和写回策略的优点结合起来,形成写一次协议来维护存储器的一致性。
存储器的层次结构是在一种程序行为——访问的局部性基础上开发出来的。主要有时间局部性、空间局部性和顺序局部性。时间局部性指的是最近的访问项很可能在不久的将来再次被访问。它往往会引起对最近使用区域的集中访问。空间局部性表示一种趋势,指的是一个进程访问的各项其地址彼此很近。顺序局部性指的是在典型程序中,除非是转移指令,一般指令都是顺序执行的。
在多处理机系统中一般使用共享存储器。对共享存储器的组织一般采用低位交叉、高位交叉、高低位交叉三种方法。低位交叉又称并发存取,它是把相邻的地址放在相邻的存储器模块中,在访问时不容易产生冲突,并行性较好,但可靠性容错能力和扩展性均较差。高位交叉又称允许同时存取,它是把相邻地址分配到同一个存储器模块中,可靠性、容错能力和扩展性均较强,但访问时易产生冲突,带宽较窄,并行性较差。高低位交叉存取又称C—s存取,它是结合了高位交叉和低位交叉两种方法的优点,既解决了冲突问题,又能有效地提高容错能力和并行性,最适合于向量处理机结构。
3.流水线:流水线技术主要有指令流水线技术和运算流水线技术两种。
指令流水线技术主要目的是要提高计算机的运行效率和吞吐率。它主要通过设置预取指令缓冲区、设置多功能部件、进行内部数据定向、采取适当的指令调度策略来实现。指令调度的策略主要有静态和动态两种,静态词度是基于软件的,主要由编译器完成,动态词度是基于硬件的,主要是通过硬件技术进行。
运算流水线主要有单功能流水线和多功能流水线两种。其中多功能流水线又可分为静态流水线和动态流水线。静态流水线技术只用来实现确定的功能,而动态流水线可以在不同时间重新组合,实现不同的功能,它除流线连接外,还允许前馈和反馈连接,因此也称为非线性流水线。这些前馈和反馈连接使得进入流水线的相继事件的词度变得很不简单。由于这些连接,流水线不一定从最后一段输出。根据不同的数据流动模式,人们可以用同一条流水线求得不同功能的值。
并行计算机发展简述
40 年代开始的现代计算机发展历程可以分为两个明显的发展时代:串行计算时代、并行计算时代。每一个计算时代都从体系结构发展开始,接着是系统软件(特别是编译器与操作系统)、应用软件,最后随着问题求解环境的发展而达到顶峰。创建和使用并行计算机的主要原因是因为并行计算机是解决单处理器速度瓶颈的最好方法之一。
并行计算机是由一组处理单元组成的,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。因此,并行计算机的两个最主要的组成部分是计算节点和节点间的通信与协作机制。并行计算机体系结构的发展也主要体现在计算节点性能的提高以及节点间通信技术的改进两方面。
60 年代初期,由于晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。这些技术发展的结果导致了并行计算机的出现,这一时期的并行计算机多是规模不大的共享存储多处理器系统,即所谓大型主机(Mainframe)。IBM360 是这一时期的典型代表。
到了60 年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了。与单纯提高时钟频率相比,这些并行特性在处理器内部的应用大大提高了并行计算机系统的性能。伊利诺依大学和Burroughs 公司此时开始实施IlliacIV 计划,研制一台64 个CPU 的SIMD 主机系统,它涉及到硬件技术、体系结构、I/O 设备、操作系统、程序设计语言直至应用程序在内的众多研究课题。不过,当一台规模大大缩小了的16CPU 系统终于在1975 年面世时,整个计算机界已经发生了巨大变化。
首先是存储系统概念的革新,提出虚拟存储和缓存的思想。IBM360/85 系统与360/91是属于同一系列的两个机型,360/91 的主频高于360/85,所选用的内存速度也较快,并且采用了动态调度的指令流水线;但是,360/85 的整体性能却高于360/91,唯一的原因就是前者采用了缓存技术,而后者则没有。
其次是半导体存储器开始代替磁芯存储器。最初,半导体存储器只是在某些机器被用作缓存,而CDC7600 则率先全面采用这种体积更小、速度更快、可以直接寻址的半导体存储器,磁芯存储器从此退出了历史舞台。与此同时,集成电路也出现了,并迅速应用到了计算机中。元器件技术的这两大革命性突破,使得IlliacIV 的设计者们在底层硬件以及并行体系结构方面提出的种种改进都大为逊色。
1976 年CRAY-1 问世以后,向量计算机从此牢牢地控制着整个高性能计算机市场15 年。CRAY-1 对所使用的逻辑电路进行了精心的设计,采用了我们如今称为RISC 的精简指令集,还引入了向量寄存器,以完成向量运算。这一系列全新技术手段的使用,使CRAY-1 的主频达到了80MHz。
微处理器随着机器的字长从4 位、8 位、16 位一直增加到32 位,其性能也随之显着提高。正是因为看到了微处理器的这种潜力,卡内基- 梅隆大学开始在当时流行的DECPDP11 小型计算机的基础上研制成功一台由16 个PDP11/40 处理机通过交叉开关与16 个共享存储器模块相连接而成的共享存储多处理器系统C.mmp。
从80 年代开始,微处理器技术一直在高速前进。稍后又出现了非常适合于SMP 方式的总线协议,而伯克利加州大学则对总线协议进行了扩展,提出了Cache 一致性问题的处理方案。从此,C.mmp 开创出的共享存储多处理器之路越走越宽;现在,这种体系结构已经基本上统治了服务器和桌面工作站市场。
同一时期,基于消息传递机制的并行计算机也开始不断涌现。80 年代中期,加州理工成功地将64 个i8086/i8087 处理器通过超立方体互连结构连结起来。此后,便先后出现了Intel iPSC 系列、INMOS Transputer 系列,Intel Paragon 以及IBM SP 的前身Vulcan 等基于消息传递机制的并行计算机。
80 年代末到90 年代初,共享存储器方式的大规模并行计算机又获得了新的发展。IBM将大量早期RISC 微处理器通过蝶形互连网络连结起来。人们开始考虑如何才能在实现共享存储器缓存一致的同时,使系统具有一定的可扩展性(Scalability)。90 年代初期,斯坦福大学提出了DASH 计划,它通过维护一个保存有每一缓存块位置信息的目录结构来实现分布式共享存储器的缓存一致性。后来,IEEE 在此基础上提出了缓存一致性协议的标准。
90 年代以来,主要的几种体系结构开始走向融合。属于数据并行类型的CM-5 除大量采用商品化的微处理器以外,也允许用户层的程序传递一些简单的消息;CRAY T3D是一台NUMA 结构的共享存储型并行计算机,但是它也提供了全局同步机制、消息队列机制,并采取了一些减少消息传递延迟的技术。
随着商品化微处理器、网络设备的发展,以及MPI/PVM 等并行编程标准的发布,机群架构的并行计算机出现。IBM SP2 系列机群系统就是其中的典型代表。在这些系统中,各个节点采用的都是标准的商品化计算机,它们之间通过高速网络连接起来。
今天,越来越多的并行计算机系统采用商品化的微处理器加上商品化的互连网络构造,这种分布存储的并行计算机系统称为机群。国内几乎所有的高性能计算机厂商都生产这种具有极高性能价格比的高性能计算机,并行计算机就进入了一个新的时代,并行计算的应用达到了前所未有的广度和深度。
并行计算机随着微处理芯片的发展,已经进入了一个新时代。目前并行计算机的性能已经突破20PFLOPS,正在向百亿亿次发展。我国并行计算机的研制已经走在世界前列。2003年由联想公司生产的深腾6800 在2003 年11 月世界TOP500 排名中位列第14 名,2004 年曙光公司生产的曙光4000A 在2004 年6 月的世界TOP500 排名中位列第10 名,这是我国公开发布的高性能计算机在世界TOP500 中首次进入前十名,这标志着我国在并行计算机系统的研制和生产中已经赶上了国际先进水平,为提高我国的科学研究水平奠定了物质基础。2013年国际超级计算机大会最新发布的世界超级计算机500强排名中,国防科技大学研制的天河二号超级计算机系统,以峰值计算速度每秒5.49亿亿次、持续计算速度每秒3.39亿亿次双精度浮点运算的优异性能位居榜首。
从TOP500 的前10 名来看,美国仍然是超级计算机的最大拥有者。按照世界TOP500 的统计数据来分析,美国在计算能力上占有近全世界的一半,在TOP500 中的所有计算机中拥有的数量超过50%。

‘拾’ 如何评价复旦大学并行处理研究所
其主要研究方向有:并行编译系统aft、并行程序设计环境parapie、并行算法及并行分布式系统的性能评估和监测等。近年来,其主要的科研成果有:“并行化编译关键技术的研究与开发”、“大规模并行处理中关键技术—并行程序开发的研究”、“并行及分布式计算机监测系统”等,这些成果均达到了当前国际先进水平。
