论文部分内容阅读
应用程序对计算机硬件特别是处理器的性能要求越来越高,尽管32位处理器还在使用,但64位处理器已经越来越多的受到人们的关注。相对于32位处理器,64位处理器能直接进行64位的整点运算,通常还能表示更大的地址空间,能满足日益增长的性能和数据大小的需求。然而要实现真正意义上的64位计算,不仅需要64位处理器的支持,还必须得有配套的编译工具链、操作系统以及应用软件。编译工具链是一套将C、C++、Java等高级语言源代码编译成对应的目标机器二进制文件的系统软件套件。它先通过编译器将高级语言源代码编译成目标机器相关的汇编语言,然后再通过汇编器将对应的汇编语言源代码翻译成目标机器二进制文件,最后通过链接器把目标文件以及目标文件依赖的库文件链接生成可执行文件或者库文件。其中汇编、链接过程需要对应的二进制工具汇编器、链接器来完成。 本文以UniCore体系结构为平台完成了两部分的工作,首先面向64位UniCore体系结构的二进制工具的分析与移植;然后基于该二进制工具为运行时堆内数据排布进行了优化。其中本文的移植工作基于GNUBinutils,优化工作基于内存分配函数展开。本文首先介绍了Binutils的基本组成,并且分析了二进制文件描述符库(BFD)对二进制工具的支持,同时对Binutils里的两个重要的二进制工具汇编器和链接器进行了分析。基于对GNUBinutils的分析,我们将GNUBinutils移植到64位UniCore体系结构,并且进行了正确性验证,最后总结了体系结构从32位向64位扩展时对主要的二进制工具汇编器和链接器的影响。本文还讨论了运行时刻堆内数据排布的优化技术,通过对内存管理模块的重新设计,使得程序在运行时刻调用内存分配函数在堆内分配内存时获得程序的控制权,通过识别调用内存分配函数的包装函数,找到真正的调用点,基于调用点信息及所要分配的对象大小进行亲和性分析,指导数据分配与排布以提高空间局部性。本文选用SPEC2000整点测试集作为评测集,在UniCore体系结构上对优化方案进行了评测,结果表明该技术可在程序运行时进一步优化性能。