CN114217856A - 面向AArch64架构的CPU指令微基准测试方法及系统 - Google Patents
面向AArch64架构的CPU指令微基准测试方法及系统 Download PDFInfo
- Publication number
- CN114217856A CN114217856A CN202111552652.2A CN202111552652A CN114217856A CN 114217856 A CN114217856 A CN 114217856A CN 202111552652 A CN202111552652 A CN 202111552652A CN 114217856 A CN114217856 A CN 114217856A
- Authority
- CN
- China
- Prior art keywords
- instruction
- reg
- register
- tested
- instructions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000010998 test method Methods 0.000 title claims abstract description 16
- 238000000034 method Methods 0.000 claims abstract description 31
- 238000012360 testing method Methods 0.000 claims description 202
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 claims description 33
- 102100037226 Nuclear receptor coactivator 2 Human genes 0.000 claims description 33
- 101100332287 Dictyostelium discoideum dst2 gene Proteins 0.000 claims description 24
- 101100264226 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) XRN1 gene Proteins 0.000 claims description 24
- 101150090341 dst1 gene Proteins 0.000 claims description 24
- 230000006870 function Effects 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 15
- 101000974356 Homo sapiens Nuclear receptor coactivator 3 Proteins 0.000 claims description 9
- 102100022883 Nuclear receptor coactivator 3 Human genes 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 8
- 238000003860 storage Methods 0.000 claims description 6
- 230000009191 jumping Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 20
- 238000012545 processing Methods 0.000 description 6
- 230000001934 delay Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30156—Special purpose encoding of instructions, e.g. Gray coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8076—Details on data register access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/82—Architectures of general purpose stored program computers data or demand driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明公开了一种面向AArch64架构的CPU指令微基准测试方法及系统,本发明方法包括通过编写汇编代码,在汇编代码中循环调用若干条连续的被测试汇编指令,并通过特定规则指定被测试指令寄存器操作数的使用方式,以使连续调用的被测试指令之间存在数据先写后读依赖或者完全不存在任何数据依赖,从而使被测试指令以完全串行或者完全流水的方式执行。使用计时函数分别获取这两种汇编指令运行模式下的总耗时,以计算被测试指令在被测试平台上的指令延迟与指令吞吐量。本发明能够在不借助任何特殊硬件支持的情况下,准确获取AArch64架构CPU指令的延迟与吞吐量,适用于AArch64架构的所有指令集拓展,具备良好的可适用性。
Description
技术领域
本发明涉及CPU的微基准测试技术,具体涉及一种面向AArch64架构的CPU指令微基准测试方法及系统。
背景技术
计算机执行的是机器代码,机器代码是编码了低级操作的字节序列,这些低级操作包括处理数据、管理内存、读写设备数据。这些被编码成字节序列的低级操作被称作CPU指令(硬件指令)。硬件指令在汇编代码中就被表示为汇编指令,它和硬件指令一一对应。编写汇编程序并使用汇编指令是程序员用来对计算机进行低级操作的最直接最全面的方式。
高级编程语言是编写计算程序的主要方式,高级语言较汇编语言编程更容易更方便。高级语言会被编译器或者解释器,根据编程语言的规则,目标机器的指令集和操作系统遵循的惯例,经过一系列阶段生成机器代码(一系列硬件指令的组合)。计算机程序的性能,除了程序使用的算法,编译器的编译能力外,还与编译器生成的硬件指令有关。而且编译器为了更加高效的将高级编程语言转换成硬件指令,也需要知道所使用硬件指令的延迟与吞吐量。所以了解处理器硬件指令的性能,对分析计算机程序性能。高级语言和硬件指令之间没有直接的映射关系。使用高级语言编写的程序难以测试硬件指令的性能。汇编语言只是机器代码的文本表示,它硬件指令存在一一对应的关系,所以通过汇编语言编写的程序可以准确的测试硬件指令的性能。
大多数汇编指令有一个或者多个操作数,指示该指令执行的一个操作中需要使用的源数据,以及放置结果的目的位置。操作数可以有立即数、内存地址、寄存器等类型。立即数是常量数字。寄存器是处理器中用来暂存指令、数据和地址的存储器,每个寄存器都有唯一的标识符来进行标识。当操作数是寄存器时,该操作又被称作寄存器操作数。寄存器有多种类型,常使用的是通用寄存器(通用目的寄存器)、浮点寄存器、SIMD寄存器(向量寄存器)。根据指令中寄存器操作数的用途,寄存器操作数会被称作目的寄存器(用于存储指令的计算结果)或者源寄存器(被用作指令的源数据)或者源目的寄存器(既被用作指令的源数据又被用作存储指令的计算结果)。
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。
现代通用处理器在运行计算机程序时,并不是把硬件指令逐条执行的(执行完一条指令再执行下一条指令),而是普遍使用像流水线和指令多发射等指令级并行技术来让多个处理器部件或者功能单元同时执行指令来提高处理器的性能。流水线是指将执行指令的执行拆分成几个阶段,并在处理器的不同功能单元分阶段安排执行,这使得程序在处理器上运行时,可以同时执行程序的多条指令(的不同阶段)。从而提升处理器的性能。指令多发射是指处理器可以让程序的多条硬件指令同时启动。
由于现代通用处理器拥有流水线和指令多发射等指令级并行技术,所以需要引入指标来衡量指令性能。指令延迟是指处理器在指令开始执行到执行完成并产生计算结果的耗时,一般以时钟周期(cycle)为单位。指令吞吐量是指处理器平均每时钟周期内能完成执行的指令数量。
为了获取现代通用处理器硬件指令的延迟与吞吐量,通用处理器的设计者往往会使用特殊的硬件来辅助通用处理器进行测试,以获取精确的测试结果。或者借助硬件仿真器的帮助,来模拟执行通用处理的硬件指令,从而分析得到硬件指令的延迟与吞吐量数据。但这些特殊的硬件设备或者硬件仿真器往往都价格不菲,并且测试的方法都具有一定的局限性。
各硬件厂商基于ARM架构设计开发兼容ARM指令集的芯片。因此,同样使用AArch64架构的不同芯片,可能存在性能差异。对于计算机底层软件开发人员和编译器设计者而言,了解CPU指令的性能对开发高性能的底层软件至关重要。但是硬件厂商既不会轻易把他们设计生产的芯片性能数据公布,更不会提供能进行CPU指令性能测试的特殊硬件。所以一种能够不借助任何特殊硬件,并能面向所有AArch64架构芯片进行CPU指令延迟与吞吐量测试的方法,对于评估AArch64芯片的CPU指令性能,对于为AArch64架构作底层软件开发与优化,以及对于为AArch64做编译器优化的相关工作而言,至关重要。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种面向AArch64架构的CPU指令微基准测试方法及系统,本发明能够在不借助任何特殊硬件支持的情况下,准确获取AArch64架构CPU指令的延迟与吞吐量,适用于AArch64架构的所有指令集拓展,具备良好的可适用性。
为了解决上述技术问题,本发明采用的技术方案为:
一种面向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。
可选地,步骤5)中计算被测试指令在测试平台上的指令延迟LD的函数表达式为:
上式中,LD为整个指令延迟测试的总耗时,LN为每一次连续调用被测试指令的次数,CN为循环次数,CPU_FRQ为CPU频率,K为测试过程中使用的时间单位与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。
可选地,步骤S5)中计算被测试指令在测试平台上的指令吞吐量OD的函数表达式为:
上式中,ON为每一次连续调用被测试指令的次数,CN为循环次数,OT为整个指令吞吐量测试的总耗时,CPU_FRQ为CPU频率,K为测试过程中使用的时间单位与CPU频率单位之间的转换系数。
可选地,步骤3)中以串行的方式连续调用被测试指令LN次是指:相邻的指令调用之间存在着数据先写后读依赖,使得CPU的功能部件在执行这LN条被测试指令时,既无法同时发射多条指令,也无法让多条测试指令以流水线的方式执行;步骤S3)以完全流水的方式连续调用被测试指令ON次是指:将不存在任何数据依赖的被测试指令连续调用ON次,使得CPU在执行这ON条被测试指令时,指令被发射到多个CPU功能部件上以及让这些指令以流水方式执行。
可选地,步骤1)之前还包括测试初始化的步骤:确定测试过程中使用的索引寄存器GR1和边界寄存器GR2,GR1和GR2可为通用寄存器组{R0,R1,R2...R30}中指定的任意两个寄存器;确定被测试指令在测试中需要使用的寄存器组{TR0,TR1,TR2,...,TRN-1};被测试指令使用通用寄存器时,{TR0,TR1,TR2,...,TRN-1}是通用寄存器组{R0,R1,R2,...,R30}中除被用作索引寄存器GR1和边界寄存器GR2外的其他N=29个通用寄存器;被测试指令使用SIMD寄存器时,{TR0,TR1,TR2,...,TRN-1}为SIMD寄存器组{V0,V1,V2,...,V31};被测试指令使用可变长向量寄存器时,{TR0,TR1,TR2,...,TRN-1}为可变长向量寄存器组{Z0,Z1,Z2,...,Z31};查询待测试芯片手册或者通过频率测试程序获取测试平台的CPU频率CPU_FRQ。
可选地,所述测试初始化之前还包括确定被测试指令类型的步骤:根据被测试指令中各操作数的类型、数量与用途,确定被测试指令的指令类型,所述指令类型包括:指令类型D1_S1:被测试指令包含两个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外一个寄存器REG_SRC1用作源寄存器;指令类型D1_S2:被测试指令包含三个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外两个寄存器REG_SRC1和REG_SRC2用作源寄存器;指令类型D1_S3:被测试指令包含四个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外三个寄存器REG_SRC1、REG_SRC2和REG_SRC3用作源寄存器;指令类型SD1_S1:被测试指令包含两个寄存器操作数,并且其中一个寄存器REG_SRCDST既用作目的寄存器也用作源寄存器,另外一个寄存器REG_SRC1用作源寄存器;指令类型SD1_S2:被测试指令包含三个寄存器操作数,并且其中一个寄存器REG_SRCDST既用作目的寄存器也用作源寄存器,另外两个寄存器REG_SRC1和REG_SRC2用作源寄存器;指令类型D2_S1:被测试指令包含三个寄存器操作数,其中两个寄存器REG_DST1和REG_DST2用作目的寄存器,另外一个寄存器REG_SRC1用作源寄存器;指令类型D2_S2:被测试指令包含四个寄存器操作数,其中两个寄存器REG_DST1和REG_DST2用作目的寄存器,另外两个寄存器REG_SRC1和REG_SRC1用作源寄存器;步骤3)中以串行的方式连续调用被测试指令LN次时,对于各种不同指令类型的指令,使用{TR0,TR1,TR2,...,TRN-1}中的任意寄存器,且连续的LN条被测试指令遵循如下规则:当被测试指令是D1_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1和前一条被测试指令使用的目的寄存器REG_DST相同;当被测试指令是D1_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2和前一条被测试指令使用的目的寄存器REG_DST相同;当被测试指令是D1_S3类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2或者REG_SRC3和前一条被测试指令使用的目的寄存器REG_DST相同;当被测试指令是SD1_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者源目的寄存器REG_SRCDST和前一条被测试指令使用的源目的寄存器REG_SRCDST相同;当被测试指令是SD1_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2或者源目的寄存器REG_SRCDST和前一条被测试指令使用的源目的寄存器REG_SRCDST相同;当被测试指令是D2_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1和前一条被测试指令使用的目的寄存器REG_DST1或者REG_DST2相同;当被测试指令是D2_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2和前一条被测试指令使用的目的寄存器REG_DST1或者REG_DST2相同。
可选地,步骤S3)中以完全流水的方式连续调用被测试指令ON次时,对于各种不同指令类型的指令,使用{TR0,TR1,TR2,...,TRN-1}中的任意寄存器,且连续的ON条被测试指令需要遵循如下规则:若被测试指令是D1_S1类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、目的寄存器REG_DST都不相同;若被测试指令是D1_S2类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、目的寄存器REG_DST都不相同;若被测试指令是D1_S3类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、REG_SRC3、目的寄存器REG_DST都不相同;若被测试指令是SD1_S1类型指令时,每条被测试指令使用的源目的寄存器REG_SRCDST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、源目的寄存器REG_SRCDST都不相同;若被测试指令是SD1_S2类型指令时,每条被测试指令使用的源目的寄存器REG_SRCDST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、源目的寄存器REG_SRCDST都不相同;若被测试指令是D2_S1类型指令时,每条被测试指令使用的目的寄存器REG_DST1、REG_DST2与其他ON-1条被测试指令使用的源寄存器REG_SRC1以及目的寄存器REG_DST1、REG_DST2都不相同;若被测试指令是D2_S2类型指令时,每条被测试指令使用的目的寄存器REG_DST1、REG_DST2与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2以及目的寄存器REG_DST1、REG_DST2都不相同。
此外,本发明还提供一种面向AArch64架构的CPU指令微基准测试系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行所述面向AArch64架构的CPU指令微基准测试方法的步骤。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,该计算机程序用于通过计算机设备编程或配置以执行所述面向AArch64架构的CPU指令微基准测试方法的步骤。
和现有技术相比,本发明具有下述优点:
1、本发明能够在不借助任何特殊硬件支持的情况下,准确获取AArch64架构CPU指令的延迟与吞吐量,是一种通过汇编编程的纯软件实现的测试方法。
2、本发明适用的指令类型广泛,包括AArch64的普通A64指令,SIMD指令集中的向量指令以及可变长向量指令集的向量指令。只要被测试指令属于前述7种指令类型中的一种,便可以被本发明所提方法进行指令延迟与吞吐量测试。因此,本发明适用于AArch64架构的所有指令集拓展,具备良好的可适用性。
附图说明
图1为本实施例所提指令延迟测试方法的基本流程图。
图2为本实施例所提指令吞吐量测试方法的基本流程图。
图3为本实施例在指令类型为D1_S1时,延迟测试与吞吐量测试的指令排布示意图。
图4为本实施例在指令类型为D1_S2时,延迟测试与吞吐量测试的指令排布示意图。
图5为本实施例在指令类型为D1_S3时,延迟测试与吞吐量测试的指令排布示意图。
图6为本实施例在指令类型为SD1_S1时,延迟测试与吞吐量测试的指令排布示意图。
图7为本实施例在指令类型为SD1_S2时,延迟测试与吞吐量测试的指令排布示意图。
图8为本实施例在指令类型为D2_S1时,延迟测试与吞吐量测试的指令排布示意图。
图9为本实施例在指令类型为D2_S2时,延迟测试与吞吐量测试的指令排布示意图。
图10为本实施例所提指令延迟测试和吞吐量测试方法的指令排布数据依赖关系示意图。
具体实施方式
如图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。
本实施例方法的步骤1)~步骤5)采用汇编语言实现。对于步骤2)而言,用于为通用寄存器GR1和GR2进行初始化操作的AArch64指令包括mov指令、movk指令、movn指令和movz指令等。对于步骤4)而言,用于将边界寄存器GR1的值加1的AArch64加法指令包括add指令、addg指令和adds指令等。对于步骤5)而言,判断通用寄存器GR1的值是否大于等于GR2的值的比较指令包括cmp指令、cmn指令、ccmn指令、ccmp指令等。对于步骤6)而言,进行跳转的指令包括:b指令、b.cc指令、b.ne指令、b.ls指令、b.hi指令、b.ge指令、b.lt指令、b.gt指令、b.le指令等。这些可选的指令均为本实施例所提供的方法。
步骤5)中在指令延迟测试中,由于所有指令以串行的方式被CPU执行,所以获取的总耗时LT=LT2-LT1无限接近测试中被CPU执行的CN*LN条被测试指令的延迟总和,所以被测试指令的延迟为LT/(LN×CN),最后换算成时钟周期,则可知本实施例步骤5)中计算被测试指令在测试平台上的指令延迟LD的函数表达式为:
上式中,LD为整个指令延迟测试的总耗时,LN为每一次连续调用被测试指令的次数,CN为循环次数,CPU_FRQ为CPU频率,K为测试过程中使用的时间单位与CPU频率单位之间的转换系数。
如图2所示,本实施例步骤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。
本实施例方法的步骤S1)~步骤S5)采用汇编语言实现。对于步骤S3)而言,用于为通用寄存器GR1和GR2进行初始化操作的AArch64指令包括mov指令、movk指令、movn指令和movz指令。对于步骤S4)而言,用于将边界寄存器GR1的值加1的AArch64加法指令包括add指令、addg指令和adds指令。对于步骤S5)而言,判断通用寄存器GR1的值是否大于等于GR2的值的比较指令包括cmp指令、cmn指令、ccmn指令、ccmp指令。对于步骤S6)而言,进行跳转的指令包括:b指令、b.cc指令、b.ne指令、b.ls指令、b.hi指令、b.ge指令、b.lt指令、b.gt指令、b.le指令。这些可选的指令均为本实施例所提供的方法。
本实施例中,步骤S5)中在指令吞吐量测试中,由于CN*ON条被测试指令以完全流水的方式被CPU执行的,所以单位时间内CPU执行的指令数量为ON×CN/OT,换算成时钟周期后,即可得到步骤S5)中计算被测试指令在测试平台上的指令吞吐量OD的函数表达式为:
上式中,ON为每一次连续调用被测试指令的次数,CN为循环次数,OT为整个指令吞吐量测试的总耗时,CPU_FRQ为CPU频率,K为测试过程中使用的时间单位与CPU频率单位之间的转换系数。转换系数K由测试过程中使用的时间单位与CPU频率单位决定,保证时间单位与频率单位正确换算,其函数表达式为:
K=(1实际使用的时间单位÷1us)×(1实际使用的频率单位÷1Mhz),
例如本实施例中时间单位为us、CPU频率单位为Mhz时,转换系数K取值为1。
本实施例中,步骤3)中以串行的方式连续调用被测试指令LN次是指:相邻的指令调用之间存在着数据先写后读依赖,使得CPU的功能部件在执行这LN条被测试指令时,既无法同时发射多条指令,也无法让多条测试指令以流水线的方式执行,使这LN条测试指令以完全串行的方式被CPU执行的,即一条指令执行完成后,下一条指令才可以开始执行。在这种情况下,这LN条指令运行的总时间是这LN条指令延迟的总和。为了实现相邻指令之间存在数据先写后读依赖,本实施例将每一条被测试指令使用的目的寄存器与下一条指令使用的源寄存器设置为同一个寄存器,从而确保在本条指令执行完后,下一条指令才可以开始执行,其指令排布数据依赖关系示意图如图10(a)所示,连续的指令在TR0或TR1寄存器上存在数据依赖关系,数据流经过指令1从TR0流向TR1,然后经过指令2从TR1流向TR0。
本实施例中,步骤S3)以完全流水的方式连续调用被测试指令ON次是指:将不存在任何数据依赖的被测试指令连续调用ON次,使得CPU在执行这ON条被测试指令时,指令被发射到多个(如果有多个)CPU功能部件上以及让这些指令以流水方式执行。在这种执行模式下测试得到单位时钟周期内CPU执行的指令数量就是该指令的吞吐量。为了让这ON条指令不存在任何数据依赖,本实施例确保每一条被测试指令使用的目的寄存器与其他ON-1条指令的所有源寄存器和目的寄存器都不相同,其指令排布数据依赖关系示意图如图10(b)所示,数据流从各条指令的源寄存器TR0流向各自的目的寄存器后便不在被其他指令使用。
本实施例中,步骤1)之前还包括测试初始化的步骤:确定测试过程中使用的索引寄存器GR1和边界寄存器GR2,GR1和GR2可为通用寄存器组{R0,R1,R2...R30}中指定的任意两个寄存器;确定被测试指令在测试中需要使用的寄存器组{TR0,TR1,TR2,...,TRN-1},被测试指令使用通用寄存器时,{TR0,TR1,TR2,...,TRN-1}是通用寄存器组{R0,R1,R2,...,R30}中除被用作索引寄存器GR1和边界寄存器GR2外的其他N=29个通用寄存器;被测试指令使用SIMD寄存器时,{TR0,TR1,TR2,...,TRN-1}为SIMD寄存器组{V0,V1,V2,...,V31}(N=32);被测试指令使用可变长向量寄存器时,{TR0,TR1,TR2,...,TRN-1}为可变长向量寄存器组{Z0,Z1,Z2,...,Z31}(N=32);查询待测试芯片手册或者通过频率测试程序获取测试平台的CPU频率CPU_FRQ。此外,循环次数CN(正整数)、每一次连续调用被测试指令的次数LN以及每一次连续调用被测试指令的次数ON可根据需要设定所需的正整数。
需要说明的是,在本实施例中分别进行延迟测试中连续调用被测试指令LN次时,需要确保所有被调用指令的寄存器使用遵循特定的规则。为了说明这些规则,本实施例对AArch64架构的CPU指令进行分类。首先被测试指令需要满足所有寄存器操作数是同一种类型的寄存器,可用的寄存器类型包括通用寄存器、SIMD寄存器、可变长向量寄存器。如果是可变长向量指令,允许有一个额外的寄存器操作数作为断言寄存器,而其他寄存器操作数是可变长向量寄存器。其次根据指令中寄存器操作数的类型(通用寄存器、SIMD寄存器、可变长向量寄存器)、数量和用途确定指令的类型。
本实施例中,测试初始化之前还包括确定被测试指令类型的步骤:根据被测试指令中各操作数的类型、数量与用途,确定被测试指令的指令类型,所述指令类型包括:
1、指令类型D1_S1:被测试指令包含两个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外一个寄存器REG_SRC1用作源寄存器;
2、指令类型D1_S2:被测试指令包含三个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外两个寄存器REG_SRC1和REG_SRC2用作源寄存器;
3、指令类型D1_S3:被测试指令包含四个寄存器操作数,并且其中一个寄存器REG_DST用作目的寄存器,另外三个寄存器REG_SRC1、REG_SRC2和REG_SRC3用作源寄存器;
4、指令类型SD1_S1:被测试指令包含两个寄存器操作数,并且其中一个寄存器REG_SRCDST既用作目的寄存器也用作源寄存器,另外一个寄存器REG_SRC1用作源寄存器;
5、指令类型SD1_S2:被测试指令包含三个寄存器操作数,并且其中一个寄存器REG_SRCDST既用作目的寄存器也用作源寄存器,另外两个寄存器REG_SRC1和REG_SRC2用作源寄存器;
6、指令类型D2_S1:被测试指令包含三个寄存器操作数,其中两个寄存器REG_DST1和REG_DST2用作目的寄存器,另外一个寄存器REG_SRC1用作源寄存器;
7、指令类型D2_S2:被测试指令包含四个寄存器操作数,其中两个寄存器REG_DST1和REG_DST2用作目的寄存器,另外两个寄存器REG_SRC1和REG_SRC1用作源寄存器;
对于进行CPU指令延迟测试,在步骤3)中连续调用被测试指令LN次时,必须保证相邻的指令调用之间存在着数据先写后读依赖。从而使得CPU的功能部件在执行这LN条被测试指令时,既无法同时发射多条指令,也无法让多条测试指令以流水线的方式执行,而是使这LN条测试指令以完全串行的方式被CPU执行的,即一条指令执行完成后,下一条指令才可以开始执行。在这种情况下,这LN条指令运行的总时间是这LN条指令延迟的总和。为了实现相邻指令之间存在数据先写后读依赖,本实施例将每一条被测试指令使用的目的寄存器与下一条指令使用的源寄存器设置为同一个寄存器,从而确保在本条指令执行完后,下一条指令才可以开始执行,其指令排布数据依赖关系示意图如图10中的(a)所示。步骤3)中以串行的方式连续调用被测试指令LN次时,对于各种不同指令类型的指令,使用{TR0,TR1,TR2,...,TRN-1}中的任意寄存器,且连续的LN条被测试指令遵循如下规则:
1、当被测试指令是D1_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1和前一条被测试指令使用的目的寄存器REG_DST相同,其伪代码如图3中的(a)所示,INS_D1_S1指令第一个操作数是目的寄存器,第二个操作数是源寄存器,并且每条指令使用的目的寄存器与下一条指令的源寄存器为相同的TR1或TR0寄存器。
2、当被测试指令是D1_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2和前一条被测试指令使用的目的寄存器REG_DST相同,其伪代码如图4中的(a)所示,INS_D1_S2指令第一个操作数是目的寄存器,第二、三操作数是源寄存器,并且每条指令使用的目的寄存器与下一条指令的源寄存器为相同的TR2或TR0寄存器。
3、当被测试指令是D1_S3类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2或者REG_SRC3和前一条被测试指令使用的目的寄存器REG_DST相同,其伪代码如图5中的(a)所示,INS_D1_S3指令第一个操作数是目的寄存器,第二、三、四操作数是源寄存器,并且每条指令使用的目的寄存器与下一条指令的源寄存器为相同的TR3或TR0寄存器。
4、当被测试指令是SD1_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者源目的寄存器REG_SRCDST和前一条被测试指令使用的源目的寄存器REG_SRCDST相同,其伪代码如图6中的(a)所示,INS_SD1_S1指令第一个操作数是源目的寄存器,第二操作数是源寄存器,并且每条指令使用的源目的寄存器与下一条指令的源寄存器为相同的TR1或TR0寄存器。
5、当被测试指令是SD1_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2或者源目的寄存器REG_SRCDST和前一条被测试指令使用的源目的寄存器REG_SRCDST相同,其伪代码如图7中的(a)所示,INS_SD1_S2指令第一个操作数是源目的寄存器,第二、三操作数是源寄存器,并且每条指令使用的源目的寄存器与下一条指令的源寄存器为相同的TR2或TR0寄存器。
6、当被测试指令是D2_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1和前一条被测试指令使用的目的寄存器REG_DST1或者REG_DST2相同,其伪代码如图8中的(a)所示,INS_D2_S1指令第一、二个操作数是目的寄存器,第三操作数是源寄存器,并且每条指令使用的源目的寄存器与下一条指令的源寄存器为相同的TR2或TR0寄存器。
7、当被测试指令是D2_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2和前一条被测试指令使用的目的寄存器REG_DST1或者REG_DST2相同,其伪代码如图9中的(a)所示,INS_D2_S2指令第一、二个操作数是目的寄存器,第三、四操作数是源寄存器,并且每条指令使用的源目的寄存器与下一条指令的源寄存器为相同的TR3或TR0寄存器。
需要说明的是,在步骤S3)中进行吞吐量测试中连续调用被测试指令ON次时,需要确保所有被调用指令的寄存器使用遵循特定的规则。为了说明这些规则,本实施例对AArch64架构的CPU指令进行分类。对于进行CPU吞吐量测试,在步骤S3)连续调用被测试指令ON次时,需要确保这ON条被测试指令不存在任何数据依赖。从而使得CPU在执行这ON条被测试指令时,既可以被发射到多个(如果有多个)CPU功能部件上,也能让这些指令以流水方式执行。在这种执行模式下测试得到单位时钟周期内CPU执行的指令数量就是该指令的吞吐量。为了让这ON条指令不存在任何数据依赖,本实施例确保每一条被测试指令使用的目的寄存器与其他ON-1条指令的所有源寄存器和目的寄存器都不相同,其指令排布数据依赖关系示意图如图10中的(b)所示。具体的,本实施例步骤S3)中以完全流水的方式连续调用被测试指令ON次时,对于各种不同指令类型的指令,使用{TR0,TR1,TR2,...,TRN-1}中的任意寄存器,且连续的ON条被测试指令需要遵循如下规则:
1、若被测试指令是D1_S1类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、目的寄存器REG_DST都不相同,其伪代码如图3中的(b)所示,INS_D1_S1指令第一个和第二个操作数分别是目的寄存器与源寄存器,任意指令的目的寄存器都没有出现在其他指令的源寄存器和目的寄存器中。
2、若被测试指令是D1_S2类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、目的寄存器REG_DST都不相同,其伪代码如图4中的(b)所示,INS_D1_S2指令第一个寄存器是目的寄存器而第二、三个寄存器是源寄存器,任意指令的目的寄存器都没有出现在其他指令的源寄存器或目的寄存器中。
3、若被测试指令是D1_S3类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、REG_SRC3、目的寄存器REG_DST都不相同,其伪代码如图5中的(b)所示,INS_D1_S3指令第一个寄存器是目的寄存器而第二、三、四个寄存器是源寄存器,任意指令的目的寄存器都没有出现在其他指令的源寄存器或目的寄存器中。
4、若被测试指令是SD1_S1类型指令时,每条被测试指令使用的源目的寄存器REG_SRCDST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、源目的寄存器REG_SRCDST都不相同,其伪代码如图6中的(b)所示,INS_SD1_S1指令第一个操作数是源目的寄存器,并且在该操作数位置使用的寄存器TR1,TR2,...,TRON-1都没有出现在其他指令中。
5、若被测试指令是SD1_S2类型指令时,每条被测试指令使用的源目的寄存器REG_SRCDST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、源目的寄存器REG_SRCDST都不相同,其伪代码如图7中的(b)所示,INS_SD1_S2指令第一个操作数是源目的寄存器,并且在该操作数位置使用的寄存器TR2,...,TRON-1都没有出现在其他指令中。
6、若被测试指令是D2_S1类型指令时,每条被测试指令使用的目的寄存器REG_DST1、REG_DST2与其他ON-1条被测试指令使用的源寄存器REG_SRC1、目的寄存器REG_DST1、REG_DST2都不相同,其伪代码如图8中的(b)所示,INS_D2_S1第一、二个寄存器是目的寄存器而第三个寄存器是源寄存器,任意指令的两个目的寄存器都没有出现在其他指令的源寄存器或目的寄存器中。
7、若被测试指令是D2_S2类型指令时,每条被测试指令使用的目的寄存器REG_DST1、REG_DST2与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、目的寄存器REG_DST1、REG_DST2都不相同,其伪代码如图9中的(b)所示,INS_D2_S2指令第一、二个寄存器是目的寄存器而第三、四个寄存器是源寄存器,任意指令的目的寄存器都没有出现在其他指令的源寄存器和目的寄存器中。
本实施例公开了一种面向AArch64架构的CPU指令微基准测试方法,本实施例方法通过编写汇编代码,在汇编代码中循环调用若干条连续的被测试汇编指令,并通过特定规则指定被测试指令寄存器操作数的使用方式,以使连续调用的被测试指令之间存在数据先写后读依赖或者完全不存在任何数据依赖,从而使被测试指令以完全串行或者完全流水的方式执行。使用计时函数分别获取这两种汇编指令运行模式下的总耗时,以计算被测试指令在被测试平台上的指令延迟与指令吞吐量。该方法可以在不借助任何特殊硬件支持的情况下,准确获取各种AArch64架构CPU的指令延迟与指令吞吐量。
此外,本实施例还提供一种面向AArch64架构的CPU指令微基准测试系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行所述面向AArch64架构的CPU指令微基准测试方法的步骤。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,该计算机程序用于通过计算机设备编程或配置以执行所述面向AArch64架构的CPU指令微基准测试方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
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。
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。
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,...,TRN-1};被测试指令使用通用寄存器时,{TR0,TR1,TR2,...,TRN-1}是通用寄存器组{R0,R1,R2,...,R30}中除被用作索引寄存器GR1和边界寄存器GR2外的其他N=29个通用寄存器;被测试指令使用SIMD寄存器时,{TR0,TR1,TR2,...,TRN-1}为SIMD寄存器组{V0,V1,V2,...,V31};被测试指令使用可变长向量寄存器时,{TR0,TR1,TR2,...,TRN-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用作源寄存器;指令类型SD1_S1:被测试指令包含两个寄存器操作数,并且其中一个寄存器REG_SRCDST既用作目的寄存器也用作源寄存器,另外一个寄存器REG_SRC1用作源寄存器;指令类型SD1_S2:被测试指令包含三个寄存器操作数,并且其中一个寄存器REG_SRCDST既用作目的寄存器也用作源寄存器,另外两个寄存器REG_SRC1和REG_SRC2用作源寄存器;指令类型D2_S1:被测试指令包含三个寄存器操作数,其中两个寄存器REG_DST1和REG_DST2用作目的寄存器,另外一个寄存器REG_SRC1用作源寄存器;指令类型D2_S2:被测试指令包含四个寄存器操作数,其中两个寄存器REG_DST1和REG_DST2用作目的寄存器,另外两个寄存器REG_SRC1和REG_SRC1用作源寄存器;步骤3)中以串行的方式连续调用被测试指令LN次时,对于各种不同指令类型的指令,使用{TR0,TR1,TR2,...,TRN-1}中的任意寄存器,且连续的LN条被测试指令遵循如下规则:当被测试指令是D1_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1和前一条被测试指令使用的目的寄存器REG_DST相同;当被测试指令是D1_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2和前一条被测试指令使用的目的寄存器REG_DST相同;当被测试指令是D1_S3类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2或者REG_SRC3和前一条被测试指令使用的目的寄存器REG_DST相同;当被测试指令是SD1_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者源目的寄存器REG_SRCDST和前一条被测试指令使用的源目的寄存器REG_SRCDST相同;当被测试指令是SD1_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2或者源目的寄存器REG_SRCDST和前一条被测试指令使用的源目的寄存器REG_SRCDST相同;当被测试指令是D2_S1类型指令时,每条被测试指令使用的源寄存器REG_SRC1和前一条被测试指令使用的目的寄存器REG_DST1或者REG_DST2相同;当被测试指令是D2_S2类型指令时,每条被测试指令使用的源寄存器REG_SRC1或者REG_SRC2和前一条被测试指令使用的目的寄存器REG_DST1或者REG_DST2相同。
8.根据权利要求7所述的面向AArch64架构的CPU指令微基准测试方法,其特征在于,步骤S3)中以完全流水的方式连续调用被测试指令ON次时,对于各种不同指令类型的指令,使用{TR0,TR1,TR2,...,TRN-1}中的任意寄存器,且连续的ON条被测试指令需要遵循如下规则:若被测试指令是D1_S1类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、目的寄存器REG_DST都不相同;若被测试指令是D1_S2类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、目的寄存器REG_DST都不相同;若被测试指令是D1_S3类型指令时,每条被测试指令使用的目的寄存器REG_DST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、REG_SRC3、目的寄存器REG_DST都不相同;若被测试指令是SD1_S1类型指令时,每条被测试指令使用的源目的寄存器REG_SRCDST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、源目的寄存器REG_SRCDST都不相同;若被测试指令是SD1_S2类型指令时,每条被测试指令使用的源目的寄存器REG_SRCDST与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、源目的寄存器REG_SRCDST都不相同;若被测试指令是D2_S1类型指令时,每条被测试指令使用的目的寄存器REG_DST1、REG_DST2与其他ON-1条被测试指令使用的源寄存器REG_SRC1、目的寄存器REG_DST1、REG_DST2都不相同;若被测试指令是D2_S2类型指令时,每条被测试指令使用的目的寄存器REG_DST1、REG_DST2与其他ON-1条被测试指令使用的源寄存器REG_SRC1、REG_SRC2、目的寄存器REG_DST1、REG_DST2都不相同。
9.一种面向AArch64架构的CPU指令微基准测试系统,包括相互连接的微处理器和存储器,其特征在于,该微处理器被编程或配置以执行权利要求1~8中任意一项所述面向AArch64架构的CPU指令微基准测试方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质中存储有计算机程序,该计算机程序用于通过计算机设备编程或配置以执行权利要求1~8中任意一项所述面向AArch64架构的CPU指令微基准测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111552652.2A CN114217856B (zh) | 2021-12-17 | 2021-12-17 | 面向AArch64架构的CPU指令微基准测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111552652.2A CN114217856B (zh) | 2021-12-17 | 2021-12-17 | 面向AArch64架构的CPU指令微基准测试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114217856A true CN114217856A (zh) | 2022-03-22 |
CN114217856B CN114217856B (zh) | 2024-08-20 |
Family
ID=80703726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111552652.2A Active CN114217856B (zh) | 2021-12-17 | 2021-12-17 | 面向AArch64架构的CPU指令微基准测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114217856B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435248A (zh) * | 2023-09-28 | 2024-01-23 | 中国人民解放军国防科技大学 | 一种自适应指令集编码自动生成方法及装置 |
CN118642762A (zh) * | 2024-08-14 | 2024-09-13 | 北京开源芯片研究院 | 指令处理方法、装置、电子设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080126763A1 (en) * | 2006-09-05 | 2008-05-29 | International Business Machines Corporation | Method of translating n to n instructions employing an enhanced extended translation facility |
WO2017016255A1 (zh) * | 2015-07-29 | 2017-02-02 | 深圳市中兴微电子技术有限公司 | 微引擎的多发射指令并行处理方法及装置、存储介质 |
CN108304218A (zh) * | 2018-03-14 | 2018-07-20 | 郑州云海信息技术有限公司 | 一种汇编代码的编写方法、装置、系统和可读存储介质 |
US20190286817A1 (en) * | 2018-03-19 | 2019-09-19 | University Of Florida Research Foundation, Inc. | Method and Apparatus For Vetting Universal Serial Bus Device Firmware |
-
2021
- 2021-12-17 CN CN202111552652.2A patent/CN114217856B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080126763A1 (en) * | 2006-09-05 | 2008-05-29 | International Business Machines Corporation | Method of translating n to n instructions employing an enhanced extended translation facility |
WO2017016255A1 (zh) * | 2015-07-29 | 2017-02-02 | 深圳市中兴微电子技术有限公司 | 微引擎的多发射指令并行处理方法及装置、存储介质 |
CN108304218A (zh) * | 2018-03-14 | 2018-07-20 | 郑州云海信息技术有限公司 | 一种汇编代码的编写方法、装置、系统和可读存储介质 |
US20190286817A1 (en) * | 2018-03-19 | 2019-09-19 | University Of Florida Research Foundation, Inc. | Method and Apparatus For Vetting Universal Serial Bus Device Firmware |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435248A (zh) * | 2023-09-28 | 2024-01-23 | 中国人民解放军国防科技大学 | 一种自适应指令集编码自动生成方法及装置 |
CN117435248B (zh) * | 2023-09-28 | 2024-05-31 | 中国人民解放军国防科技大学 | 一种自适应指令集编码自动生成方法及装置 |
CN118642762A (zh) * | 2024-08-14 | 2024-09-13 | 北京开源芯片研究院 | 指令处理方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114217856B (zh) | 2024-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10768930B2 (en) | Processor supporting arithmetic instructions with branch on overflow and methods | |
US9424037B2 (en) | Instructions and functions for evaluating program defined conditions | |
JP5808348B2 (ja) | マシン状態に基づいた命令の分割 | |
KR101417597B1 (ko) | 제로 프레디케이트 브랜치 예측실패에 대한 브랜치 예측실패 거동 억제 | |
US9262161B2 (en) | Tracking multiple conditions in a general purpose register and instruction therefor | |
CN114217856B (zh) | 面向AArch64架构的CPU指令微基准测试方法及系统 | |
KR20180066146A (ko) | 벡터 데이터 전송 명령어 | |
JP2013254484A (ja) | ベクトル分割ループの性能の向上 | |
TWI740851B (zh) | 用於向量負載指示之資料處理設備、方法及電腦程式 | |
US9342334B2 (en) | Simulating vector execution | |
US11789734B2 (en) | Padded vectorization with compile time known masks | |
KR100817056B1 (ko) | 분기이력 길이표시기, 분기예측 시스템 및 분기 예측 방법 | |
US20130080740A1 (en) | Fast condition code generation for arithmetic logic unit | |
JP2019511056A (ja) | 複素数乗算命令 | |
JP2008176453A (ja) | シミュレーション装置 | |
Akram et al. | A study of performance and power consumption differences among different ISAs | |
US20110252220A1 (en) | Instruction cracking and issue shortening based on instruction base fields, index fields, operand fields, and various other instruction text bits | |
Whitham et al. | Using trace scratchpads to reduce execution times in predictable real-time architectures | |
CN112540795A (zh) | 指令处理装置和指令处理方法 | |
CN117313595B (zh) | 用于功能验证的随机指令生成方法、设备及系统 | |
US20230315453A1 (en) | Forward conditional branch event for profile-guided-optimization (pgo) | |
US11416251B2 (en) | Apparatus for storing, reading and modifying constant values | |
Andorno | Design of the frontend for LEN5, a RISC-V Out-of-Order processor | |
CN116501385A (zh) | 指令处理方法、处理器、芯片及计算机设备 | |
Thongkaew et al. | Register-Based Process Virtual Machine Acceleration Using Hardware Extension with Hybrid Execution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |