理论性能测试

LMbench是一款历史悠久的性能评测工具,被广泛应用于UNIX/Linux环境下的系统性能评估。它包含了一系列测试程序,可以对不同层面、不同子系统进行专项测试。随着应用模式的变化,新版本的LMbench中也不断加入有针对性的测试程序,保持了评估模型的准确性。本次我们采用了LMbench最新的3.07a版,利用其中附带的lat_ops和par_ops两个程序,测试不同指令集版本、处理器类型及ABI模式下指令执行的相关性能,从而考察GCC 4.4对龙芯2F处理器的支持程度。作为对比,我们也将源代码编译为匹配MIPS1指令集与MIPS R4600处理器的版本进行了测试。前者是目前支持MIPS的Linux二进制发行版使用的编译模式,后者是中科龙梦在GCC 4.4发布前官方建议的优化设置。

 

lat_ops的功能很简单,就是考察对不同变量类型执行操作所需的时间。可以看到,即使针对龙芯2F和R4600处理器进行优化,很多操作所需要的时间也与按MIPS1指令集架构编译后的成绩相差无几。变化主要发生在对64位整型变量的操作方面,测试程序针对龙芯2F与R4600编译后的运行速度普遍有所提高,各别测试结果发生了数量级上的变化。在对64位整型变量进行整数除法与取余数操作时,n32与n64模式下执行速度提高4倍,体现了不同ABI的差异。基本可以认为,对于lat_ops所测试的指令,GCC 4.4针对龙芯2F和R4600处理器进行编译的效果相仿,二者均略优于MIPS1。

 

与lat_ops相比,par_ops更像是一个进阶测试。通过对前者的修改与扩展,par_ops着力于体现处理器在指令层面的并行处理能力。它使用了一些类似教科书上讲述并行计算时采用的示范代码,只要处理器与编译器支持,就可以以并行方式同步执行,其结果反应了每指令周期不同操作达到的并行度。这部分的测试结果比较混乱,除了一些并行度相同的操作外,很难在其他项目中寻找一个线形的变化规律。纵向的比较反而更容易说明问题,o32模式和针对MIPS1指令集架构编译的代码并行度相对较低,n32模式下针对R4600处理器编译的代码则在很多操作中拥有最高的并行度。GCC 4.4对龙芯2F处理器的优化能力似乎还有提升的空间,虽然n64模式下针对龙芯2F编译的代码执行并行度最高,但在o32和n32模式下,对浮点型变量的操作并行度与R4600还有明显差距。

总体来说,在指令层面,使用GCC 4.4针对龙芯2F进行优化编译的效果还是比较明显的,这一点在64位环境下尤为突出。我们还使用-O2与-O3参数分别编译了针对龙芯2F、n32模式优化的代码,考察两者之间的性能差异。也许是测试程序的代码太过简单,lat_ops与par_ops靠进一步优化获得的性能提升与编译增加的时间绝不成正比。


相关内容