【源码透彻分析】【mide指标源码】【ioc指标源码】speccpu源码
1.speccpuԴ??
2.SPEC CPU 2006çä»ç»
3.处理器性能测试基准平台与测试指标
4.对比Unmatched上GCC和LLVM的SPEC CPU2017的性能差异
speccpuԴ??
为了在unmatched系统上编译、安装和移植SPEC CPU ,首先需要检查系统信息如下: Linux ubuntu 5..0--generic #-Ubuntu SMP Tue Sep :: UTC riscv riscv riscv GNU/Linux 然后,需要安装编译工具:gcc, g++, gfortran。检查安装是否正确,复制SPEC CPU 源码。源码透彻分析 因为SPEC CPU 源码中自带的toolset不支持RISC-V,需自行编译。安装并检查gcc、g++、gfortran后,将spec cpu 源码复制出来,替换旧的config.guess, config.sub文件,使用最新版本的文件。 接下来,在toolset源码路径下执行./buildtools编译toolset。在编译过程中,可能会遇到错误,需解决如下问题:出现__alloca'和__stat'未定义错误:注释掉glob/glob.c文件中第和第行。
出现重复定义错误:执行export CFLAGS="$CFLAGS -fcommon"。
'gets' undeclared错误:注释掉stdio.in.h中的相应行。
pow、mide指标源码floor、fmod、sin等函数未定义:执行export PERLFLAGS="-A libs=-lm -A libs=-ldl -A libs=-lc -A ldflags=-lm -A cflags=-lm -A ccflags=-lm -Dlibpth=/usr/lib/riscv-linux-gnu -A ccflags=-fwrapv"。
error building Perl错误:修改Configure文件中的相关行。
error running TimeDate-1.测试套件:修改getdate.t文件中的第行。
解决上述错误后,再次编译toolset,若部分Perl测试项未通过,输入y确认。编译成功后,验证工具集构建是否正确。在指定目录下创建文件夹并打包toolset,生成tar文件。 之后,在同一目录下运行install.sh进行安装。遇到错误时,查看runspec-test.linux-riscv.out文件,并在perl-5..3/Configure文件中添加代码。重新编译并打包工具集后,再次安装以解决校验和检查错误。 最后,ioc指标源码如果希望直接在其他unmatched上移植已编译并打包的工具集,按照上述操作执行即可。这样,无需重复编译过程,便可以直接进行SPEC CPU 的测试。SPEC CPU çä»ç»
SPECæ¯æ åæ§è½è¯ä¼°å ¬å¸ï¼Standard Performance Evaluation Corporationï¼çç®ç§°ãSPECæ¯ç±è®¡ç®æºååãç³»ç»éæåã大å¦ãç 究æºæãå¨è¯¢çå¤å®¶å ¬å¸ç»æçéè¥å©æ§ç»ç»ï¼è¿ä¸ªç»ç»çç®æ æ¯å»ºç«ãç»´æ¤ä¸å¥ç¨äºè¯ä¼°è®¡ç®æºç³»ç»çæ åãSPEC CPU æ¯SPECç»ç»æ¨åºçCPUåç³»ç»è¯ä¼°è½¯ä»¶ææ°çï¼å¨æ©äºå¹´ï¼ä¸ç使ç¨çæ¯å ¶ä¸ä¸ä¸ªçæ¬SPEC CPU ãåSPEC CPU ä¸æ ·ï¼SPEC CPU å æ¬äºCINTåC FP两个å项ç®ï¼åè ç¨äºæµéå对æ¯æ´æ°æ§è½ï¼èåè åç¨äºæµéå对æ¯æµ®ç¹æ§è½ï¼SPEC CPU ä¸å¯¹SPEC CPU ä¸çä¸äºæµè¯è¿è¡äºå级ï¼å¹¶æå¼/å å ¥äºä¸äºæµè¯ï¼å æ¤ä¸¤ä¸ªçæ¬æµè¯å¾å并没æå¯æ¯è¾æ§ã
SPEC CPUæµè¯ä¸ï¼æµè¯ç³»ç»çå¤çå¨ãå ååç³»ç»å使ç¨å°çç¼è¯å¨ï¼SPEC CPUæä¾çæ¯æºä»£ç ï¼å¹¶ä¸å 许æµè¯ç¨æ·è¿è¡ä¸å®çç¼è¯ä¼åï¼é½ä¼å½±åæç»çæµè¯æ§è½ï¼èI/Oï¼ç£çï¼ãç½ç»ãæä½ç³»ç»åå¾å½¢åç³»ç»å¯¹äºSPEC CPUçå½±åé常çå°ã
An ounce of honest data is worth a pound of marketing hypeï¼ä¸çå¸è¯å®çæ°æ®å¼å¾ä¸ç£ çå¸åºå®£ä¼ ï¼æ¯SPECç»ç»æç«ç座å³éï¼ä¸ºäºä¿ææ°æ®çå ¬å¹³ãå¯ä¿¡åº¦ä»¥åææï¼SPEC CPUæµè¯ä½¿ç¨äºç°å®ä¸ççåºç¨ç¨åºï¼èä¸æ¯ç¨å¾ªç¯çç®æ¯æä½æ¥è¿è¡åºåæµè¯ãSPEC CPU å æ¬äºé¡¹æ´æ°è¿ç®å项浮ç¹è¿ç®ï¼é¤æ¤ä¹å¤ï¼è¿æ两个éæºæ°äº§çæµè¯ç¨åº.sperandï¼æ´æ°ï¼å.specrandï¼æµ® ç¹ï¼ï¼å®ä»¬è½ç¶ä¹å å«å¨å¥ä»¶ä¸å¹¶å¾å°è¿è¡ï¼ä½æ¯å®ä»¬å¹¶ä¸è¿è¡è®¡æ¶ä»¥è·å¾å¾åãè¿ä¸¤ä¸ªæµè¯ä¸»è¦æ¯ç¨æ¥éªè¯ä¸äºå ¶ä»ç»ä»¶ä¸ä¼ç¨å°çPRNGéæºæ°çæåè½çæ£ç¡®æ§ãå个æµè¯ç»ä»¶åºæ¬ä¸ç±CåFortranè¯è¨ç¼åï¼æ7个æµè¯é¡¹ç®ä½¿ç¨äºC++è¯è¨ï¼èFortranè¯è¨åç¨æ¥ç¼åæµ®ç¹é¨åã
CINTå æ¬Cç¼è¯ç¨åºãéå计ç®æºä»¿çãä¸è±¡æ£ç¨åºçï¼CFPå æ¬æéå 模åç»æåç½æ ¼æ³ãååå¨åå¦è´¨ç¹æ³ãæµä½å¨åå¦ç¨ç线æ§ä»£æ°æ³çã为äºç®åæµè¯ç»æï¼SPECå³å®ä½¿ç¨åä¸çæ°åæ¥å½çº³ææç§æ´æ°åºåç¨åºãå ·ä½æ¹æ³æ¯å°è¢«æµè®¡ç®æºçæ§è¡æ¶é´æ ååï¼å³å°è¢«æµè®¡ç®æºçæ§è¡æ¶é´é¤ä»¥ä¸ä¸ªåèå¤çå¨çæ§è¡æ¶é´ï¼ç»æ称为SPECratioãSPECratioå¼è¶å¤§ï¼è¡¨ç¤ºæ§è½è¶å¿«ï¼å 为SPECratioæ¯æ§è¡æ¶é´çåæ°ï¼ãCINTæCFPç综åæµè¯ç»ææ¯åSPECratioçå ä½å¹³åå¼ã
处理器性能测试基准平台与测试指标
SPEC,全称为标准性能评估公司(Standard Performance Evaluation Corporation),是由计算机厂商、系统集成商、大学、研究机构、咨询等多家公司组成的非营利性组织。该组织旨在建立和维护一套用于评估计算机系统的标准。
SPEC CPU是SPEC组织推出的CPU子系统基准测试程序,测试程序以源码形式发布,包含多种改进后的实际应用程序,可以在多种体系结构上运行。在SPEC CPU测试中,测试系统的处理器、内存子系统和使用到的编译器都会影响最终的测试性能,而I/O(磁盘)、geth源码课程网络、操作系统和图形子系统对于SPEC CPU 的影响非常小。目前,SPEC CPU的最新版本是SPEC CPU ,最早的是SPEC CPU 。
SPEC CPU测试类型包括两种:整型运算和浮点运算。
SPEC CPU性能测试包括两个部分:速度测试和吞吐量测试。它们分别被称为speed模式和rate模式。其中speed是针对单任务的计算速度测试,rate针对系统运行多任务的吞吐量进行测试。默认使用SPEED模式进行测试,如需使用RATE模式进行测试,需要在runspec的参数中加上--rate。
每种模式都有基值(Base)和峰值(Peak)两个性能衡量指标,base测试对编译有严格的规定,比如仅允许使用一种编译器、编译优化选项不能超过4个等等;而peak测试中可以针对不同的测试项目使用不同的编译器和不同的优化选项,从而让各项测试的测试结果达到最优。
1.1 SEPC CPU
SPEC CPU 中包含两套测试套件:CINT和CFP。其中CINT共有个测试项目,用于评估CPU整型运算的jdk源码环境性能;CFP共有个测试项目,用于评估CPU浮点运算的性能。这个测试项目使用了C、C++、Fortran共三种语言。
1.1.1 测试内容
SPECCPU默认使用base进行测试,用户可以在runspec的参数中,加上—tune=base或者—tune=peak手动指定测试模式,如果两种模式都需要测试,则可以指定—tune=all。
整型测试项
浮点型测试项
1.1.2 测试数据
报告地址:spec.org/cpu/result...
参数解释:
Seconds:对于speed测试,表示基准测试运行的时间,单位s;
对于rate测试,表示吞吐量运行时第一个副本开始到最后一个副本结束之间的时间量。
Ratio:基准运行时间与参考平台运行时间的比率,即被测计算机的执行时间除一个参考处理器的执行时间,目的是将被测计算机的执行时间标准化,Ratio值越大,表示性能越强。
Copies:吞吐量测试时,同时运行的基准测试副本的数量。
Base与peak的计算:测试三次,选择每组测试的中位数,再计算每项测试Ratio的几何平均值。
1.2 SEPC CPU
1.2.1 测试内容
整型测试项
浮点测试项
1.2.2 测试数据
报告地址:spec.org/cpu/result...
参数含义同1.1.2。
1.3 优化内容
以性能为主,不考虑功耗的问题,以结果发布为目的。
2. Geekbench
Geekbench是一款跨平台的处理基准测试程序,评分系统可分为单核与多核性能,以及模拟真实使用场景的工作负载能力。有geekbench2、geekbench3、geekbench4以及最新geekbench5,geekbench4以i7-U的结果分为基准,geekbench5以i3-U的结果分为基准,分数越高,性能越好。
2.1 测试内容
Geekbench5通过执行任务和应用程序的测试来评估硬件性能,分数越高性能越好,分数加倍表示性能加倍。
2.2.1 CPU Workloads
Geekbench5将CPU workload分为两个部分:单核workload和多核workload。
Crypto:加密工作负载通过执行大量使用加密指令的任务衡量计算机的加密指令性能。
Integer:整型工作负载通过执行大量使用整型指令的处理器密集型任务来衡量计算机的整型指令性能。所有的软件都使用了大量的整数指令,因此整型分数越高表示整体性能越好。
Floating Point:浮点型工作负载通过执行大量使用浮点运算的各种处理器密集型任务来评估浮点计算性能。浮点计算性能在视频游戏、数字内容创建和高性能计算应用程序中尤为重要。
CPU benchmark分数用于评估和优化CPU和内存性能,使用的workload包括数据压缩、图像处理、机器学习和物理模拟。对于各种应用程序(包括web浏览器、图像编辑器和开发人员工具)来说,这些workload的性能或者很重要。
Geekbench5提供两个综合分数:单核与多核。这些分数是通过分段分数的加权平均数计算的。分段分数是使用该分段中包含的workload分数的几何平均值计算的。
2.2.2 CPU Compute Workloads
计算Benchmark分数用于使用包括图像处理、计算摄影、计算机视觉和机器学习在内的workload来评估和优化 GPU 计算性能。 这些workload中的性能对于包括相机、图像编辑器和实时渲染器在内的各种应用程序都很重要。
Geekbench 5按照测试内容运行workload,默认情况下,每个workload运行次。Geekbench 5的总分有各个Compute workload的得分求几何平均值得到。
每个Compute workload对每个受支持的Compute API都可以实现,API之间的分数也可以比较,但是有由于Compute API的性质,性能差异可能不仅受底层硬件的影响,GPU驱动程序也可能对性能产生巨大影响。
3. CoreMark
CoreMark是一个综合基准,用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在年由eembc的shay gal-on开发的,旨在成为一个行业标准,取代过时的dehrystone基准。代码用C编写,包含以下算法:列表处理(增删改查和排序)、矩阵操作(公共矩阵操作)、状态机(确定输入流是否包含有效数字)和CRC。
CoreMark的测试方法是,在某个配置参数组合下单位时间内跑了多少次CoreMark程序,其指标单位为CoreMark/MHz。CoreMark数值越大,性能越强。
3.1 测试内容
3.1.1 链接列表
函数
描述
此Benchmark所做的项目:
3.1.2 矩阵操作基准
函数
描述
Matrix manipulation benchmark构成了许多更复杂算法的基础。紧密的内部循环是许多优化(编译器以及基于硬件)的重点。
此Benchmark所做的项目:
3.1.3 状态机基准
函数
CoreMark中使用状态机的主要目的是为了测试switch/if的运转情况
对比Unmatched上GCC和LLVM的SPEC CPU的性能差异
最近,SPEC CPU发布了V1.1.9版本,特别针对Linux on RISC-V平台进行了优化,使得用户无需自行构建工具集,只需在联网状态下通过runcpu --update即可完成升级。测试焦点在于GCC和LLVM在Unmatched环境下的SPEC CPU性能对比,使用的GCC版本为.1.0,而LLVM版本则是.0.0。
所有测试都基于源码编译,GCC的分支是riscv-gcc-.1.0,commit ID为b5c,LLVM的分支是main,commit ID为7fdee6e0aaa4adfce3。SPEC CPU的执行命令是标准配置。
比较结果显示,在INT性能测试中,GCC在大部分子项目中略微优于LLVM,仅在x一项中,LLVM稍胜一筹。然而,LLVM在leela子项上未能正常运行,导致这部分结果无法直接对比。
在FP测试中,LLVM遇到问题,其中五个Fortran程序(,,,,,,,,)无法完成,而在FPSPEED性能上,GCC在和子项上表现出显著优势。至于FP性能,LLVM在和子项上超越了GCC。
总结来说,GCC和LLVM在Unmatched上的SPEC CPU性能对比显示,两者在不同测试部分有所优劣,GCC在INT部分总体表现更稳定,而LLVM在FP部分存在一些运行问题。