开源软核处理器OpenRISC自定义指令的研究与实现
开源软核处理器OpenRISC自定义指令的
研究与实现
第27卷第1期
2010年1月
计算机应用与软件
ComputerApplicationsandSoftware
V01.27No.1
Jan.2010
开源软核处理器OpenRISC自定义指令的研究与实现
陈俊陈更生
(上海市计算技术研究所上海200040)
(复旦大学专用集成电路与系统国家重点实验室上海201203)
摘要详细介绍了在OpenRISC上实现自定义指令的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
.开始先简要说明软核的
优点,接着基于此优点讨论优化大计算量
程序段的两种方法.将两种方法进行比较后,选择自定义指令并介绍实现步骤.
关键词自定义指令OpenRISC
oNCUSToMINSTRUCTIoNSoNoPENRISCoFoPENSoURCE
SoFTPRoCESSoRANDITSIMPLEMENTATIoN
ChenJunChenGengsheng
(ShanghaiInstituteofComputingTechnology,Shanghai200040,China) (TheASICandmStateKeyLabofFudanUniversity,Shanghai201203,China) AbstractAnapproachforcreatingcustominstructiononOpenRISChasbeenpresentedindet
ail.First,webrieflyintroducedtheadvanta—
gesofsoftprocessor,andbasedonthoseadvantages,twomethodsthatoptimizetheperforman
ceofintensivelycomputationalprocedureon
OpenRISCarchitectureareraised.Aftercomparingtheadvantagesofthesetwomethods,the
custominstructionisselectedwithitsrealization
proceduregiven.
KeywordsCustominstructionOpenRISC
0引言
相对于市场上广泛使用的ARM,PowerPC,MIPS等商业内 核高额授权费用,日渐成熟的开源IP核的优势明显,OpenRISC, LEON2,NiosII又为其中的杰出代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
,使用者可以在GNULGPL 下免费使用前两款RTL级的HDL源代码,而且开源软核因其 开源这一特点,灵活性和扩展性的优势与生俱来.本文针对 OpenRISC进行讨论.
如果一个算法存在某部分代码反复执行,并且占用大量运 行时间的情况,就应考虑针对该部分进行优化,使其时钟周期降 下来,进而提升整体运行速度.在OpenRISC这类开源软核上 实现上述优化的方法有二种:(1)扩展指令集;(2)添加专用硬 件协处理器单元.
1方法比较
添加专用硬件协处理器的方法适用于任何微处理器,因为 它不涉及对微处理器内部结构的任何修改.如果采用的微处理 器是有IP保护的,而它又没有提供可扩展指令功能,那么只能 通过添加硬件协处理器的设计方法来进行上述优化.但是协处 理器和微处理器核之间存在着发送和接收数据的通信成本,这 额外产生的通信开支与添加专用单元带来的性能提高之间要进 行权衡,而这种权衡却不容易.
扩展指令集的设计方法适用于开源的微处理器核与提供扩 展指令集功能的微处理器核.通过对微处理器核指令集的扩展 可获得与定制硬件相比拟的高效率,一条指令可以被任何需要 的任务使用,得到灵活,高效的高性能系统.扩展指令集的设计 方法需要修改微处理器的内部结构,所以必须理解处理器核的 内部运作,所幸改动不大.这种方法是加强通用目的处理器能 力的通常的手段,也是一种相对而言最为方便快捷的方法.
Tensilica公司的Xtensa核以可配置见长,配有专门的语言Ten— silicaInstructionExtension(TIE)用于自定义指令的设计,Ahera 的SOPCBuilder开发环境也支持NiosII指令集的扩展,Intel Pentium处理器的MMX指令集也是这种方法的实现. 2扩展指令集的实现过程
2.1关键操作的选择
扩展指令集也就是将一段特定实现序列用一条自定义指令 替代,达到降低时钟数的目的.一般它们是一些大函数的基本 组成单元,本身逻辑上不复杂,但是被调用次数多,从而影响程 序的总体实时性能.因此首先必须找出影响性能的特定实现序 列,将这些最频繁的操作用专用指令完成,必将提高这些模块的 运算速度.
收稿日期:2008—11—21.上海市科委重点扶持项目(os~moloo).陈 俊,硕士生,主研领域:嵌入式系统.
第1期陈俊等:开源软核处理器OpenRISC自定义指令的研究与实现69 在此我们实现常见的MPEG一2解码库libmpeg2,MPlayer使 用的就是这个库.使用GNU中的gprof程序进行性能分析. gprof实现原理…是:在被分析程序编译的时候,gprof在每个函 数的出入口处加入了名为mcount/一mcount/mcount的函数,运 行时便可统计程序在用户态的执行信息,从而能得到每个函数 的调用次数,执行时间,调用关系等信息.
在分析过程中,首先将软件代码编译生成二进制代码运行, 得到解码器总体结果和每个函数的运行时钟周期数,分析得到 影响解码器总体性能的功能模块,由此发现有两项的时间消耗 比重很大:
mpeg2—
idct——add——C36.06%
mpeg2——idct——copy——C16.69%
在idct.e中找到这两个函数,接着调用idct_row,idct—col,最
终发现BUq~I'ERFLY宏被反复调用.我们决定选取这个程序段 进行优化.
#defineBUTYERFLY(tO,tl,W0,W1,dO,d1)\
do{\
inttmp=W0(dO+d1);\
tO=tmp+(W1一W0)dl;\
tl=tmp一(W1+W0)dO;\
}while(0)
类似的,如果系统要求实现音频编解码程序G721,对其进 行同样的分析后,可以得到2x.C文件的程序段:
staticintquan(intval,shorttable,intsize)
//此处的table恒定指向staticshortpower2[15]={.??};
t
mt1;
for(i=0;i<size;i++) if(val<}table++)
break;
retum(i);
}
也应该是优化的对象.
2.2实现指令集
指令集的实现涉及硬件与软件两部分的修改.
1)涉及硬件部分的修改
OpenRISC专门提供的两种自定义指令格式,如图1所示. o~ode0x3dlreserved
图1
有输入输出处理应该选择图1的第一种.典型的RISC架 构的指令最多两个输入和一个输出,OpenRISC的自定义指令应 符合这一约束.但有些时候仅仅两个输入是不够用的,这时可
以在处理时约定某个寄存器功能,将其固定下来,用以实现参数 传递.图1中的D,A,B分别按照OpenRISC指令格式一般的定 义方法,定义为目的寄存器,源寄存器1,源寄存器2.L,K位可 以不使用,但是如果实现的多条指令功能相似,则可将L,K位 作为标志位,以实现指令的共用,降低同时实现多条自定义指令 的开销.
定义好指令的格式后,按照功能与码位分配实现硬件指令 verilog代码,并在内核文件defines.v,cpu.v,ctr1.v,wb.
mux.v等上添加相应语句.此时修改软核代码就需要对软核结 构了解,可以参考文献[4].对于NIOSII处理器在改动内核文 件部分的实现,则可利用AlteraSOPCBuilder图形界面下完成, 相对直观快捷.
2)涉及软件部分的修改
现在有两个途径可以实现扩展指令在软件上的应用: (1)修改编译器使得编译器能识别新添加的指令,以便在 编译时把高级语言翻译成汇编语言,软件开发人员使用高级语 言编程;
(2)手工编写机器码,内嵌机器码,指定哪些操作由哪些扩 展指令实现,因此软件开发人员必须直接使用汇编来操纵扩展 指令.
由此可以看出利用自定义指令写的程序将不适用于通用处 理器,当然这不是大问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,因为在底层开发很注重性能,代码的 优化是必须的.
将两者比较得知,方法(1)要实现编译器找到插入新指令 的位置将会有相当的工作量,因为涉及词法的修改,并且优化也 是一个难点.相对而言,方法(2)不修改编译器代码,而是直接 跳过编译器,在汇编执行前插入指令.更改汇编器是一个直接 的过程,因为在此部分只涉及从指令到二进制编码的映射. 在程序中想调用BUTrERFLY宏处,直接用内嵌汇编:
asm("1.butterfly%0,%1,%2":"=r"(tO):…r'(dO),"r"(d1)); 因为工具链的选择,所以内嵌汇编格式必须符合GCC/GAS 的要求,即AT&T汇编语言语法要求J:
asm(code—string[:output—list[:input—list[:overwrite—list]]]); 为其基本格式,":"为分隔符,"="表示此操作数只写,…r' 表示由GCC选择一个通用寄存器存值.
接下来就是修改汇编器,让它认识插入的新指令.在binu— tils源码目录下opcodes\or32一opc.e的315行中已经预留有位置 让我们添加指令:
{"1.eust5","rD,rA,rH,L,K",\ "110xCDDDDDAAAAABBBBBLLLLLLKKKKK".\
EFI,0,it—unknown}
将其改为:
{"1.butterfly","rD,rA,r, "l10xCDDDDDAAAAABBBBB
EFI,0,it_unknown}
重新生成工具链后,程序就可以调用l|butterfly指令. 3结论
开发平台软件部分的搭建可以参照文献[4],相应硬件部 分的搭建参照文献[5].在用自定义指令实现程序块的功能 后,l_butterfly所处程序运行时间比在总程序中的比例明显 下降:
mpeg2一
idct—add—e25.61%
mpeg2一
idct—
copy—e11.68%
音频编解码程序G721程序的时钟周期也由886降到446, 效果明显.
在使用开源软核OpenRISC降低成本的同时,通过对程序 的分析,利用自定义指令技术提高效率,获得更大的回报.本文 对实现自定义指令的软硬件过程作了整体介绍,为相关开发人 员提供可借鉴的方法.(下转第113页)
一
,
一一一一一一一
第1期何必仕等:基于0penVG矢量图渲染加速研究113 尔曲线以控制点的多项式形式存在,为了降低计算的复杂度,本 文的实现中将采用中点线性递归法来实现基于电脑绘图的描绘 路径.贝塞尔曲线分解过程是收敛性的,即如果按照线性递归 的分解算法对三阶贝赛尔曲线进行分解,当分解精度足够高,每 个曲线段长度足够小的情况下,可以用分解出来的多边形来代 替原来的曲线.
在现实中对于一定的屏幕分辨率来说,不可能将递归过程 无限进行下去.首先,如果分解精度过高,性能就会下降,但是 对于分辨率比较小的手持设备屏幕来说,作用就不是很明显. 其次,如果分解精度过低,生成的多边形过于粗糙,就失去了曲 线分解的意义.所以,在具体的处理过程中通过一个容限来权 衡运行的效率和图像质量之间的矛盾.
当用来模拟贝塞尔曲线中很小片段的折线多边形距离小于 或等于容限时,整个递归过程结束.在本文实现中,将此容限设 置为1.14个像素单位,这是一个针对手持移动设备屏幕分辨率 得出的经验数据.如果实际容限大于此值,模拟曲线的多边形 精细度降低,但是由于要处理的填充边边数减少了,就能提高处 理的性能.如果实际应用中容限小于此值,可以得到更好的图 像质量,但是相应性能因为填充边的数量增加而有所下降.由
于手持移动设备的屏幕分辨率都是有限的,采用小于0.1的分解容限对于提高图像的质量帮助不大.
4实验结果分析
我们还是用虎头的渲染来进行比较,同样的硬件配置条件 在调试模式下生成虎头的时间消耗大约在34秒左右,大约提高 了15%.
为了验证
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
是否符合规范的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
,我们采用了Khronos 组织提供的一致性测试工具CTS1.0(ConformanceTestSuites),
采用了HyBird公司测试虎头模型相同的测试数据进行测试,最 后得出的成功率接近于75%.测试结果如表1所示. 表1CTS测试结果
虽然CTS测试中有些项目会出现失败,但是由于手持移动 设备比如手机,PDA等的屏幕分辨率有限,所以对图像质量的 影响并不是很大,总体上方案是可行的,有效的.
5结束语
本文首先介绍了OpenVG的研究相关背景以及"路径"的生 成,描绘等概念,从而提出了自己的测试分析方法.通过对"路 径"生成,描绘过程的测试分析找出了制约渲染性能的瓶颈以 及改进的方向,接着又提出了自己的优化方案,最后通过和Hy. Bird方案的比较验证了方案的可行性和有效性并给出了测试 数据.
OpenVG为手持移动设备上实现高质量的2D矢量图形加 速提供了一个统一而又灵活的平台.由于OpenVG支持SVG 并且和OpenGLES相容,使得在同一场景中实现二维和三维矢 量图形混合渲染成为可能.由于SVG在将来可能成为替代 Flash和GIF的一种新型的网络图形图像传输模式,这给Open— VG的发展带来了很多的机会和挑战.
在将来的工作中我们将进一步改进渲染算法,提高CTS测 试的成功率,同时考虑将OpenVG和OpenGLES二者结合起来, 形成兼具2D渲染和3D仿真的图形加速器.
参考文献
[1]HuangRChae.DesigninganOpenVGaccelerator:algorithmsandguide?
lines[C]//Int'1Conf.Computer&CommunicationEngineering,2006. [2]KhronosGroupStd.EGL,KronosGrouopStandardforNativePlatform GraphicsInterfaces[EB/OL],2005,WWW.khronos,org,
[3]CarlWorth.AnInsider'sGuidetoCairo[EB/OL].2006. [4]SangyunLee,ByungukChoi.VectorGraphicReferenceImplementa? tionforEmbeddedSystem[C]//TechnologiesforE-LearningandDig italEntertainment,2007.
[5]HaeberliP,AkeleyK.Theaccumulationbuffer:hardwaresupportforhigh- quali~rendefing[J].ACMSIGGRAPHComputerGraphics,1990. [6]ConversyS,FeketeJD.Thesvgltoolkit:enablingfastrenderingofrich 2dgraphics[C]//TechnicalReport02/1/INFO,EcoledesMinesde Nantes,2002.
[7]HybridGraphicsForum.OpenVGReferenceImplementation[EB/OL]. 2005..
[8]DanielRice,Google,Inc.OpenVGSpecificationVersion1.0.1[EB/ OL].2oo7.
(上接第69页)
参考文献
[1]GNUgprof.[2]OpenRISC1000ArchitectureManual,. [3]
[4]PatrickPelgnms,DriesDriessens,TomTierens.BasicCustomOpen—
RISCsystemSoftwareTutorial,2004.
[5]PatrickPelgnms,DriesDriessens,TomTierens.BasicCustomOpen—
RISCSystemHardwareTutorial,2003.
(上接第110页)
[5]殷世民,刘上乾,吴志鹏,等.一种基于特征区域分割的图像拼接算
法[J].西安电子科技大学,2002,29(6):768—771.
[6]聂斌,刘照军.医学显微图像的自动拼接方法[J].第四军医大学
,2005,26(6).
[7]周鸣扬.精通GDI+编程[M].北京:清华大学出版社,2004. [8]何斌,马天予.VisualC++数字图像处理[Mj.北京:人民邮电出 版社,2001.
[9]马令坤,张震强.图像拼接算法的研究[J].图像处理,2007,2(2): 303—305.