面向AArch64架构的CPU指令微基准测试方法及系统技术方案

技术编号:32785691 阅读:19 留言:0更新日期:2022-03-23 19:45
本发明专利技术公开了一种面向AArch64架构的CPU指令微基准测试方法及系统,本发明专利技术方法包括通过编写汇编代码,在汇编代码中循环调用若干条连续的被测试汇编指令,并通过特定规则指定被测试指令寄存器操作数的使用方式,以使连续调用的被测试指令之间存在数据先写后读依赖或者完全不存在任何数据依赖,从而使被测试指令以完全串行或者完全流水的方式执行。使用计时函数分别获取这两种汇编指令运行模式下的总耗时,以计算被测试指令在被测试平台上的指令延迟与指令吞吐量。本发明专利技术能够在不借助任何特殊硬件支持的情况下,准确获取AArch64架构CPU指令的延迟与吞吐量,适用于AArch64架构的所有指令集拓展,具备良好的可适用性。具备良好的可适用性。具备良好的可适用性。

【技术实现步骤摘要】
面向AArch64架构的CPU指令微基准测试方法及系统


[0001]本专利技术涉及CPU的微基准测试技术,具体涉及一种面向AArch64架构的CPU指令微基准测试方法及系统。

技术介绍

[0002]计算机执行的是机器代码,机器代码是编码了低级操作的字节序列,这些低级操作包括处理数据、管理内存、读写设备数据。这些被编码成字节序列的低级操作被称作CPU指令(硬件指令)。硬件指令在汇编代码中就被表示为汇编指令,它和硬件指令一一对应。编写汇编程序并使用汇编指令是程序员用来对计算机进行低级操作的最直接最全面的方式。
[0003]高级编程语言是编写计算程序的主要方式,高级语言较汇编语言编程更容易更方便。高级语言会被编译器或者解释器,根据编程语言的规则,目标机器的指令集和操作系统遵循的惯例,经过一系列阶段生成机器代码(一系列硬件指令的组合)。计算机程序的性能,除了程序使用的算法,编译器的编译能力外,还与编译器生成的硬件指令有关。而且编译器为了更加高效的将高级编程语言转换成硬件指令,也需要知道所使用硬件指令的延迟与吞吐量。所以了解处理器硬件指令的性能,对分析计算机程序性能。高级语言和硬件指令之间没有直接的映射关系。使用高级语言编写的程序难以测试硬件指令的性能。汇编语言只是机器代码的文本表示,它硬件指令存在一一对应的关系,所以通过汇编语言编写的程序可以准确的测试硬件指令的性能。
[0004]大多数汇编指令有一个或者多个操作数,指示该指令执行的一个操作中需要使用的源数据,以及放置结果的目的位置。操作数可以有立即数、内存地址、寄存器等类型。立即数是常量数字。寄存器是处理器中用来暂存指令、数据和地址的存储器,每个寄存器都有唯一的标识符来进行标识。当操作数是寄存器时,该操作又被称作寄存器操作数。寄存器有多种类型,常使用的是通用寄存器(通用目的寄存器)、浮点寄存器、SIMD寄存器(向量寄存器)。根据指令中寄存器操作数的用途,寄存器操作数会被称作目的寄存器(用于存储指令的计算结果)或者源寄存器(被用作指令的源数据)或者源目的寄存器(既被用作指令的源数据又被用作存储指令的计算结果)。
[0005]ARM架构是由Arm公司开发的精简指令集计算机架构,ARMv8体系结构是ARM架构中支持64位操作的架构。ARMv8架构支持64位运行状态AArch64和32位运行状态AArch32。AArch32架构被运用于嵌入式领域,AArch64被广泛运用于智能手机、个人计算机、服务器、高性能计算等领域。AArch64中包含的常用寄存器类型以及使用的标识符如下:1、31个64位的通用寄存器,被命名为R0到R30,这31个寄存器在使用时会被标识为X0到X30或者W0到W30。2、32个SIMD寄存器,被命名为V0到V31,根据使用的指令不同,这32个SIMD寄存器还有其他的标识符,分别是Q0到Q31、D0到D31、S0到S31、H0到H31、B0到B31、V0.2D到V31.2D、V0.4S到V31.4S、V0.8H到V31.8H、V0.16B到V31.16B、V0.2S到V31.2S、V0.4H到V31.4H以及V0.8B到V31.8B。根据使用AArch64架构芯片的设计者的选择,AArch64可以支持可变长向量指令集(SVE指令集),如果AArch64芯片支持可变长向量指令集,那么还会有:3、32个长度不
确定的可变长向量寄存器,分别是Z0到Z31,这32个寄存器根据使用的指令的不同也有5种标识符变体,分别是:Z0.Q到Z31.Q、Z0.D到Z31.D、Z0.S到Z31.S、Z0.H到Z31.H以及Z0.B到Z31.B。4、16个断言寄存器,这16个寄存器被用作控制可变长向量指令的行为,其标识符是P0到P15。
[0006]现代通用处理器在运行计算机程序时,并不是把硬件指令逐条执行的(执行完一条指令再执行下一条指令),而是普遍使用像流水线和指令多发射等指令级并行技术来让多个处理器部件或者功能单元同时执行指令来提高处理器的性能。流水线是指将执行指令的执行拆分成几个阶段,并在处理器的不同功能单元分阶段安排执行,这使得程序在处理器上运行时,可以同时执行程序的多条指令(的不同阶段)。从而提升处理器的性能。指令多发射是指处理器可以让程序的多条硬件指令同时启动。
[0007]由于现代通用处理器拥有流水线和指令多发射等指令级并行技术,所以需要引入指标来衡量指令性能。指令延迟是指处理器在指令开始执行到执行完成并产生计算结果的耗时,一般以时钟周期(cycle)为单位。指令吞吐量是指处理器平均每时钟周期内能完成执行的指令数量。
[0008]为了获取现代通用处理器硬件指令的延迟与吞吐量,通用处理器的设计者往往会使用特殊的硬件来辅助通用处理器进行测试,以获取精确的测试结果。或者借助硬件仿真器的帮助,来模拟执行通用处理的硬件指令,从而分析得到硬件指令的延迟与吞吐量数据。但这些特殊的硬件设备或者硬件仿真器往往都价格不菲,并且测试的方法都具有一定的局限性。
[0009]各硬件厂商基于ARM架构设计开发兼容ARM指令集的芯片。因此,同样使用AArch64架构的不同芯片,可能存在性能差异。对于计算机底层软件开发人员和编译器设计者而言,了解CPU指令的性能对开发高性能的底层软件至关重要。但是硬件厂商既不会轻易把他们设计生产的芯片性能数据公布,更不会提供能进行CPU指令性能测试的特殊硬件。所以一种能够不借助任何特殊硬件,并能面向所有AArch64架构芯片进行CPU指令延迟与吞吐量测试的方法,对于评估AArch64芯片的CPU指令性能,对于为AArch64架构作底层软件开发与优化,以及对于为AArch64做编译器优化的相关工作而言,至关重要。

技术实现思路

[0010]本专利技术要解决的技术问题:针对现有技术的上述问题,提供一种面向AArch64架构的CPU指令微基准测试方法及系统,本专利技术能够在不借助任何特殊硬件支持的情况下,准确获取AArch64架构CPU指令的延迟与吞吐量,适用于AArch64架构的所有指令集拓展,具备良好的可适用性。
[0011]为了解决上述技术问题,本专利技术采用的技术方案为:
[0012]一种面向AArch64架构的CPU指令微基准测试方法,包括:
[0013]1)使用计时函数获取当前时间得到延迟测试开始时间LT1;
[0014]2)将索引寄存器GR1的值初始化为整数0、边界寄存器GR2的值初始化为循环次数CN;
[0015]3)以串行的方式连续调用被测试指令LN次,其中LN为预先设定的每一次连续调用被测试指令的次数;
[0016]4)判断索引寄存器GR1的值大于等于边界寄存器GR2的值是否成立,若成立,则使用计时函数获取当前时间得到延迟测试结束时间LT2,并将延迟测试结束时间LT2减去延迟测试开始时间LT1得到整个指令延迟测试的总耗时LT,执行下一步;否则,将索引寄存器GR1的值加1,跳转执行步骤3);
[0017]5)根据循环次数CN、每一次连续调用被测试指令的次数LN以及整个指令本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向AArch64架构的CPU指令微基准测试方法,其特征在于,包括:1)使用计时函数获取当前时间得到延迟测试开始时间LT1;2)将索引寄存器GR1的值初始化为整数0、边界寄存器GR2的值初始化为循环次数CN;3)以串行的方式连续调用被测试指令LN次,其中LN为预先设定的每一次连续调用被测试指令的次数;4)判断索引寄存器GR1的值大于等于边界寄存器GR2的值是否成立,若成立,则使用计时函数获取当前时间得到延迟测试结束时间LT2,并将延迟测试结束时间LT2减去延迟测试开始时间LT1得到整个指令延迟测试的总耗时LT,执行下一步;否则,将索引寄存器GR1的值加1,跳转执行步骤3);5)根据循环次数CN、每一次连续调用被测试指令的次数LN以及整个指令延迟测试的总耗时LT计算被测试指令在测试平台上的指令延迟LD。2.根据权利要求1所述的面向AArch64架构的CPU指令微基准测试方法,其特征在于,步骤5)中计算被测试指令在测试平台上的指令延迟LD的函数表达式为:上式中,LD为整个指令延迟测试的总耗时,LN为每一次连续调用被测试指令的次数,CN为循环次数,CPU_FRQ为CPU频率,K为测试过程中使用的时间单位与CPU频率单位之间的转换系数。3.根据权利要求1所述的面向AArch64架构的CPU指令微基准测试方法,其特征在于,步骤5)之后还包括进行指令吞吐量测试的步骤:S1)使用计时函数获取当前时间得到吞吐量测试开始时间OT1;S2)将索引寄存器GR1的值初始化为整数0、边界寄存器GR2的值初始化为循环次数CN;S3)以完全流水的方式连续调用被测试指令ON次,ON为预先设定的每一次连续调用被测试指令的次数;S4)判断索引寄存器GR1的值大于等于边界寄存器GR2的值是否成立,若成立,则使用计时函数获取当前时间得到吞吐量测试结束时间OT2,并将吞吐量测试结束时间OT2减去吞吐量测试开始时间OT1得到整个指令吞吐量测试的总耗时OT,执行下一步;否则,将索引寄存器GR1的值加1,跳转执行步骤S3);S5)根据循环次数CN、每一次连续调用被测试指令的次数ON以及整个指令吞吐量测试的总耗时OT计算被测试指令在测试平台上的指令吞吐量OD。4.根据权利要求3所述的面向AArch64架构的CPU指令微基准测试方法,其特征在于,步骤S5)中计算被测试指令在测试平台上的指令吞吐量OD的函数表达式为:上式中,ON为每一次连续调用被测试指令的次数,CN为循环次数,OT为整个指令吞吐量测试的总耗时,CPU_FRQ为CPU频率,K为测试过程中使用的时间单位与CPU频率单位之间的转换系数。5.根据权利要求4所述的面向AArch64架构的CPU指令微基准测试方法,其特征在于,步骤3)中以串行的方式连续调用被测试指令LN次是指:相邻的指令调用之间存在着数据先写后读依赖,使得CPU的功能部件在执行这LN条被测试指令时,既无法同时发射多条指令,也
无法让多条测试指令以流水线的方式执行;步骤S3)以完全流水的方式连续调用被测试指令ON次是指:将不存在任何数据依赖的被测试指令连续调用ON次,使得CPU在执行这ON条被测试指令时,指令被发射到多个CPU功能部件上以及让这些指令以流水方式执行。6.根据权利要求5所述的面向AArch64架构的CPU指令微基准测试方法,其特征在于,步骤1)之前还包括测试初始化的步骤:确定测试过程中使用的索引寄存器GR1和边界寄存器GR2,GR1和GR2可为通用寄存器组{R0,R1,R2...R30}中指定的任意两个寄存器;确定被测试指令在测试中需要使用的寄存器组{TR0,TR1,TR2,...,TR
N
‑1};被测试指令使用通用寄存器时,{TR0,TR1,TR2,...,TR
N
‑1}是通用寄存器组{R0,R1,R2,...,R30}中除被用作索引寄存器GR1和边界寄存器GR2外的其他N=29个通用寄存器;被测试指令使用SIMD寄存器时,{TR0,TR1,TR2,...,TR
N
‑1}为SIMD寄存器组{V0,V1,V2,...,V31};被测试指令使用可变长向量寄存器时,{TR0,TR1,TR2,...,TR
N
‑1}为可变长向量寄存器组{Z0,Z1,Z2,...,Z31};查询待测试芯片手册或者通过频率测试程序获取测试平台的CPU频率CPU_FRQ。7.根据权利要求6所述的面向AArch64架构的CPU指令微基准测试方法,其特征在于,所述测试初始化之前还包括确定被测试指令类型的步骤:根据被测试指令中各操作数的类型、数量与用途,确定被测试指令的指令类型,所述指令类型包括:指令类型D1_S1:被测试指令包含两个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外一个寄存器REG_SRC1用作源寄存器;指令类型D1_S2:被测试指令包含三个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外两个寄存器REG_SRC1和REG_SRC2用作源寄存器;指令类型D1_S3:被测试指令包含四个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外三个寄存器REG_SRC1、REG_SRC2和REG_SRC3用作源寄存器;指令类型S...

【专利技术属性】
技术研发人员:沈洁龙标黄春唐滔彭林
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1