ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:23.42KB ,
资源ID:18908086      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18908086.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Open64重定向技术报告RetargetOpen64technicalreport中文翻译Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Open64重定向技术报告RetargetOpen64technicalreport中文翻译Word格式文档下载.docx

1、/config_targ.h为ls_Target_xxx添加宏,xxx代表目标机支持的处理器。比如:对于MIPS有ls_Target_R10K()。为目标机添加ABI宏。设置GP大小。设置目标机的调试信息。在common/util中,从ia64中将c_qwmultu.c拷贝过来。2.编连libsmplslibibertylibcomutil如果在编连过程中需要现实命令行,可以修改linux/make/目录下的gcommondefs和gcommonrules。E.在common/targ_info中,创建目录机器相关文件。按照如下顺序:isa/isa.cxx/isa_properties.cxx

2、/isa_subset.cxx/isa_registers.cxx/isa_enums.cxx/isa_lits.cxx/isa_operands.cxx/isa_hazards.cxx/isa_print.cxx/isa_pack.cxx/isa_bundle.cxx/isa_decode.cxx/isa_pseudo.cxxabi/abi_properties.cxxproc/proc.cxx/proc_properties.cxx/_si.cxx该目录包含了重定向的大部分基本设置。大多数重定向出错都是由于这个目录中的错误设置,因而所有文件都要仔细编写。3.编连targ_infoF.处理目

3、录kgccfe和kg+fe中的前端在kgccfe/gnu,kgccfe/gnu/config,kg+fe/gnu,kg+fe/gnu/config中,创建目录,内容从ia64或x8664中拷贝,修正一些参数和文件名字即可。修正gnu_config.h,使其包含对应于目标机的config.h文件。修正/config.h,/hconfig.h, /tconfig.h, /tm_p.h使其包含的文件对应于目标机。确保Makefile和Makefile.gbase也能找到gnu/目录。在include/elf.h目录中,将#define Elf32_Byte和Elf64_Byte使能。若在前端添加了一

4、些新的语意,则需一起更新lexer,parser和声明。如其一不相匹配,则前端会出现意想不到的问题。G.创建common/com/config_platform.hcommon/com/config_asm.h/config_cache_targ.cxx/config_elf_targ.cxx/config_host.c/config_platform.c/config_targ.cxx/config_targ_opt.cxx/config_targ_opt.h/targ_const.cxx/targ_const_private.h/targ_ctrl.h/targ_em_const.cxx/

5、targ_em_dwarf.cxx/targ_em_dwarf.h/targ_em_elf.cxx/targ_em_elf.h/targ_sim.cxx/targ_sim.h所有这些文件均可从相似目标机的目录里拷贝,然后按规则更新。在config_host.c, config_ targ.cxx 和common/com/config.cxx中,确保字节顺序设置正确。在config_asm.c中,确保正确设置了.s文件输出的汇编语法。在targ_sim.h中确保调用约定和参数传递设置正确。config_cache_targ.cxx设置cache模型。Targ_em_*文件控制汇编输出,分区类型,

6、重定位等,只有到了后端的重定向时才需要修改这些文件。基本上需要修改此目录下的每一个文件。4.编连gccfe5.编连g+fe6.编连ir_toolsH.创建be/be/和be/com/目录在目录be/be/下创建driver_targ.cxx和fill_align_targ.cxx在目录be/com/下创建betarget.cxx这里你可以使问题简略化,先使之能运行,最后再进行优化。例如,可以先设置Can_Do_Fast_Multiply为FALSE,之后再来处理这个问题。7.编连be8.编连libelflibelfutillibwarflibunwindPI.创建be/cg/register_

7、targ.hbe/cg/tn_targ.h/op_targ.h在lib/elf.h中为自己的芯片创建特定的部分(或者适合的elf.h),定义合理的重定位,分区等。9.编连woptJ.在be/cg中创建文件。修正cgtarget_arch.h,比如CGTARG_Copy_Op, .可能需要想be/cg/op.h中添加信息。修正cgdwarf_targ.cxx, Find_Spill_TN, .,在dwarf中解开表。10.编连cg11.编连driver.12.编连ipl13.编连lno14.编连inline15.编连whirl2c16.编连ipa 2.2 注释在下列注释中,14由Fred Cho

8、w和Sun Chan给出,58由我添加。1. 仔细浏览be/cg目录中的expand.cxx, whirl2ops.cxx。2. be/cg/目录中的xp_branch.cxx, exp_divrem.cxx, exp_loadstore.cxx, expand.cxx, entry_exit_targ.cxx 需要做大量的修改或调整。3. 若想为某些目录添加更多的编译选项,则修改该目录下的Makefile.gbase。细心的修改,勿因此而破坏其他目标机的规则。4. 若要添加intrinsic,则需注意如下文件common/comintrinsic.def-定义了INTRINSIC_ID, 这

9、是intrinsic的性质(顺序很重要,由INTRINSIC_ID编序)kgccfe/gnu中的前端定义文件。Builtins.def id, name, prototype, attributeBuiltin-types.def 需要新类型时要更改此文件Wfe_expr.cxx 将 GNU builtin翻译成WHIRL.5. 最初要将所有文件修改正确是很不容易的,别担心,可以通过运行,跟踪,调试编译器来修正这写bugs。当你熟悉此过程后,就可以对这写文件作大的修改。6. 虽然不正确的修改某些文件不会导致编译器出错,但会降低输出代码的质量。例如,若CGTARG_Compute_Branch_

10、Parameters(be/cg/cgtarget.cxx)中的分支开支设置不正确,则会导致代码中的if-语句块的层次结构不合预期。所以,当编译器生成的代码质量太差时,记得检查机器参数。7. 若你将cygnus当作ld来生成ipa-link,则需在顶层创建targcygnus_ia32_并在其中创建BUILD_gas, CLOBBER, CONFIGURE文件。再在顶层Makefile中将将ld的make目录指向targcygnus_ia32_8. 若需要打开/关闭某些系统结构特征,可以先在be/cg/cg_flags.cxx中搜索标记。例如,可以开启Enable_Fill_Delay_Slo

11、ts来使能延时槽。2.3 重定向结果2.3.1 机器参数处理器:龙芯2f,订单ISA:MIPS3主频:666MHz版次:4ALU:2FALU:MEM 单元:12.3.2 稳定性在O3选项下,该编译器已经通过斯坦福基准(Stanford benchmark)和Stepanov编写的抽象延迟基准(Abstraction penalty benchmark)。这表明适用于MIPS的编译器的大体框架已经成型,C和C+前段能正常工作,大部分优化也能实现。2.3.3 性能及分析性能应该由SPEC和其他基准来标定,但我还没有进行过此类测试。因此贴出斯坦福基准和抽象延迟基准的结果。斯坦福基准(-O2)测试案例

12、 大小 时间bubble 10000 1.27qsort 1000000 0.71queen 12 0.26matmul 400 1.50perm 10 1.54sieve 1000000 0.76抽象延迟基准(大小:2000, 迭代次数:250000)选项(-O2) 测试序号绝对时间(秒)每秒加法次数(M)对测试0的比例5.2894.701.005.8485.621.1135.4292.251.037.1669.831.3655.3992.761.0267.5566.231.4375.8785.1888.2160.91.5595.8984.891.12108.1861.12116.4577.

13、521.22129.2953.821.76平均值6.4877.121.23总时间:85.81s抽象延迟:*选项:(-O2 -PHASE:P)7.6065.791.447.8863.451.498.0462.191.525.2994.528.4659.101.606.1781.051.1781.83s(-O3)68.82s抽象延时基准的性能分析:众所周知,本台机器的峰值性能应为其主频,即666M每秒,但事实与峰值差距巨大。我总结原因于此,所有这些问题都是我将来的工作方向。1.正确设置指令调度中的指令延迟.LBB21_Z5test0PdS_:addiu $2,$2,32ldc1 $f3,-32($

14、2)ldc1 $f2,-24($2)ldc1 $f1,-16($2)add.d $f3,$f3,$f0ldc1 $f0,-8($2)add.d $f2,$f2,$f3add.d $f1,$f1,$f2bne $2,$16,.LBB21_Z5test0PdS_add.d $f0,$f0,$f1这是内核的汇编代码,展开4次。FALU延迟为6个机器周期。因而展开银子太小了。2.运用底部装载(Bottom loading)来隐藏装载延时。2.3.4 已知问题在“抽象延时基准的性能分析”部分,除上所述之外还有一些其他问题。1. 编译器目前仅支持MIPS4 ISA,要同时支持其他ISA则需更新CG。2.

15、在生成的.s文件中,展开信息有些问题,需要后续处理。3. 共享对象的编译还未经测试。3.关于从零开始重定向的讨论 我很幸运可以以SL的编译器作为重定向的基础。但是如果你在当今的OPEN64版本中找不到一个类似的平台,那么需要特别关注那些问题呢?本节我将对此进行简要讨论。 回顾Fred Chow建议的重定向步骤,我将讨论若从零开始,哪些步骤将更复杂。很显然我们不需要管编连步骤,因而只需关注文件创建步骤。1. 步骤A,B,C没有任何不同。2. 步骤D:config_targ.h不是问题。即使可以找到类似处理器仍然要进行这一步。因而相较于第二节,这一步需要做更多工作。3. 步骤E:该组文件需要更多工

16、作。4. 步骤F:该不处理前段,因而不会带来麻烦。只需按照2.1节的指示做就可以成功。5. 步骤G:6. 步骤H:driver_targ.cxx和fill_align_targ.cxx并不复杂,你可以根据现成的文件轻松的创建它们。阅读这些文件以便修改。Betarget.cxx为针对目标的功能定义了一些例程。但是按2.1节中提到的,你不必简略它,因为很容易就可以使他工作。Sections.cxx定义生成文件的组织格式。如果输出ELF文件,则不需要对现成的文件作太多修改。但如果要生成其他格式的文件,则需注意此文件。7. 步骤I:创建这写文件是一件琐碎的工作。8. 步骤J: 现在还有三组文件需要进一

17、步讨论,他们使用在步骤E,G和J中。大部分只需从现成的目标机目录中拷贝,浏览一边并根据你的处理器做少许修改。这并不难但是得花时间,例如,你需要在isa_operands.cxx中描述每条指令的操作树。但有几个文件需要从头写起。比如所有的exp_*.cxx,因为exp_*.cxx文件将WHIRLS翻译为指令,所以要全部重写。 简要总结一下,所有需要修改的文件都在2.1和2.2节中有提及。如果OPEN64版本中存在类似目标机器,你就可以剪切这些文件。反之,若要从零开始,则需以其他目标机器的文件当作模版,一行一行的编写某些文件。4.与GCC重定向的比较 GCC是另一个流行的可重定向的编译器架构。因此

18、,本节我们从适应性和性能两个方面比较重定向的OPEN64和GCC。4.1适应性比较 与OPEN64类似,重定向GCC的大部分工作也是处理ISA,ABI,处理器和但吗生成。开发人员需要编连机器描述,包括md文件,C文件和一系列头文件。GCC的机器描述包含如下信息:1.处理器系统结构功能行为,指令的可选资源使用,字节顺序和内存寻址能力等2.ABI寄存器使用,函数调用公约等3.源语言数据类型的层次int,float和char的大小等4.二进制文件的格式对象和可执行文件的格式,调试信息的格式。5.编译环境-汇编器,连接器和库的公约,系统头文件和库的位置等。 考虑这些问题时,应考虑到ISA和代码生成在m

19、d文件中,ABI和处理器信息在头文件中,机器相关的子程序在C文件中。回到OPEN64,我们可以发现其与GCC的不同。在OPEN64中,ISA定义在一组文件中,每个文件描述一部分ISA,而GCC刚好相反,它将几个问题集中到一个大文件中,比如.md文件。 从讨论中看出,GCC和OPEN64的重定向要求开发者熟悉编译器。同时我不认为二者在重定向的适应性上有较大差别。4.2性能比较 虽然机器相关优化和性能调整对于编译器重定向是必要的,我们仍然希望在重定向步骤后得到更高的性能。作为后续优化和调整的基础性能,是越高越好。我将比较仅仅进行重定向后得到的性能,仍然以抽象延时基准作为焦点。*-O3,GCC版本:

20、4.1.27.5466.3198.01s回顾OPEN64的性能,97.4M次加法每秒,OPEN64可以为后续的机器相关的优化提供更好的性能基准。5.结论 在本报告中,我展示了将OPEN64重定向至MIPS平台的经验。获得的稳定性和性能都经过了讨论。我还讨论了从零开始重定向OPEN64的复杂性。对比GCC,重定向OPEN64可以提供更高的性能基准而不会增加复杂度。致谢 非常感谢Sun Chan在实验期间给与我的指导以及珍贵的意见和鼓励。感谢Guang R. Gao教授给予我这次机会。感谢Fred Chow的文章“pro64重定向的建议步骤”。感谢Feng Xiaobing教授的支持与建议。感谢Huo Wei分享他的重定向GCC的经验。还要感谢ICT和Simplight Nanoelectronics成员们的帮助和讨论。参考文献【1】OPEN64主页 【2】W. J. Price. A benchmark tutorial. IEEE Micro, 9(5):28-43, Oct. 1988【3】Alex Stepanov. Abstraction Penalty Benchmark, version 1.2 (KAI). Silicon

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1