计算机后端开发范例6篇

前言:中文期刊网精心挑选了计算机后端开发范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。

计算机后端开发

计算机后端开发范文1

关键词:RTL中间语言; 指令模板; 机器描述MD; 后端移植

中图分类号:TN91934; TP314文献标识码:A文章编号:1004373X(2012)06003904

GCC compiler rearend porting technology

L Pengwei, YUAN Chengjun, HE Li

(Xi’an Microelectronics Technology Institute, Xi’an 710054, China)

Abstract: Proceeding from the GCC compiler system structure, the separation of GCC frontend and rearend structures is put forwards to suit the transplantation to different hardware platforms. The key technology of GCC rearend porting is analyzed. The details and functions of these documents needed by the rearend porting are presented. The intermediate language grammar structure of RTL and typical instruction template structure of RTL instructions are provided. Finally, an example of the GCC transplanted to a new hardware system structure were tested. The results show that GCC rearend porting to the specific hardware system structure is practicable, which can produce the correct assembly language code.

Keywords: RTL intermediate language; instruction template; MD; GCC rearend porting

收稿日期:201109130引言

近年来,嵌入式计算机系统被广泛应用于军事及空间领域的各种控制及智能系统中。在这些系统中,嵌入式计算机是系统的核心和智能部件。随着集成电路技术的发展,开始设计生产具有自主产权的专用芯片,并越来越多的将其应用于航空航天等相应嵌入式计算机系统中。同时嵌入式计算机应用的不断发展给计算机技术的各个方面提出了新的要求和挑战。嵌入式系统的开发特征对开发工具提出了特殊的要求。它对于代码大小,代码性能,以及可配置性的苛刻要求,使得在桌面以及服务器端开发中表现良好的编译系统往往不能胜任。这需要为其开发专用的高级语言编译器,但是开发一个完全自主化的编译器往往需要很长时间,并不是一个可取的方案,所以把目光转向可变目标编译器[1]。可变目标编译器能够针对不同的目标机器生成代码。编译器中与机器有关的部分被独立成模块,针对不同的目标机器,这些模块可以方便的进行替换。GCC就是是可变目标编译器,作为开源编译器,它源码丰富,文档详尽,是一个支持多种高级语言和多机器平台的系统,高度优化和可移植性能是该编译系统最为突出的2大特点。本文将详细介绍GCC移植相关的技术。

1GCC体系结构

GCC(GNU Complier Collection)是一个成功的支持多种高级语言和多种机器平台的系统。GCC体系结构(如图1所示)可以划分为2部分:与语言相关,目标机器无关的前端和与语言无关,目标机器相关的后端

图1GCC体系结构它是一个典型的语法制导的优化编译器[23],前端通过词法分析,语法分析,语义分析,生成语法树,对语法树简单优化之后,将其转化为中间代码。后端接受前端产生的语法树,将其转换为中间语言的表现形式,在此基础上进行各种优化,然后根据目标机的机器描述生成汇编程序代码[4]。

GCC要实现支持多平台编译,必须解决3个根本问题:需要设计一种较好的中间语言,在适当的层次上,向上能支撑多种语言的映射,向下能够适合多平台转换并且适合于各种优化;需要设计一种对目标机恰当的机器描述;在机器描述与编译主体之间需要仔细的设计一种统一接口。将GCC移植到一个新的硬件系统时,上述3个问题的解决是致关重要的。由于GCC前端与语言相关[5],已经很成熟稳定,能够支持当今流行的大部分高级语言,如C/C++,Java,Fortran,Ada 等,所以不对前端做过多介绍,着重介绍后端技术。

2RTL中间语言

RTL(Register Transfer Language)[6]是一种以一种虚拟寄存器(Pseudo register)的方式来叙述计算机行为的语言。RTL有5种对象:表达式,整数,宽整数,字符串和向量。其中最重要的是表达式RTX(RTL Expression)。RTX类似于C的结构体,通常用指针来引用它,指针类型定义名为rtx。每个RTX都具有统一的内部数据结构与外部语法。本文只涉及RTX的外部语法,即RTX表达式的文本形式的语法,其一般形式为:(code: m opn1 opn2 ……),

code:RTX操作码。该操作码指明RTX表示的操作类型,如表示一条指令时进行某种说明。此外,code还确定RTX的操作数个数和这些操作数的种类。

m:机器模式。表示数据和运行结果的类型,它反映了数据类型与字长两部分信息。数据类型分为整型,浮点型和复型3种。机器字长则分为8位,16位,32位,64位等。这两部分信息组合所构成的机器方式反映了机器能表示的各种数据类型。

opn:操作数。各个RTX表达式的操作个数以及操作数的种类是各不相同的,这取决于RTX操作码。以下是一个实际的RTX表达式例子,

(insn 7 6 0 (set (mem:SI (plus:SI (reg:SI 54 virtualstackvars)

(const_int 12 [0xfffffff4])) [0 a+0 S4 A32])

(const_int 3 [0x3])) 1 (nil))

操作码“insn”指出这是一条表示指令的RTX,前3个操作数均为整常数,分别表示本条指令编号,前一条指令编号和后一条指令编号,构成前向链和后向链(如图2所示)。其对应的树结构(如图3所示)。

3GCC后端技术

GCC后端对于目标机器的支持全部体现在后端描述中,将GCC移植到一个新的硬件系统时,要对新系统的处理器架构要进行详细的描述,使GCC的后端支持新的处理器架构。本节重点介绍后端描述的结构以后端描述的自动处理。

图2insn对象的双向链表图3RTX表达式及其对应的树结构3.1GCC后端描述

GCC对于后端的描述主要有3个文件[7],一个是C语言宏文件,一个C源文件,一个用RTL表达式写成的机器描述文件MD。将GCC移植到一个新的硬件系统时,要对新系统的处理器架构要进行详细的描述,使GCC的后端支持新的处理器架构。具体的描述文件就是上述3个文件:C的宏文件,C文件和机器描述文件MD,分别为target.h,target.c和target.md,target是需要移植的目标机器的代号。下面分别介绍3种文件。

3.1.1C的宏文件

C的宏是用来描述机器和ABI的属性。一般分成以下几类:

(1)控制GCC驱动程序选项,目标机器的特定命令行选项。这些宏定义告诉编译驱动程序以何种形式的命令行参数运行诸如预处理,编译,汇编,连接等处理步骤,在运行这些处理步骤中可能需要的查询路径名以及是否需要运行某一些特殊的处理步骤等。

(2) 存储布局:要涉及基本的数据类型的大小,对齐约定;

(3) 应用二进制编程接口(ABI),如何调用函数;

(4) 目标机器的寄存器使用,包括类型,基本特征,寄存器分配的顺序,用于构造堆栈的寄存器指令等等;

(5) 寻址模式,描述目标机器不同的寻址模式;

(6) 汇编文件输出框架格式约定,指定汇编程序的初试数据段,正文段,一般数据段等等的格式要求,定义汇编输出函数的函数名;

(7) 调试信息输出约定,指定系统支持的调试文件格式。

这些参数,其中很多不是参数核集的元素,有缺省的处理方式,但要具体地描述一个特定平台,须对它们作正确而有效的定义。它们是绝大多数平台至少提供的内容,只能描述出平台最基本的功能。

3.1.2C源文件

target.h中定义的宏都是生成代码,这给调试增加了一定的难度和复杂度,所以在target.c文件中增加一个同名函数(但是为小写字母)。例如,在target.h文件中,定义了这样一个宏:

#define PREFERRED_RELOAD_CLASS(X,CLASS)preferred_reload_class (X, CLASS)

为了让其可用,并保证程序的可读性,引入了target_protos.h文件,在target_protos.h中,声明了同名函数:

extern enum reg_class preferred_reload_class(rtx, enum reg_class)

并且在target.c文件中具体定义了此函数。这是一个约定,在配置的时候,配置程序会做处理。由此,可以调试这个函数,而不必在众多的文件中增加宏定义。

3.1.3机器描述MD

机器描述MD中用RTL语言描述的指令模板是核心内容。MD文件是目标机指令集的一个形式化的说明文件,它针对GCC中的各种操作模式,描述了指定目标机支持的操作和实现情况,而并非目标指令集的简单汇集。编译系统根据由机器描述MD生成的数据结构和函数定义集合,进行中间代码的生成以及中间代码到汇编代码的映射。这些“标准指令”是从各种目标机的指令集中抽象出来的,但同时它又能表达GCC中的各种基本操作。,下面是指令模板的一般结构[8]:

(define_patterntype "(optional)patternname"

[RTLtempalte]

"optional paternalcondition"

"outputtemplate"

(optinally:[attributesetting])

)

简单介绍以下各个参数的含义:

(1)patterntype 有2种类型,insn是用于定义指令样板的RTX表达式中最核心的一种类型,既可作为生成模板,又可作为匹配模板;expand是模板的扩充定义,仅在操作与标准名称模板相关时使用。

(2) patternname 指令模板名,一个模板可以为GCC规定的标准指令名,或者开发者任意给定的名字,也可以空字符串,但是模板名必须惟一。

(3) RTLtempalte一个复杂操作的集合,为一不完全的RTX表达式或向量,称为RTL模板。它表示指令模板的RTL指令体,只规定了RTL指令体中的各种操作以及操作数的位置和操作数必须满足的条件和限制,并未指明具体的操作数。

(4) optional paternalcondition 为一字符串,称为条件。这个字符串或者为空,或者为一个C语言条件表达式。当非空时,它指出此模板有效的条件。

(5) outputtemplate 为一字符串,称为输出模板。输出模板用来确定与此模板相匹配的RTL指令的汇编输出形式。

(6) attributesetting 它为一任选的RTX向量,称为指令属性。当此操作数出现时,它给出与这一模板相匹配的指令属性。

下面是mips.md中的一条单浮点加法指令模板:

(define_insn "addsf3"

[(set(match_operand:SF 0 "register_operand" "=f")

(plus:SF(match_operand:SF 1 "register_operand"

"f") (match_operand:SF 2 "register_operand" "f")))]

"TARGET_HARD_FLOAT"

"add.s\t%0,%1,%2"

[(set_attr "type""fadd")

(set_attr "mode""SF")])

这是一条单浮点加法指令的指令模板[9],分别对应指令模板结构的各个参数的含义。从这个指令模板,可以看出这条指令的模板类型patterntype是insn;模板名patternnames是"addsf3",这是指令名,从指令名可以看出这是一条单浮点加法指令;这条指令有3个操作数,RTL模板规定了3个操作数的各种操作和位置以及必须满足的条件和限制条件,"set" ,"mem","plus"分别表示赋值,存储器引用和加法运算,它们的操作数均为rtx表达式;指令模板是否有效的条件是"TARGET_HARD_FLOAT";汇编输出模板是"add.s\t%0,%1,%2",输出的汇编代码形式就如输出模板所示;最后是指令属性,表明这是浮点加法指令,指令的模式为SF,是单浮点模式。

3.2GCC后端处理

机器描述文件MD建立抽象机标准指令、中间语言RTL、目标机汇编模板三者之间的联系,它是一个正文文件,如果编译过程中为构造或匹配RTL去搜寻这样一种文件,将会机器缓慢。为此GCC编译内部设计了专门的函数和数据结构作为编译主体与机器描述之间的接口,编译主体通过这些函数和数据结构获得MD的内容。在编译器的构造期间,利用GCC提供的一套独立的,专用的机器描述处理程序,将正文形式的MD转换成含有接口所需的数据结构与函数的C源程序。gen*正是完成这一工作的一套转换程序[10],对机器描述文件进行处理(如图4所示),生成一组C文件,或者头文件,生成的这些文件以及手工定义的target.c和target.h结合起来就是GCC的机器相关部分。

图4后端处理流程gen*是指一套11个C程序,它们针对不同的编译处理目的分析MD,生成相应一套接口程序包含11个C文件insn*.c,或者insn*.h。由gen*生成的这套接口程序分别作用于RTL的优化,机器相关的优化,汇编代码输出等过程。其中,insn*.h含有编译主体和insn*.c涉及到的宏名定义,数据类型定义以及外说明,它们作为头文件被包含于相关的源文件中。GCC通过使用生成的RTL代码片段对机器描述MD文件中的指令模板进行匹配。insnrecog.c中的函数recog()是依据MD中的指令样板生成的RTL指令匹配函数。给定一条RTL指令,该函数判断它是否与MD中的某条指令样板相匹配,若匹配则返回该样板的编号,否则返回1。对每一个RTL片段来说,都要从MD文件头开始扫描,逐个匹配直到找到一个insn定义的寄存器行为和RTL片段完全相同,输出相应的汇编代码。

4实例验证

将GCC移植到了自己开发的DSP芯片LSDSP上。首先要详细编写的目标机器后端描述文件[11] ,LSDSP.md,LSDSP.c和LSDSP.h,然后放在GCC源码包中相应的位置,通过配置源码中的configure脚本(具体参照GCC使用手册),经过编译后得到目标机编译环境。简单加法程序的测试结果(如图5所示)。

从测试结果可以看出,移植后的GCC可以支持新的硬件体系结构,能够产生符合标准的汇编代码。

5结语

GCC是支持多语言、多目标机编译系统中最有代表性的一个。虽然随着嵌入式应用的升温,优化的交叉编译系统正在得到越来越多的关注,但它还是一个比较新的课题,能参考的文献和技术资料非常有限,很多工作都是靠阅读大量的源代码完成的。现在对专用芯片移植编译器的技术已经有所了解,要想得到高效的优化的交叉编译环境,还有大量工作要做。

图5测试结果参考文献

[1]FRASER C W,HANSON D R.可变目标C编译器:设计与实现[M].王挺,黄春,译.北京:电子工业出版社,2005.

[2]MUCHNICK S S.高级编译器设计与实现[M].赵克佳,沈志宇,译.北京,机械工业出版社,2005.

[3]陈火旺,刘春林,赵克佳,等.程序设计语言编译原理[M].3版.北京:国防工业出版社,2009.

[4]刘坚.编译原理基础[M].西安:西安电子科技大学出版社,2002.

[5]金龙飞,刘磊.通用克扩展编译器前端生成器的设计与实现[J].吉林大学学报:理学版,2005(9):2527.

[6]杨川龙.基于GCC的嵌入式系统编译器的研究与开发[D].哈尔滨:哈尔滨工程大学,2006.

[7]PARTHEY Jan. Porting the GCCBackend to a VLIWarchitecture \[D\]. Chemnitz, Germany: Chemnitz University of Technology, 2004.

[8]汤睿.基于GCC的DSP芯片编译器的研究与开发[D].重庆:重庆邮电大学,2007.

[9]STALLMAN R M. MA 021111307 using the GNU compiler collection \[S\]. Boston, USA: GNU Press, 2004.

计算机后端开发范文2

关键词:自动化控制;SCADA;网络视频监视

中图分类号:TN830文献标识码: A

0 前言随着城市人口的增多,工业生产的飞速发展,城市供水的取水、净化、调配等一系列的处理手段也发生了质的变化。由过去传统的人工操作、经验判断,发展到如今利用计算机、检测仪表进行数据分析、自动化控制及应用知识工程来实现高质量供水工艺控制及水的生产供配、管理。

可视化供水调度系统以计算机技术为核心对供水工程进行虚拟实时可视化与现实实时可视化管理,达到保护水资源,提高水质,合理调配用水量;降低制水单耗,节约能耗,提高水费回收率;保障供水安全,消除隐患;减轻劳动强度,提高工作效率和效益的目的。

1 本套系统主要包含SCADA系统和网络视频监控系统。

1.1系统介绍

1.1.1 SCADA系统

SCADA系统(Supervisory Control and Date Acquisition实时控制与数据采集)主要是利用现代化的自动控制技术、计算机技术、数据传输技术、网络技术实现了供水过程的虚拟化可视管理。

SCADA系统是一个综合学科系统,主要包含前端采集过程、中间传输过程、后端存储与处理过程。

1.1.2前端采集过程就是靠协议把各个变送器集合起来来实现对前端压力、流量、COD、浊度等参数的采集。目前比较流行的协议有MODBUS协议、ASCII协议、十六进制LC-01协议。该系统采用的是MODBUS协议。

市场上针对各参数的变送器、传感器的输出形式目前主要有232输出、485输出、4-20ma输出、0-10v输出。因此必须根据DTU的要求,把所有的参数转化为统一的数据传输方式,一般选择为485方式。

因此,前端采集过程可以概括为:各传感器(变送器)采集各个变量经过采集模块或者变换模块将变量转换为统一格式输送到DTU。

1.1.3中间传输过程的核心是DTU (Data Transfer unit数据传输单元)。中间传输过程的要点就是一个传输途径的选择过程。传输途径必须根据项目的实际情况来选择GPRS、ADSL网络、无线数据电台。几种方式的对比如下:

该系统中由于几个水厂比较偏远,运营商INTERNET网络不能覆盖,故选用GPRS传输方式。

1.1.4后端存储与处理过程的核心是组态软件。目前国内比较流行的组态软件有组态王、MCGS、三维力控、世纪星等。能通过二次开发实现对整个过程的虚拟可视、数据报表的生成、数据的存储、自动控制、报警、决策等功能。

1.2网络视频监控系统

网络视频监控系统在安保行业应用比较多,但是与供水调度系统结合应用还是比较少的。

由于故障不可避免,虚拟可视化需要现实可视化的有益补充与协调。二者可以互为因果、互为溯源、互为补充。

同样网络视频监控系统也可以分为前端系统、传输系统、后端系统三部分。

1.2.1前端系统主要是摄像机和网络录像机(或网络视频服务器)。摄像机可以根据现场的情况选择低照度一体机、红外摄像机、低照度枪机。一般来说,取水点采用红外固定枪机、水厂院内选择低照度一体机、室内选择低照度枪机。网络录像机是整个系统的核心,该系统采用网络录像机而不是视频服务器,网络录像机最大的优点是前端带存储功能,能形成分布式存储,即使网络出现故障,仍能够独自形成一套子系统来存储数据,不至于造成数据的丢失;再者无需时时占用网络,只有需要调取录像、预览图像时才进行网络路径传输。

1.2.2传输系统由于视频的数据量大,所以一般需要选择运营商internet网络作为传输路径。当然随着3G的发展以及费用的降低,以后也是不错的选择。

1.2.3后端系统该系统也是一个存储与显示的过程。系统采用的是海康5.02版集中管理软件,显示系统采用2块100寸背投拼接。

调度室布局图

3系统总结

3.1供水调度是一项综合课题,在系统总体设计时,除考虑实现供水安全和水质质量的重要目的外,还必须考虑到操作者的需要和供水服务的联系性要求,以及系统持久性与公司未来发展规划一致性问题。

3.2本系统公司技术人员共同参与了设计、开发、安装、调试,有利于日后的运营管理和维护,完全符合水厂的运营状况,并且降低了建设成本。

3.3必须建立相应的维护班组,该班组应能熟练掌握所有设备的软件维修和硬件所需的技术知识。齐全的设备配件,可以使维修组尽快完成维修工作,使设备停机时间缩至最短。

可视化调度系统投入使用后,系统维护方便,功能齐全,运行可靠,成本较低,性价比高。由此可见,现代化水厂控制系统的监、控、管一体化是水厂现代化发展的必然趋势。

参考文献: [1] 丁亚兰《国内外给水工程设计实例》化学工业出版社1999年3月第1版

计算机后端开发范文3

“吉湾一号”CPU的研发者竟是一位只有高中文化的计算机发烧友。基于“吉湾一号”CPU云终端整机可依托桌面云替代传统PC主机,所以它的众筹成本只有299元,是传统主机的1/10。更重要的是,它的问世或将迎来计算机“无机箱”时代。

云芯巴掌大小

或将引领计算机无机箱时代

“‘吉湾一号’CPU是国内首个面向桌面云终端应用设计的产品,可以称为中国第一云芯。它的问世,或将引领计算机无机箱时代。”2日,在主题为《艰・芯》的媒体会上,长春吉湾微电子有限公司创始人黄巍向记者介绍,桌面云终端也被称为网络计算机、瘦客户机、云PC。通俗地讲,就是将本地的显示器、键盘、鼠标等输入输出设备通过云连接进行转换,更适用于政府和企事业单位进行办公。

黄巍表示,“吉湾一号”CPU因为可依托桌面云替代传统PC主机,这也为办公节约了空间。也就是说,只要有一个机房似的主体机后,其它计算机只要有个显示器、键盘和鼠标就可以办公。记者在现场看到,这个可能引领计算机无机箱时代的产品,不过一个成年人的巴掌大小,长不过17厘米,宽不过13厘米。

产品研发人员

不是海归不是院士是位高中生

“起初,国内外很多企业和专家都不看好我们的产品,甚至觉得我们就是骗子,可经过检测后他们都在点赞。”黄巍表示,从我国第一颗集成电路诞生起,技术核心多由海归和院士们拥有,而他们的整个设计团队却不同,既无海归背景,也没有超高的学历,都是长春人,是由当时一群年轻的计算机“发烧友”组成,主要设计师黄玉硕是他的弟弟,只上过高中,他们的成功几乎不可复制。如今,了解他们产品的人,不再持有怀疑的态度,而是统一“点赞”。

“我从小就酷爱研发,特别对计算机情有独钟。‘吉湾一号’CPU是我带领一些‘发烧友’历时5年时间研发成功的,当时压力非常大。”身为公司总工程师的黄玉硕表示,从小到大,他都热衷于设计。上高三时,别人都在考虑上什么大学,读什么专业,不停规划未来,他这个电脑痴人却把所有精力都投到了计算机上,导致没有考上大学。但也因祸得福,自己却如愿去了父亲单位的微机室,自学完成了大学计算机、电子的相关课程,并彻底投身到电子世界中。

一次失败经历

促使“吉湾一号”CPU横空出世

“我们为啥这么自豪,原因只有一个,之前几乎所有电脑都要使用外国生产的CPU,价格高不说,安全性也备受争议。”据黄玉硕讲,“吉湾一号”CPU能够横空出世,与一次惨痛的失败经历有关。

2008年,南欧某国拟采购10多万台瘦客户机,并主动联系吉湾微电子有限公司,让他们提品评测。经过用户的评测,无论是显示效果还是价格,他们都完败一家美国的竞争对手。这次失利后,黄玉硕心有不甘,想知道与竞争对手究竟差在了哪里。经对比研究,发现竞争对手是基于他们自己的CPU实现的这个瘦客户机,他们通过对这个CPU的优化实现了瘦客户机应用下的高显示性能,专用CPU干专门的事,通过优化实现最高的性价比。这个做法深深地触动了黄玉硕,为此他萌生了设计“吉湾一号”CPU的想法。

接下来就是5年艰苦卓绝的开发历程。黄玉硕当时表示,开发不出样品,就不领一分工资。正是在黄玉硕的倔劲下,公司组建了一支涉前端设计、后端设计、封装设计等技术的创新团队,克服了重重困难,开展一个又一个攻关,实现了首次流片成功。又经过近两年的内测后,如今终于上市。至此,东北首个32位处理器诞生,并以绝对的价格优势打破了国外公司对中国芯片市场的高价垄断,对外赢得国际话语权。

2至3年进入家庭

众筹价格只是传统主机的1/10

计算机后端开发范文4

客户端服务器混合系统增加

在2017年,我们将看到更多软件系统以不同比例混合本地运行与云计算。在传统Web编程中,浏览器连接到后端服务器,由后端服务器进行所有实际处理。而在传统应用编程中,这些程序在本地运行(例如在手机或者笔记本电脑中),在设备端完成所有工作。OneNote或者Firefox等应用在本地运行,而Amazon或Gmail等Web服务则在云端服务器运行。

有些系统是混合系统:既不是纯应用也不是纯服务。有些计算在本地完成,有些则在云端进行。例如,Xbox One游戏可利用控制台中大量的本地处理能力,同时还可结合Xbox Live的大型多人游戏组件。

这种系统并不是新事物,在任何具有“连接”模式与“离线”模式的应用中都可看到这种模式,例如GMaps或者Outlook。云计算和本地之间的鸿沟变得越来越不明显。随着设备和服务中计算能力的增强(以及宽带的增加),企业将创建越来越多的混合系统。

在2017年,我们将继续看到这一趋势,笔者预测,云计算和本地计算之间的区别将进一步模糊。对于必须在每台设备和浏览器运作的功能,开发者将继续构建web应用,利用跨平台组件。

而对于极端响应或实时功能,则必须在本地运行以避免网络延迟。功能要求(以及团队专业知识)将指明最佳架构,展望未来,大部分系统都将以这种方式混合。

大数据变得更大

可用于大数据计算的信息正在增加,强大的云计算工具和机器学习算法将允许开发人员更有效地利用这些数据。每天我们都在生成更多的数据:可穿戴设备发射生物特征数据、网站记录每个用户点击、客户行为记录等。大数据工具(Python或者Scala等函数式编程语言)让我们能够应对这些挑战。

另外,机器学习系统在数据分析中的运用有着显著增加。与过去只是证明或反驳具体因果假设的技术不同,这些机器学习技术可带来意想不到的发现。今年我们将会从大数据分析中得到更多有用可操作的结果,我们也将需要更多专业的数据工程师和分析师。

VR成为主流

2017年将会是虚拟现实技术成为主流的一年,增强现实(AR)也取得快速进步,这意味着对VR/AR特定技能将有着更多需求。

当VR变成主流时,最值得关注的是消费者采用这种新技术而同时继续使用目前“平面”UI的过渡期。到那时,最佳产品将是可同时提供3D或2D用户界面体验的产品。对于VR在短期内的快速发展,大多数3D应用将需要在必要时映射回2D。否则,这可能会带来分裂用户群的风险。例如Skype这样的应用:它是会分裂成两种产品(一个完全针对VR用户,另一个则用于其他用户),还是混合两种功能的产品?设计同时适用于VR和非VR用户的界面将是很大的挑战。

VR的增长也意味着我们将看到开发技能将从游戏开发世界转移到其他类型的软件。对于大多数应用不适用的照明和照相机移动等将在VR中变得至关重要。开发人员将可使用Unreal Engine或Unity等游戏引擎来为VR设备编写软件,例如Oculus Rift、HTC Vive、谷歌Daydream和Cardboard。对于大多数应用,软件开发过程都将需要改变,让应用可适应VR的第一步就是增加3D效果。尽管如此,在应用转换成3D版后,设备特定代码数量会相对较小(尽管缺乏VR硬件标准)。如果软件行业适应这一势,我们将会看到VR进入日常生活中。

量子计算让设备变得更小

计算机后端开发范文5

关键词:编译原理;课程实验;插件;Phoenix

编译程序各个逻辑功能之间具有较强的依赖性,如后端的语义分析和中间代码生成、代码优化、目标代码生成等都依赖于前端的正确分析与处理。如果没有前端的输出,就无法进行后续的加工和处理。考虑到编译原理程序本身组织结构的特点、教学学时限制和学生实践动手能力等因素,目前课程实践环节普遍向编译器前端靠拢[1-2]。即使设置了与后端相关的实验,学生也往往无法完成。因此目前比较缺乏针对后端处理的、较为独立的小规模课程实验供学生练习,这势必影响学生对编译器整体性的掌握及对编译器各部分有机关联和接口的学习理解。

随着计算机体系结构的不断发展,编译技术也在不断进步和变化。为了快速对各种研究思想进行验证,并缩短编译相关研究成果与实际实现之间的转换时间,各种供研究人员使用的编译器框架平台应运而生。例如,微软公司推出的Phoenix编译器框架[3]、开源的Open64和GCC等。这些已有的编译器框架能够简化编译程序的设计与实现;同时,为了支持编译器的定制及相关理论的快速验证,有些编译器框架(如Phoenix和GCC4.5)允许以插件的形式对部分处理阶段进行修改或者加强。基于插件的设计方法对于研究人员而言其价值是毋容置疑的,同时也为编译原理课程实践提供了便利。我们可以利用这些编译框架提供的前端分析与识别功能,以及后端的部分处理能

力,设计针对语义分析与中间代码生成、代码优化和目标代码生成相关的实验环节,其好处在于:

1) 可以缩短实验完成所需要的时间,降低实验的难度,从而为教学目标的完成奠定良好基础;

2) 能够培养学生的科研能力和创新意识,为使他们顺利走上科研道路打下坚实的基础;

3)基于插件的设计思想和技术也是目前许多大型软件的普遍设计与实现方法,如Firefox、Eclipse和IDA Pro等。学生通过基于插件的课程实验能够加强学生对大型复杂软件架构、设计思想和实现方法等各个方面的认识,提升软件工程管理和软件设计水平。

目前清华大学“编译原理专题训练”课程已经将开放源码软件GCC和Open64作为实验框架引入实践教学[4],GCC 4.5及以上版本已经实现了对插件设计的支持。笔者仅以微软的Phoenix为例详细说明基于插件的实验设计的可行性。

1Phoenix编译框架

Phoenix是由微软公司新推出的用于构造编译程序,各种程序分析、优化和测试工具的一个基础框架。Phoenix编译器框架主要功能包括:

1)Phoenix是一个编译器。该编译器有着与其他编译器相似的功能,能够将源代码编译为二进制代码。

2) 是一个编译器开发工具。由于Phoenix采用了统一的中间形式,编译器开发者只需将新语言的源程序转化为这种中间形式,然后就可利用Phoenix后端工具完成中间语言的转化、优化以及二进制代码的生成。

3)Phoenix作为一个框架,同时还是可插接的(Plug-in),Phoenix包含一些API,使用这些API能编写利用Phoenix特性的工具。

Phoenix体系结构具有高度的可伸缩性,使得开发者或研究人员能够在该体系结构上开发各种各样的编译器以及分析优化工具。在Phoenix中,遍(Pass)和阶段(Phase)是两个极重要的概念,也是支持插件式设计的主要结构。Phoenix支持多遍处理,因此后端由多个Pass构成,而且允许使用者插入自己的Pass,用于特定处理。一个函数的分析过程可以划分为若干阶段,每个阶段的处理对应一个Phase。使用者可以插入、删除一个Phase或重新排列原有的Phase,Pass和Phase的关系如图1所示。

2基于插件的课程实验设计

插件是指能够被Phoenix核心编译模块(C2.exe)调用的外部模块。假设设计了一个名为MyPlugin.dll的插件,当使用命令行选项-d2plugin:MyPlugin.dll启动C2时,C2就会在编译的过程装载并执行MyPlugin.dll中的代码。

如图2所示,源代码程序经过前端C1.exe的分析和处理之后,然后交给C2中的各个Pass和Phase进行处理。当C2运行时,Myplugin能够访问C2内部的所有数据结构,因此,通过MyPlugin能够改变C2的行为,如增加新的Phase,旁路已经存在的Phase,或者替换可选的Phase等。例如,Myplugin可以提供一个寄存器分配Phase替换掉C2中已有的部分,可以向被编译的每个函数中插入一些其他的代码,输出某个函数编译所形成的IR等。

编写一个Phoenix的插件非常简单,例如,我们想输出被编译的每个函数的名字,则需要编写一个插件FuncNames。为此,首先定义一个实现PlugIn接口的类MyPlugIn,作为插件FuncNames与C2.exe交互的接口。MyPlugIn必须实现PlugIn中的两个接口:RegisterObjects和BuildPhase。Phoenix编译框架在装载插件之后调用RegisterObjects并注册插件对命令行选项进行处理。本例中不支持任何命令行命令,所以该接口的实现为空。BuildPhase接口有一个PhaseConfiguration类型的参数,这个参数是C2.exe提供给插件的,插件中的代码通过这个参数能够访问C2中的Phase列表。本例中我们只需要创建一个新的Phase实例并将其插入到列表中合适的位置就可以了,程序代码如下:

class MyPlugIn : Phx::PlugIn{

...

virtual void RegisterObjects() override;

virtual void BuildPhases ( Phx::Phases:: PhaseConfiguration ^ config ) override;

...

};

void MyPlugIn::RegisterObjects() {}

void MyPlugIn::BuildPhases( Phx::Phases::PhaseConfiguration ^ config) {

Phx::Phases::Phase ^ encodingPhase;

Phx::Phases::Phase ^ funcNamesPhase;

encodingPhase = config->PhaseList->FindByName ("Encoding");

funcNamesPhase = MyPhase::New(config);

encodingPhase->InsertBefore(funcNamesPhase);

}

此外我们需要创建的一个新的Phase类,该类是从父类Phase继承而来,且其必须实现父类的两个方法New和Execute。New是在前述的BuildPhases方法中调用的,主要作用是构造和初始化MyPhase对象;而Execute是C2编译每个方法时都会调用的方法,实际完成函数名输出的方法,程序代码如下:

class MyPhase : Phx::Phases::Phase{

...

static Phx::Phases::Phase ^New ( Phx:: Phases::PhaseConfiguration ^ config );

virtual voidExecute (Phx::Unit ^ unit ) override;

};

Phx::Phases::Phase ^ MyPhase::New( Phx:: Phases::PhaseConfiguration ^ config) {

Phase ^ phase = gcnew MyPhase();

phase->Initialize(config, "FuncNames");

return phase;

}

void MyPhase::Execute(Phx::Unit ^ unit) {

if (!unit->IsFunctionUnit) return;

Phx::FunctionUnit ^ function = unit-> AsFunctionUnit;

Phx::Output::WriteLine("Function: {0}", function->NameString);

}

从上面这个例子可以看出,基于Phoenix编译框架构造一个插件是非常简单的,但是能够实现非常多的功能。Phoenix的SDK包中包含了很多插件实现的具体例子,笔者对这些实现的代码长度进行了统计,如表1所示。

从这些例子可以看出,使用Phoenix构建一个插件实现特定的功能是可能的,特别是一些简单的功能,例如,查找未初始化的局部变量、输出函数的名字等只需要几百行代码即可实现;此外Phoenix不需要关注前端分析,即可进行控制流分析和数据流分析等操作。正是由于Phoenix具有上述特征,为快速进行编译器后端相关的实践提供了可能。

3实验设计简例

基于Phoenix提供的核心构件和API,并参考Phoenix提供的插件例子,我们设计了如下几个实验:

1) 函数复杂度计算。定义评估函数复杂度的方法,并基于Phoenix实现一个插件程序对输入源程序中的所有函数的复杂度进行计算,并根据计算的结果对对函数进行排序输出。

2) 查找无用赋值。基于Phoenix实现一个插件程序查找输入源程序中的无用赋值语句,并输出其所在的位置。

3) 常量合并。基于Phoenix实现一个插件程序能够实现简单的常量合并,并输出其中常量合并的位置。

4) 静态类型检查。基于Phoenix实现一个插件程序,该插件对代码进行静态分析,输出需要进行强制类型转换的语句的位置。

由于Phoenix提供了丰富的数据结构和接口,并且插件能够访问和使用几乎所有的内部结构,因此能够实现各种各样的功能,笔者仅是给出几个简单的例子,希望起到抛砖引玉的作用。

4结语

针对编译课程教学实验设计的相关问题,笔者提出基于插件的实验设计方法,不仅能够扩展编译程序构建相关实践的广度和深度,并能够缩短学生完成实验的时间。基于插件的设计与实现非常有利于培养学生的科研能力和创新意识,同时提高学生对大型软件设计与分析的能力。

文章详细介绍了Phoenix编译器框架的结构,通过分析插件的设计方法和插件程序的代码长度,说明了基于该框架设计实验的可能性,最后给出了几个可能的实验设计,希望能够对实践课程的设置起到借鉴作用。

参考文献:

[1] 曹琼. 浅谈编译原理实验课程教学[J]. 计算机教育,2007(18):45-46.

[2] 朱朝霞,周云才. 编译技术语法分析实践教学探讨[J]. 北京教育学院学报:自然科学版,2008(3):11-14.

[3] Microsoft Corporation. Phoenix Microsoft Connection[EB/OL]. [2011-04-10]. /Phoenix.

[4] 董渊,王生原,张素琴.“编译原理专题训练”课程介绍[J]. 计算机教育,2009(21):16-18.

Experiments Design Method for Compiler Practices Based on Plug-in Technologies

JI Weixing, CHEN Ying, WANG Guizhen, LI Kan

(School of Computer Science and Technology, Beijing Institute of Technology, Beijing 100081, China)

计算机后端开发范文6

关键词:云计算;虚拟实验室;虚拟机

中图分类号:TP393 文献标志码:A 文章编号:1673-8454(2016)03-0053-04

一、引言

近年来,在互联网及云计算技术迅速发展的环境下,高等学校信息化建设出现了新局面。高校在计算机实验室建设方面加快了建设和更新速度。但师生在教学中还是遇到了很多问题。本文就高校如何在云计算环境下建设虚拟实验室进行了研究。分析现有的云计算服务,提出虚拟实验室的系统框架和具体实现方法。

二、现有研究分析

目前,高校的计算机实验室方便了教学活动,提高了教学质量。但通过分析我校计算机专业师生在实验室的课堂教学活动,发现了一些问题。

(1)学生学习延续性受阻。学生在实验室进行了课堂学习,执行了部分实践操作,如果课后希望继续学习,需要复制实验环境。当实验环境比较复杂时,学生就无法实施课后学习。

(2)教学资源利用率低。课堂结束后,实验室的机器空闲。硬件、软件资源利用率不高。实验室设备更新速率比较快,被淘汰的设备闲置造成了浪费。

(3)实验室管理员任务繁重。管理员需要管理每台计算机,包括软件更新、系统更新、安装硬件等。

建立虚拟实验室是实验室信息化建设的一个发展方向。在现有研究中,基于云计算的虚拟实验室是其中的研究热点。

基于云计算的虚拟计算机实验室[1]-[4]提出基于IaaS服务的虚拟实验室。分析了构建思想和系统框架。但对每个层次的具体实现方法和实现细则没有研究。

基于微软Hyper-V虚拟化技术建设虚拟实验室[5]-[6]提供了一种具体的搭建方案。使用微软提供的WMI接口进行编程,实现用户对虚拟机的操作。虚拟计算机实验室[7]基于VMware和Citrix的IaaS服务主要设计了资源预约流程。实验资源管理系统[8]为每个实验室划分了虚拟机群。

基于云计算的虚拟实验教学系统[9]利用云计算平台,将本地或异地的不同实验用户与虚拟实验室联结起来,共享一个虚拟的实验空间。基于云计算的虚拟科研环境[10]利用国家网格中可共享的虚拟机资源,通过网格技术来访问和使用资源,实现国家网格资源共享,为不同学科的科研提供在线云服务。其本质是PaaS,PaaS需要为不同的应用开发不同的平台,应用场景有局限性。比如计算机系和化学系的实验不尽相同,所需的虚拟实验室功能就不一样。

本文将研究提供IaaS服务的虚拟实验室,对每个层次、模块的功能和实现方法进行深入分析。提出详细的实现方案,为具体部署提供参考。

三、虚拟实验室系统架构

基于云计算的虚拟实验室把虚拟机开放给用户,用户能通过创建虚拟机、删除虚拟机、修改虚拟机等操作来搭建自己的实验网络。虚拟实验室系统架构如图 1所示。

数据中心实现云计算功能。基于数据中心,把基础的计算和存储资源开放给用户,提供虚拟机,实现基础设施即服务IaaS。

虚拟实验室控制系统向上接收用户命令,向下控制虚拟机的创建、删除和修改。管理与维护用户、课程、虚拟机的关系。

虚拟实验室用户平台包括前端界面和后端系统两部分。前端界面根据课程特点,包含创建虚拟机、删除虚拟机、修改虚拟机等栏目。后端系统支持用户根据需要自主搭建实验网络。

下面将对数据中心、虚拟实验室控制系统和虚拟实验室用户平台的实现进行分析。

四、数据中心实现研究

数据中心提供IaaS服务,采用虚拟化管理解决方案,实现对数据中心的集中管理和控制。通过对VMware和H3C的解决方案研究发现,IaaS服务一般通过管理界面,统一管理数据中心内所有的主机和虚拟机。此方法能提高管理员的管控效率、简化日常例行工作,更可降低IT 环境的复杂度和管理成本。下面就VMware和H3C的解决方案进行详细分析。

1.VMware IaaS解决方案研究

VMware vSphere是VMware公司推出的虚拟化平台。vSphere将应用程序和操作系统从底层硬件分离出来,从而简化了IT操作,其系统架构如图 2所示。

ESXi 提供虚拟化功能,用于将主机硬件作为一组标准化资源进行聚合并将其提供给虚拟机。虚拟机就表现得如同物理机,拥有自己的一套虚拟硬件。包括其上载入的操作系统和应用。使用虚拟化,不管下面主机服务器运行什么操作系统,每台虚拟机都拥有一致的虚拟硬件。

vCenter Server可用于将多个主机的资源加入池中并管理这些资源,而且可以有效监控和管理物理及虚拟基础架构。管理员可以管理虚拟机的资源、置备虚拟机、调度任务、收集统计信息日志、创建模板等。

vSphere Client是vCenter Server、ESXi主机和虚拟机的界面。通过vSphere Client,可以远程连接到vCenter Server。也可以从任何Windows 系统直接连接到ESXi。vSphere Client 是用于管理 vSphere各个方面的主界面。

2.H3C IaaS解决方案研究