在龙芯3A5000上测试SPEC CPU 2006

本文详细介绍了如何在龙芯3A5000处理器上从头编译并运行SPEC CPU 2006测试工具。内容包括获取光盘镜像、安装过程、编译测试工具时遇到的错误及其解决方案,以及最终在龙芯3A5000上进行性能测试的步骤和测试结果的初步解读。文章强调了在没有预编译二进制支持的新架构上编译SPEC CPU 2006的挑战,并提供了针对LoongArch架构的解决方法。
摘要由CSDN通过智能技术生成

  SPEC CPU 2006 benchmark是一种行业标准化的CPU测试基准套件,重点测试系统的“CPU-内存”子系统以及编译器的优化程度。看软件的名字就知道,这个测试工具主要是测试CPU,内存对测试成绩的影响没有CPU那么大。根据我在不同的电脑上反复更换硬件实测比较得知,硬盘等其它设备的性能对测试成绩几乎没有影响。

  SPEC CPU 2006整套工具分成两个部分,一是测试工具(tools),二是测试基准(benchmarks),基准中包含int和fp两种测试集,int测试集中有12个测试项目,fp测试集中有17个测试项目。运行SPEC CPU 2006测试时,是测试者运行测试工具,再由测试工具根据预先配置的编译器及编译参数去自动编译各个测试项目,编译完成后再自动运行测试集,由测试工具统计测试集中每个项目的运行时长,给出最后的评价分数。

  SPEC CPU 2006的工具提供了部分平台的预编译二进制,文件在$SPEC/tools/bin/目录下,在有预编译工具的平台上就可以直接运行 install.sh 或 install.bat 进行安装。下图中是SPEC CPU 2006 1.2(Version 119 - 2021/8/16)版光盘中全部的测试工具的预编译二进制,可见用于x86/AMD64的预编译二进制最为齐全,既有Linux也有Window版本,可以直接安装。而对MIPS则没有Linux系统的二进制,对ARM架构也没有预编译二进制,都必须自行编译测试工具。LoongArch是一种全新的架构,也肯定不能指望SEPC 2006在十年前的光盘中就做好支持的准备。

  按照SEPC官网上《Building the SPEC CPU2006 Tool Suite》的说明:“有时可能需要重建工具,例如,如果操作系统的变化使预编二进制无法操作,或者如果您是第一个为新架构添加支持的人。”那么,当测试工具的预编译二进制在某些系统上不能运行时,或者当缺少某个架构的预编译二进制时,就应该自己编译测试工具。

  有一些网友因为在x86上测试SPEC CPU 2006时可以直接安装,就认为安装SPEC根本不需要自己编译,这是没有分清Tools和Benchmark而造成的误解。如果一款软件在任何架构的CPU和任何系统上都能直接安装使用,那么也就不会存在软件生态的问题了。

  SPEC CPU 2006 1.2发布时,GCC的版本还是4.x。由于GCC版本更新,部分.h文件有修改,glibc库也迭代了多个版本,在现在的各个Linux发行版上用较新的GCC版本已经不能把测试工具直接编译通过。

  《SPEC CPU2006: Read Me First》中提到,如果工具无法在系统上运行或构建时,应该联系SPEC以获得技术支持。然而,电脑爱好者研究和学习性质的测试,去找SPEC技术支持就小题大作了(因为不想给钱),所有的问题咱们都自己解决。在网上早有一些文章探讨了在GCC8.x甚至更高版本上编译SPEC CPU 2006测试工具出现的问题,并给出了解决方法,我想SPEC的技术支持可能也不会有什么创新,毕竟有些问题只能那样解决。本文也只是把这些文章中提到的解决方案进行了一番整合。

  LoongArch是一个全新的架构,在龙芯3A5000上编译SPEC CPU 2006测试工具比在龙芯3A4000上更加麻烦。我在ARM64架构的树莓派4B(Ubuntu、GCC10.3)环境下编译时遇到的问题比基于LoongArch64的3A5000(Loongnix、GCC8.3)的更多,应该是GCC版本更高的原因。但本文主要记录在3A5000(Loongnix、GCC8.3)上编译SPEC CPU 2006测试工具的过程,对其它架构和GCC版本不作细致讨论。对文中这些问题的解决方式,在其它架构的CPU上编译SPEC CPU 2006测试工具时也能用到。

SPEC CPU 2006光盘镜像的获取

  SPEC CPU 2006是一个收费的测试工具,可以向SPEC购买,但官网上现在只能下SEPC CPU 2017版本的订单,已经没有2006了。2017的非商用授权价$250,商用$1000。出于研究和学习的目的,SPEC CPU 2006有一些光盘镜像在技术爱好者间私下扩散,可以去一些交流CPU技术的聊天群里问一问。只是这种没给钱的镜像按《著作权法》的规定,只能用于教学或者科学研究,可少量复制供教学或者科研人员使用。

  拿到光盘镜像后,请检查一下版本。

  官方发布的SPEC CPU 2006最终版本是 v1.2,发布日期是2011年9月7日,光盘中记录的最后更新日期是2011年8月16日。官网上公布的v1.2版光盘镜像文件的MD5校验码是“185F9167FB4C2208380E769D6668285D”,我确认自己手上的光盘镜像的MD5校验码和官网上的一致。

  $CDROM/version.txt 里面是版本号,如果低于v1.2,那么编译测试工具时,需要解决的问题会更多,测试成绩也不能与v1.2版完全等同。

在Linux中安装有预编译二进制程序的SPEC CPU 2006

  SPEC CPU 2006对x86/AMD64几乎有全平台的预编译二进制支持,在使用x86/AMD64 CPU的电脑上,就可以直接运行intsall.sh或install.bat进行安装。下面以在UOS for x86中安装SPEC CPU 2006为例,说明安装步骤。

  1.打开终端程序,进入存放光盘镜像的文件夹,输入命令挂载光盘镜像。

sudo mount -t iso9660 SPEC_CPU2006v1.2.iso /mnt

  有的Linux系统的图形界面提供了挂载光盘镜像的简单操作,在文件管理器中的光盘镜像文件上点鼠标右键,如果右键菜单中有挂载光盘镜像的功能项,就不需要输入命令了。

  2.进入到光盘镜像的挂载目录,运行安装程序。

cd /mnt
./install.sh

  然后会出现输入安装路径的提示:

  3.如上图所示,例如先在/home/guee下建立了一个cpu2006文件夹,就输入完整路径 /home/guee/cpu2006,之后回车。注意安装路径中不要有中文,不然在运行时可能会出现一些奇怪问题。然后安装程序会询问你源路径和目标路径是否正确,输入yes确认即可。

  在之后安装程序就会把测试工具复制到安装目录,并解压benchmarks的所有测试项目源码,最后测试一番perl脚本,就会给成安装成功的信息。

  在x86上安装很简单,那么在其它平台呢?比如在SPEC CPU 2006中没有预编译支持的ARM平台上,我们也来试一试能不能直接安装。下面我们在运行Ubuntu的树莓派4B中看看安装SPEC CPU 2006是什么情况,前面要求输入安装路径和确认的步骤还是一样,只是在确认后并没有开始安装,而是给出了一段文字信息:

  这段文字的大意是说:“我们似乎没有适用于您的架构的供应商提供的二进制文件,您必须自己编译工具二进制文件,请阅读tools-build.html获得如何构建它们的说明。

  在龙芯3A4000和3A5000上运行install.sh也是给出这样的信息,就是告诉我们需要自己编译测试工具。

自己编译SPEC CPU 2006测试工具的初始准备

  光盘中的测试工具默认没有MIPS/LoongISA/LoongArch等架构的Linux版二进制程序,需要自行编译才能使用。下面以Loongnix20系统为例,进行编译前的准备工作。

  1.在编译之前,先要准备好编译器:

sudo apt-get install gcc g++

  如果准备在测试工具编译完成后测试fp(浮点性能),还需要安装gfortran编译器。

sudo apt-get install gfortran

  2.找到光盘根目录下的 intall_archives 文件夹,里面的cpu2006.tar.xz就是测试工具以及Benchmarks的所有测试项目的源码。如果不想挂载ISO,也可以用压缩软件打开iso文件,只把cpu2006.tar.xz这一个文件提取出来。

  3.把cpu2006.tar.xz解压到硬盘上的文件夹中,例如 /home/guee/cpu2006。解压出来的文件与用install.sh安装到目标路径的内容基本一样,只是少了测试工具的二进制文件,但是多出了一个tools文件夹,$SPEC/tools/src里面就是测试工具的源代码

  我们需要运行$SPEC/tools/src文件夹中的buildtools来编译测试工具,测试工具由许多功能模块组成,上图的各个文件夹大部分都是测试工具的组成部分。其中一部分是用于检查系统环境和各种API功能是否正确的,还有一些是用来监督测试过程和生成测试报告的。由于测试工具不像测试集那么内聚,对系统中的部分基础库有版本依赖,与较新版本的GCC默认情况下也存在不兼容的问题,用GCC8.x直接编译肯定会失败,因此就需要修改测试工具中的一些配置文件和源码。

  注意:只能修改测试工具的源码,不能修改测试集的源码。首先测试集源码不允被修改,测试时会自动校验测试集的源码有没有被修改,如果修改过就不能通过验证进行测试。何况测试集的源码对系统环境依赖很小,在各种平台都能正确编译,本身就不需要修改。

解决SPEC CPU 2006测试工具构建过程中的错误

  0.写在前面

  由于操作系统、基础库、编译器等等升级,在新平台上构建一套有历史的软件肯定不会一帆风顺。必要的时候还需要对软件源代码进行修改,这也是开源的意义所在。但是对于SPEC CPU2006这种标准化的测试工具而言,允许改动的只有Tools部分,而不含Benchmark部分。其官网上的《Runspec Avoidance》一文甚至是在讲解不使用To

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值