Open64重定向技术报告RetargetOpen64technicalreport中文翻译Word格式文档下载.docx
- 文档编号:18908086
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:13
- 大小:23.42KB
Open64重定向技术报告RetargetOpen64technicalreport中文翻译Word格式文档下载.docx
《Open64重定向技术报告RetargetOpen64technicalreport中文翻译Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Open64重定向技术报告RetargetOpen64technicalreport中文翻译Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
/config_targ.h
为ls_Target_xxx添加宏,xxx代表目标机支持的处理器。
比如:
对于MIPS有ls_Target_R10K()。
为目标机添加ABI宏。
设置GP大小。
设置目标机的调试信息。
在common/util中,从ia64中将<
c_qwmultu.c拷贝过来。
2.编连libsmpls
libiberty
libcomutil
如果在编连过程中需要现实命令行,可以修改linux/make/目录下的gcommondefs和gcommonrules。
E.在common/targ_info中,创建<
目录机器相关文件。
按照如下顺序:
isa/<
/isa.cxx
/isa_properties.cxx
/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.cxx
abi/<
/abi_properties.cxx
proc/<
/proc.cxx
/proc_properties.cxx
/<
_si.cxx
该目录包含了重定向的大部分基本设置。
大多数重定向出错都是由于这个目录中的错误设置,因而所有文件都要仔细编写。
3.编连targ_info
F.处理目录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目录中,将#defineElf32_Byte和Elf64_Byte使能。
若在前端添加了一些新的语意,则需一起更新lexer,parser和声明。
如其一不相匹配,则前端会出现意想不到的问题。
G.创建common/com/<
/config_platform.h
common/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
/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_*文件控制汇编输出,分区类型,重定位等,只有到了后端的重定向时才需要修改这些文件。
基本上需要修改此目录下的每一个文件。
4.编连gccfe
5.编连g++fe
6.编连ir_tools
H.创建be/be/<
和be/com/<
目录
在目录be/be/<
下创建driver_targ.cxx
和fill_align_targ.cxx
在目录be/com/<
下创建betarget.cxx
这里你可以使问题简略化,先使之能运行,最后再进行优化。
例如,可以先设置Can_Do_Fast_Multiply
为FALSE,之后再来处理这个问题。
7.编连be
8.编连libelf
libelfutil
libwarf
libunwindP
I.创建be/cg/<
/register_targ.h
be/cg/<
/tn_targ.h
/op_targ.h
在lib/elf.h中为自己的芯片创建特定的部分(或者适合的elf.h),定义合理的重定位,分区等。
9.编连wopt
J.在be/cg<
中创建文件。
修正cgtarget_arch.h,比如CGTARG_Copy_Op,...
可能需要想be/cg/op.h
中添加信息。
修正cgdwarf_targ.cxx,Find_Spill_TN,...,
在dwarf中解开表。
10.编连cg
11.编连driver.
12.编连ipl
13.编连lno
14.编连inline
15.编连whirl2c
16.编连ipa
2.2注释
在下列注释中,1~4由FredChow和SunChan给出,5~8由我添加。
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/com
intrinsic.def
-定义了INTRINSIC_ID,这是intrinsic的性质(顺序很重要,由INTRINSIC_ID
编序)
kgccfe/gnu中的前端定义文件。
Builtins.def–id,name,prototype,attribute
Builtin-types.def–需要新类型时要更改此文件
Wfe_expr.cxx–将GNUbuiltin翻译成WHIRL.
5.最初要将所有文件修改正确是很不容易的,别担心,可以通过运行,跟踪,调试编译器来修正这写bugs。
当你熟悉此过程后,就可以对这写文件作大的修改。
6.虽然不正确的修改某些文件不会导致编译器出错,但会降低输出代码的质量。
例如,若
CGTARG_Compute_Branch_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_Slots来使能延时槽。
2.3重定向结果
2.3.1机器参数
处理器:
龙芯2f,订单
ISA:
MIPS3
主频:
666MHz
版次:
4
ALU:
2
FALU:
MEM单元:
1
2.3.2稳定性
在O3选项下,该编译器已经通过斯坦福基准(Stanfordbenchmark)和Stepanov编写的抽象延迟基准(Abstractionpenaltybenchmark)。
这表明适用于MIPS的编译器的大体框架已经成型,C和C++前段能正常工作,大部分优化也能实现。
2.3.3性能及分析
性能应该由SPEC和其他基准来标定,但我还没有进行过此类测试。
因此贴出斯坦福基准和抽象延迟基准的结果。
斯坦福基准(-O2)
测试案例大小时间
bubble100001.27
qsort10000000.71
queen120.26
matmul4001.50
perm101.54
sieve10000000.76
抽象延迟基准(大小:
2000,迭代次数:
250000)
选项(-O2)
测试序号
绝对时间(秒)
每秒加法次数(M)
对测试0的比例
5.28
94.70
1.00
5.84
85.62
1.11
3
5.42
92.25
1.03
7.16
69.83
1.36
5
5.39
92.76
1.02
6
7.55
66.23
1.43
7
5.87
85.18
8
8.21
60.9
1.55
9
5.89
84.89
1.12
10
8.18
61.12
11
6.45
77.52
1.22
12
9.29
53.82
1.76
平均值
6.48
77.12
1.23
总时间:
85.81s
抽象延迟:
***************************************************************************
选项:
(-O2-PHASE:
P)
7.60
65.79
1.44
7.88
63.45
1.49
8.04
62.19
1.52
5.29
94.52
8.46
59.10
1.60
6.17
81.05
1.17
81.83s
(-O3)
68.82s
抽象延时基准的性能分析:
众所周知,本台机器的峰值性能应为其主频,即666M每秒,但事实与峰值差距巨大。
我总结原因于此,所有这些问题都是我将来的工作方向。
1.正确设置指令调度中的指令延迟
.LBB21__Z5test0PdS_:
addiu$2,$2,32
ldc1$f3,-32($2)
ldc1$f2,-24($2)
ldc1$f1,-16($2)
add.d$f3,$f3,$f0
ldc1$f0,-8($2)
add.d$f2,$f2,$f3
add.d$f1,$f1,$f2
bne$2,$16,.LBB21__Z5test0PdS_
add.d$f0,$f0,$f1
这是内核的汇编代码,展开4次。
FALU延迟为6个机器周期。
因而展开银子太小了。
2.运用底部装载(Bottomloading)来隐藏装载延时。
2.3.4已知问题
在“抽象延时基准的性能分析”部分,除上所述之外还有一些其他问题。
1.编译器目前仅支持MIPS4ISA,要同时支持其他ISA则需更新CG。
2.在生成的.s文件中,展开信息有些问题,需要后续处理。
3.共享对象的编译还未经测试。
3.关于从零开始重定向的讨论
我很幸运可以以SL的编译器作为重定向的基础。
但是如果你在当今的OPEN64版本中找不到一个类似的平台,那么需要特别关注那些问题呢?
本节我将对此进行简要讨论。
回顾FredChow建议的重定向步骤,我将讨论若从零开始,哪些步骤将更复杂。
很显然我们不需要管编连步骤,因而只需关注文件创建步骤。
1.步骤A,B,C没有任何不同。
2.步骤D:
config_targ.h不是问题。
即使可以找到类似处理器仍然要进行这一步。
因而相较于第二节,这一步需要做更多工作。
3.步骤E:
该组文件需要更多工作。
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:
现在还有三组文件需要进一步讨论,他们使用在步骤E,G和J中。
大部分只需从现成的目标机目录中拷贝,浏览一边并根据你的处理器做少许修改。
这并不难但是得花时间,例如,你需要在isa_operands.cxx中描述每条指令的操作树。
但有几个文件需要从头写起。
比如所有的exp_*.cxx,因为exp_*.cxx文件将WHIRLS翻译为指令,所以要全部重写。
简要总结一下,所有需要修改的文件都在2.1和2.2节中有提及。
如果OPEN64版本中存在类似目标机器,你就可以剪切这些文件。
反之,若要从零开始,则需以其他目标机器的文件当作模版,一行一行的编写某些文件。
4.与GCC重定向的比较
GCC是另一个流行的可重定向的编译器架构。
因此,本节我们从适应性和性能两个方面比较重定向的OPEN64和GCC。
4.1适应性比较
与OPEN64类似,重定向GCC的大部分工作也是处理ISA,ABI,处理器和但吗生成。
开发人员需要编连机器描述,包括md文件,C文件和一系列头文件。
GCC的机器描述包含如下信息:
1.处理器系统结构—功能行为,指令的可选资源使用,字节顺序和内存寻址能力等
2.ABI—寄存器使用,函数调用公约等
3.源语言数据类型的层次—int,float和char的大小等
4.二进制文件的格式—对象和可执行文件的格式,调试信息的格式。
5.编译环境--汇编器,连接器和库的公约,系统头文件和库的位置等。
考虑这些问题时,应考虑到ISA和代码生成在md文件中,ABI和处理器信息在头文件中,机器相关的子程序在C文件中。
回到OPEN64,我们可以发现其与GCC的不同。
在OPEN64中,ISA定义在一组文件中,每个文件描述一部分ISA,而GCC刚好相反,它将几个问题集中到一个大文件中,比如.md文件。
从讨论中看出,GCC和OPEN64的重定向要求开发者熟悉编译器。
同时我不认为二者在重定向的适应性上有较大差别。
4.2性能比较
虽然机器相关优化和性能调整对于编译器重定向是必要的,我们仍然希望在重定向步骤后得到更高的性能。
作为后续优化和调整的基础性能,是越高越好。
我将比较仅仅进行重定向后得到的性能,仍然以抽象延时基准作为焦点。
*******************************************************************************
-O3,GCC版本:
4.1.2
7.54
66.31
98.01s
回顾OPEN64的性能,97.4M次加法每秒,OPEN64可以为后续的机器相关的优化提供更好的性能基准。
5.结论
在本报告中,我展示了将OPEN64重定向至MIPS平台的经验。
获得的稳定性和性能都经过了讨论。
我还讨论了从零开始重定向OPEN64的复杂性。
对比GCC,重定向OPEN64可以提供更高的性能基准而不会增加复杂度。
致谢
非常感谢SunChan在实验期间给与我的指导以及珍贵的意见和鼓励。
感谢GuangR.Gao教授给予我这次机会。
感谢FredChow的文章““pro64重定向的建议步骤”。
感谢FengXiaobing教授的支持与建议。
感谢HuoWei分享他的重定向GCC的经验。
还要感谢ICT和SimplightNanoelectronics成员们的帮助和讨论。
参考文献
【1】OPEN64主页
【2】W.J.Price.Abenchmarktutorial.IEEEMicro,9(5):
28--43,Oct.1988
【3】AlexStepanov.AbstractionPenaltyBenchmark,version1.2(KAI).Silicon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Open64 定向 技术 报告 RetargetOpen64technicalreport 中文翻译
![提示](https://static.bdocx.com/images/bang_tan.gif)
链接地址:https://www.bdocx.com/doc/18908086.html