论文部分内容阅读
处理器的设计研发过程需要编译器作为实现系统级测试的辅助工具。同样,如果要充分发挥处理器的性能,除了要有性能优越的硬件设备外,也需要性能优越的操作系统和编译器的支持。龙芯系列处理器作为国产的高性能通用处理器,由于采用了先进的结构设计技术,在国内的处理器设计研发领域已经处于领先地位,在世界范围内也即将步入先进行列。
目前为止,龙芯上采用的是开源编译器GCC(GNU Compiler Collection)。GCC支持多语言和多目标平台的特性,使得GCC 编译器具有良好的可移植性。而其丰富的代码优化机制,也使得我们可以针对目标平台的体系结构特点,来对GCC编译器进行优化,从而提高GCC编译器在目标平台上的性能。本文就分别针对龙芯系列处理器中的两款——龙芯2F和龙芯3B 处理器的体系结构的不同特点,对GCC编译器进行了移植与优化,从而达到提高系统性能的目的。
GCC 编译器可以直接运行在龙芯2F上,但是性能还有很大的提升空间。本文实现了GCC 对龙芯2F 扩展指令的支持,并针对这这些扩展指令实现了相应的窥孔优化。然后对GCC 实现的循环展开与手工循环展开做了性能比较,并对循环因子对性能的影响进行了分析。实验结果表明:窥孔优化能够使编译器更多的生成龙芯2F的扩展指令,而使用移植后的GCC 编译FFTW 库,平均性能也有6%~8%的提升。而GCC的循环展开在龙芯2F上可获得约13%的性能提升,但相比于手工循环展开获得的性能收益,仍然有很大差距。
龙芯3B 实现了对多媒体指令的扩展,因而针对龙芯3B 完成的主要工作是实现GCC 对龙芯3B 扩展指令的支持。龙芯3B 提供了256 位的向量寄存器,但是提供的访存宽度却是128 位,因而本文首先实现了GCC 对龙芯3B的128 位访存以及327条多媒体的支持。不过,由于GCC编译器前端自动向量化的限制,使得移植后的编译器在生成汇编代码时,使用到的向量指令非常的少,这大大限制了系统性能。为了解决这个问题,本文同时实现了GCC对与向量指令相对应的内建函数的支持。测试结果表明:向量化移植后的GCC 编译器能够正确的编译生成龙芯3B 支持的多媒体扩展指令,而且部分基准测试程序的性能提升可以达到4 倍左右。而使用内建函数修改后的代码的指令数目也会大大的减少,达到了提高系统性能的目的。