确定访问地址的方法和装置

文档序号:1845804 发布日期:2021-11-16 浏览:20次 >En<

阅读说明:本技术 确定访问地址的方法和装置 (Method and device for determining access address ) 是由 郇丹丹 赵继业 李祖松 于 2021-10-20 设计创作,主要内容包括:本发明提供一种确定访问地址的方法和装置,属于电子技术领域。所述方法包括:接收访存指令,所述访存指令用于指示基地址和偏移量;获取所述基地址的高位地址和低位地址,所述低位地址与目标地址的索引Index和块内偏移BlockOffset的位置相对应,所述高位地址与所述目标地址的标签Tag的位置相对应;根据所述基地址的低位地址和所述偏移量,确定进位结果和所述目标地址的低位地址;根据预设的高位计算规则,对所述基地址的高位地址进行计算,确定多个预计算结果;根据所述进位结果和偏移量的符号信息,在所述多个预计算结果中,确定所述目标地址的高位地址;对所述目标地址所指示的位置执行所述访存指令对应的访存操作。(The invention provides a method and a device for determining an access address, and belongs to the technical field of electronics. The method comprises the following steps: receiving a memory access instruction, wherein the memory access instruction is used for indicating a base address and an offset; acquiring a high-order address and a low-order address of the base address, wherein the low-order address corresponds to an Index of a target address and a position of an intra-block offset BlockOffset, and the high-order address corresponds to a position of a Tag of the target address; determining a carry result and a low-order address of the target address according to the low-order address of the base address and the offset; calculating the high-order address of the base address according to a preset high-order calculation rule, and determining a plurality of pre-calculation results; according to the carry result and the sign information of the offset, determining a high-order address of the target address in the pre-calculation results; and executing the memory access operation corresponding to the memory access instruction on the position indicated by the target address.)

确定访问地址的方法和装置

技术领域

本发明涉及电子技术领域,尤其涉及一种确定访问地址的方法和装置。

背景技术

在电子

技术领域

中,计算机设备可以通过访存指令确定访问存储器的地址,进而从该地址所指示的物理地址中读取或写入数据。

访存指令包括基地址标识和偏移量。当接收到访存指令时,计算机设备可以根据访存指令中的基地址标识,从寄存器中获取相应的基地址,然后将基地址与偏移量相加,得到待访问的地址。

基地址与偏移量相加的过程在电路中是通过加法器实现的,具体是从低位开始依次相加,每次相加得到的结果还会确定是否进位。而基地址的位数较多,例如40位,导致计算待访问地址的延迟较大,使得处理效率较低。

发明内容

为了解决现有技术的问题,本发明实施例提供了一种确定访问地址的方法和装置。技术方案如下:

根据本发明的一方面,提供了一种确定访问地址的方法,所述方法包括:

接收访存指令,所述访存指令用于指示基地址和偏移量;

获取所述基地址的高位地址和低位地址,所述低位地址与目标地址的索引Index和块内偏移BlockOffset的位置相对应,所述高位地址与所述目标地址的标签Tag的位置相对应;

根据所述基地址的低位地址和所述偏移量,确定进位结果和所述目标地址的低位地址;

根据预设的高位计算规则,对所述基地址的高位地址进行计算,确定多个预计算结果;

根据所述进位结果和所述偏移量的符号信息,在所述多个预计算结果中,确定所述目标地址的高位地址;

对所述目标地址所指示的位置执行所述访存指令对应的访存操作。

可选的,所述根据所述基地址的低位地址和所述偏移量,确定进位结果和所述目标地址的低位地址,包括:

将所述基地址的低位地址与所述偏移量相加,得到所述目标地址的Index和BlockOffset,以及进位结果。

可选的,所述方法还包括:

当得到所述目标地址的Index时,根据所述目标地址的Index在高速缓冲存储器Cache中获取对应的多个缓存行CacheLine。

可选的,所述对所述目标地址所指示的位置执行所述访存指令对应的访存操作,包括:

在所述目标地址的高位地址中,确定所述目标地址的Tag;

根据所述目标地址的Tag,在基于Index获取的多个CacheLine中获取对应的目标CacheLine;

对所述目标CacheLine中BlockOffset所指示的位置执行所述访存指令对应的访存操作。

可选的,当所述偏移量的第一位数小于等于所述低位地址的第二位数时,所述根据预设的高位计算规则,对所述基地址的高位地址进行计算,确定多个预计算结果,包括:

将所述基地址的高位地址、所述偏移量的1扩展与1相加,确定第一结果,所述第一结果的选通条件为偏移量是负数,且所述进位结果指示进位;

将所述基地址的高位地址与所述偏移量的1扩展相加,确定第二结果,所述第二结果的选通条件为偏移量是负数,且所述进位结果指示不进位;

保留所述基地址的高位地址,确定第三结果,所述第三结果的选通条件为偏移量是正数,且所述进位结果指示不进位;

将所述基地址的高位地址与1相加,确定第四结果,所述第四结果的选通条件为偏移量是正数,且所述进位结果指示进位。

可选的,当所述偏移量的第一位数大于所述低位地址的第二位数时,所述根据预设的高位计算规则,对所述基地址的高位地址进行计算,确定多个预计算结果,包括:

将所述基地址的高位地址、所述偏移量的1扩展、所述偏移量超出所述第二位数的部分与1相加,确定第五结果,所述第五结果的选通条件为偏移量是负数,且所述进位结果指示进位;

将所述基地址的高位地址、所述偏移量的1扩展与所述偏移量超出所述第二位数的部分相加,确定第六结果,所述第六结果的选通条件为偏移量是负数,且所述进位结果指示不进位;

将所述基地址的高位地址与所述偏移量超出所述第二位数的部分相加,确定第七结果,所述第七结果的选通条件为偏移量是正数,且所述进位结果指示不进位;

将所述基地址的高位地址、所述偏移量超出所述第二位数的部分与1相加,确定第八结果,所述第八结果的选通条件为偏移量是正数,且所述进位结果指示进位。

根据本发明的另一方面,提供了一种确定访问地址的装置,所述装置包括:

接收模块,用于接收访存指令,所述访存指令用于指示基地址和偏移量;

获取模块,用于获取所述基地址的高位地址和低位地址,所述低位地址与目标地址的索引Index和块内偏移BlockOffset的位置相对应,所述高位地址与所述目标地址的标签Tag的位置相对应;

确定模块,用于根据所述基地址的低位地址和所述偏移量,确定进位结果和所述目标地址的低位地址;根据预设的高位计算规则,对所述基地址的高位地址进行计算,确定多个预计算结果;根据所述进位结果和所述偏移量的符号信息,在所述多个预计算结果中,确定所述目标地址的高位地址;

执行模块,用于对所述目标地址所指示的位置执行所述访存指令对应的访存操作。

可选的,所述确定模块用于:

将所述基地址的低位地址与所述偏移量相加,得到所述目标地址的Index和BlockOffset,以及进位结果。

可选的,所述确定模块还用于:

当得到所述目标地址的Index时,根据所述目标地址的Index在高速缓冲存储器Cache中获取对应的多个缓存行CacheLine。

可选的,所述执行模块用于:

在所述目标地址的高位地址中,确定所述目标地址的Tag;

根据所述目标地址的Tag,在基于Index获取的多个CacheLine中获取对应的目标CacheLine;

对所述目标CacheLine中BlockOffset所指示的位置执行所述访存指令对应的访存操作。

可选的,当所述偏移量的第一位数小于等于所述低位地址的第二位数时,所述确定模块用于:

将所述基地址的高位地址、所述偏移量的1扩展与1相加,确定第一结果,所述第一结果的选通条件为偏移量是负数,且所述进位结果指示进位;

将所述基地址的高位地址与所述偏移量的1扩展相加,确定第二结果,所述第二结果的选通条件为偏移量是负数,且所述进位结果指示不进位;

保留所述基地址的高位地址,确定第三结果,所述第三结果的选通条件为偏移量是正数,且所述进位结果指示不进位;

将所述基地址的高位地址与1相加,确定第四结果,所述第四结果的选通条件为偏移量是正数,且所述进位结果指示进位。

可选的,当所述偏移量的第一位数大于所述低位地址的第二位数时,所述确定模块用于:

将所述基地址的高位地址、所述偏移量的1扩展、所述偏移量超出所述第二位数的部分与1相加,确定第五结果,所述第五结果的选通条件为偏移量是负数,且所述进位结果指示进位;

将所述基地址的高位地址、所述偏移量的1扩展与所述偏移量超出所述第二位数的部分相加,确定第六结果,所述第六结果的选通条件为偏移量是负数,且所述进位结果指示不进位;

将所述基地址的高位地址与所述偏移量超出所述第二位数的部分相加,确定第七结果,所述第七结果的选通条件为偏移量是正数,且所述进位结果指示不进位;

将所述基地址的高位地址、所述偏移量超出所述第二位数的部分与1相加,确定第八结果,所述第八结果的选通条件为偏移量是正数,且所述进位结果指示进位。

根据本发明的另一方面,提供了一种电子设备,包括:

处理器;以及

存储程序的存储器,

其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行上述确定访问地址的方法。

根据本发明的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使计算机执行上述确定访问地址的方法。

本发明实施例中,当接收到访存指令时,可以将基地址划分为高位地址和低位地址,进而分别计算高位地址和低位地址来确定待访问目标地址。由于高位地址和低位地址可以分别计算,减少了加法器中进位链的长度,并且高位地址和低位地址可以并行计算,缩短了整体的计算时长,因此,采用本发明,可以减少计算目标地址的延迟,提高对访存指令的处理效率。

附图说明

在下面结合附图对于示例性实施例的描述中,本发明的更多细节、特征和优点被公开,在附图中:

图1示出了根据本发明示例性实施例提供的Cache结构示意图;

图2示出了根据本发明示例性实施例提供的组相连的Cache结构示意图;

图3-图13示出了根据本发明示例性实施例提供的指令格式示意图;

图14示出了根据本发明示例性实施例提供的确定访问地址的方法流程图;

图15示出了根据本发明示例性实施例提供的基地址示意图;

图16示出了根据本发明示例性实施例提供的确定访问地址的方法流程图;

图17示出了根据本发明示例性实施例提供的确定访问地址的方法流程图;

图18示出了根据本发明示例性实施例提供的确定访问地址的装置的示意性框图;

图19示出了能够用于实现本发明的实施例的示例性电子设备的结构框图。

具体实施方式

下面将参照附图更详细地描述本发明的实施例。虽然附图中显示了本发明的某些实施例,然而应当理解的是,本发明可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明。应当理解的是,本发明的附图及实施例仅用于示例性作用,并非用于限制本发明的保护范围。

应当理解,本发明的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本发明的范围在此方面不受限制。

本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。

需要注意,本发明中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。

本发明实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。

为了清楚描述本发明实施例提供的方法,下面对所使用的技术进行介绍。

1、Cache

高速缓冲存储器,位于CPU(Central Processing Unit,中央处理单元)和主存储器DRAM(Dynamic Random Access Memory,动态随机存取存储器)之间,通常由SRAM(StaticRandom-Access Memory,静态随机存取存储器)组成。CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定的时钟周期,而Cache则访问速度快,可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了从延迟长的内存存取数据,减少了CPU的等待时间,因而提高了系统的效率。

如图1所示的Cache结构示意图,Cache主要由两部分组成,标签(Tag)部分和数据(Data)部分。Data部分用于保存一片连续地址的数据,Tag部分用于存储这片连续数据的公共地址。一个Tag和它对应的所有数据组成一行称为一个Cache Line,而Cache Line中的数据部分称为数据块(Data Block)。如果一个数据可以存储在Cache中的多个地方,这些被同一个地址找到的多个Cache Line称为Cache Set。

2、Cache的组成方式

Cache的组成方式分为直接相连、组相连和全相连,本发明主要涉及组相连的组成方式。直接相连和和全相连可以分别看作路数为1以及路数为Cache行数的特殊的组相连组成方式。组相连的Cache结构示意图如图2所示。

处理器访问存储器的地址会被分为三部分,标签(Tag)、索引(Index)和块内偏移(Block Offset)。其中,使用Index来从Cache中找到一组Cache Line,也即是一个CacheSet;使用Index索引读出的Tag部分来和访问地址中的Tag进行比较,只有它们是相等的,才表明这个Cache Line就是想要的那个;在一个Cache Line中对应有很多个访存数据,通过存储器地址中的Block Offset部分和访存指令的访问宽度可以找到真正想要的数据,它可以定位到每个字节。在Cache Line中还有一个有效位(valid),用来标记Cache Line是否保存着有效的数据,只有在之前被访问过的存储器地址,它的数据才会存在对应的CacheLine中,相应的有效位也会被置为1。

3、访存指令

访存指令分为取数指令和存数指令,都需要访问高速缓存。

不同指令集的访存指令的格式不完全一样,通常的指令集取数指令都包括取字节(lb)、取半字(lh)、取字(lw)、取双字(ld)四种,存数指令都包括存字节(sb)、存半字(sh)、存字(sw)、存双字(sd)四种。下面以RISC-V(第五代精简指令集)为例,分别对取数指令和存数指令进行说明,但不限于下述指令。

(1)取数指令

lbrd, offset(rs1),x[rd] = sext(M[x[rs1] + sext(offset)][7:0]),指令格式如图3所示。其中,rd、rs1为基地址寄存器的标识,offset为偏移量。该指令是指字节加载(Load Byte),即从地址x[rs1] + sign-extend(offset)读取一个字节,经符号位扩展后写入x[rd]。

lburd, offset(rs1),x[rd] = M[x[rs1] + sext(offset)][7:0],指令格式如图4所示。该指令是指无符号字节加载 (Load Byte, Unsigned),即从地址x[rs1] + sign-extend(offset)读取一个字节,经零扩展后写入x[rd]。

ldrd, offset(rs1),x[rd] = M[x[rs1] + sext(offset)][63:0],指令格式如图5所示。该指令是指双字加载 (Load Doubleword),即从地址x[rs1] + sign-extend(offset)读取八个字节,写入x[rd]。

lhrd, offset(rs1),x[rd] = sext(M[x[rs1] + sext(offset)][15:0]),指令格式如图6所示。该指令是指半字加载 (Load Halfword),即从地址x[rs1] + sign-extend(offset)读取两个字节,经符号位扩展后写入x[rd]。

lhurd, offset(rs1),x[rd] = M[x[rs1] + sext(offset)][15:0],指令格式如图7所示。该指令是指无符号半字加载(Load Halfword, Unsigned),即从地址x[rs1] +sign-extend(offset)读取两个字节,经零扩展后写入x[rd]。

lwrd, offset(rs1),x[rd] = sext(M[x[rs1] + sext(offset)][31:0]),指令格式如图8所示。该指令是指字加载(Load Word),即从地址x[rs1] + sign-extend(offset)读取四个字节,写入x[rd]。

lwurd, offset(rs1),x[rd] = M[x[rs1] + sext(offset)][31:0],指令格式如图9所示。该指令是指无符号字加载(Load Word, Unsigned),即从地址x[rs1] + sign-extend(offset)读取四个字节,零扩展后写入x[rd]。

(2)存数指令

sb rs2, offset(rs1),M[x[rs1]+sext(offset)=x[rs2][7:0],指令格式如图10所示。该指令是指存字节 (Store Byte),即将地址x[rs2]中的1个字节存入内存地址x[rs1]+sign-extend(offset)。

sd rs2, offset(rs1), M[x[rs1]+sext(offset)=x[rs2][63:0],指令格式如图11所示。该指令是指存双字 (Store Doubleword),即将地址x[rs2]中的8字节存入内存地址x[rs1]+sign-extend(offset)。

sh rs2, offset(rs1),M[x[rs1]+sext(offset)=x[rs2][15:0],指令格式如图12所示。该指令是指存半字(Store Halfword),即将地址x[rs2]的低位2个字节存入内存地址x[rs1]+sign-extend(offset)。

sw rs2, offset(rs1),M[x[rs1]+sext(offset)=x[rs2][31:0],指令格式如图13所示。该指令是指存字(Store Word),即将地址x[rs2]的低位4个字节存入内存地址x[rs1]+sign-extend(offset)。

本发明实施例提供了一种确定访问地址的方法,该方法可以应用于终端、服务器和/或其他具备处理能力的电子设备,本发明对此不作限定。

下面将参照图14所示的确定访问地址的方法流程图,对该方法进行介绍。

步骤1,接收访存指令。

其中,访存指令可以用于指示基地址和偏移量。

在一种可能的实施方式中,设备在运行过程中,设备中的访存部件可以接收到访存指令。例如,当设备执行某个计算任务时,可以触发相应的取数指令,获取计算所需的数据。本实施例对触发访存指令的具体任务不作限定。

该访存指令可以是上述任一类型的指令,该设备可以根据访存指令中携带的基地址寄存器的标识,从寄存器中获取对应的基地址。

步骤2,获取基地址的高位地址和低位地址。

其中,低位地址与目标地址的索引Index和块内偏移Block Offset的位置相对应,高位地址与目标地址的标签Tag的位置相对应。

在一种可能的实施方式中,设备可以根据处理器访问Cache的地址格式来获取基地址的高位地址和低位地址。具体的,如图15所示的基地址示意图,可以将基地址中与Tag的位置相对应的地址作为高位地址,与Index和Block Offset的位置相对应的地址作为低位地址。

步骤3,根据基地址的低位地址和偏移量,确定进位结果和目标地址的低位地址。

具体的,上述步骤3的处理可以为:将基地址的低位地址与偏移量相加,得到目标地址的Index和Block Offset,以及进位结果。其中,进位结果可以用于指示是否进位,例如需要进位时,进位结果可以为1;无需进位时,进位结果可以为0。在设备中,步骤3可以通过加法器实现。

根据低位地址和偏移量的位数之间的关系,可以分为两种情况:第一种情况是指偏移量的位数小于等于基地址的低位地址的位数;第二种情况是指偏移量的位数大于基地址的低位地址的位数。

为了方便介绍,本实施例中将偏移量的位数称为第一位数,低位地址的位数称为第二位数。下面分别针对两种情况介绍步骤3可能的实施方式。

对于上述第一种情况,可以从低位开始,依次对基地址的低位地址和偏移量进行相加,得到每一位的相加结果。当最后一位计算结束时,确定是否进位,得到进位结果。

对于上述第二种情况,可以获取偏移量中与基地址的低位地址的位数相对应的部分,也即是偏移量的低位部分,进而从低位开始,依次对基地址的低位地址和偏移量的低位部分进行相加,得到每一位的相加结果。当最后一位计算结束时,确定是否进位,得到进位结果。

可选的,当得到目标地址的Index时,设备可以根据目标地址的Index在高速缓冲存储器Cache中获取对应的多个缓存行Cache Line。也即是说,步骤3得到的计算结果在理论上已经得到了目标地址的Index和Block Offset,因此,当步骤3的计算完成后,设备即可根据Index在Cache中查询并读取对应的多个Cache Line。

需要说明的是,本实施例中基于Index在Cache中的查询操作,每当计算得到Index时即可开始执行,无需等待高位地址的计算完成。相比于完全计算得到目标地址后,再基于Index在Cache中执行查询操作,节约了等待计算的时长,可以减少访存指令的处理延迟。

步骤4,根据预设的高位计算规则,对基地址的高位地址进行计算,确定多个预计算结果。

在一种可能的实施方式中,设备中可以预先设置对高位地址的高位计算规则。在步骤3执行的同时,设备可以根据高位计算规则对高位地址进行预计算,计算过程可以通过加法器实现。下面分别针对上述两种情况介绍预计算结果。

对于上述第一种情况,即当偏移量的第一位数小于等于基地址的低位地址的第二位数时,上述步骤4的处理可以如下:

将基地址的高位地址、偏移量的1扩展与1相加,确定第一结果,第一结果的选通条件为偏移量是负数,且进位结果指示进位;

将基地址的高位地址与偏移量的1扩展相加,确定第二结果,第二结果的选通条件为偏移量是负数,且进位结果指示不进位;

保留基地址的高位地址,确定第三结果,第三结果的选通条件为偏移量是正数,且进位结果指示不进位;

将基地址的高位地址与1相加,确定第四结果,第四结果的选通条件为偏移量是正数,且进位结果指示进位。

相对应的电路流程图如图16所示。

设目标地址总位数为D,偏移量的位数为M,低位地址的位数为N。此时,M<=N,对应的高位计算规则如下表1所示:

表1 预计算结果与高位计算规则的关系

序号 计算公式 偏移量符号 是否进位
1 base[D-1:N]+1111…1111(D-N位符号扩展)+1 负数 1
2 base[D-1:N]+1111…1111(D-N位符号扩展) 负数 0
3 base[D-1:N](D-N位) 正数 0
4 base[D-1:N](D-N位)+1 正数 1

其中,base[D-1:N]是指高位地址;1111…1111(D-N位符号扩展)是指偏移量的1扩展;“是否进位”中,“1”表示进位,“0”表示不进位。实际上,序号1-4中的每个计算公式均可以包括偏移量的符号位扩展,序号1、2中的偏移量为负数,对应的符号位扩展为1扩展;序号3、4中的偏移量为正数,对应的符号位扩展为0扩展,由于0扩展在实际应用中不进行加法计算,此处将0扩展隐含在公式中,下表2、3中同理,不再赘述。

对于上述第二种情况,即当偏移量的第一位数大于基地址的低位地址的第二位数时,上述步骤4的处理可以如下:

将基地址的高位地址、偏移量的1扩展、所述偏移量超出第二位数的部分与1相加,确定第五结果,第五结果的选通条件为偏移量是负数,且进位结果指示进位;

将基地址的高位地址、偏移量的1扩展与偏移量超出第二位数的部分相加,确定第六结果,第六结果的选通条件为偏移量是负数,且进位结果指示不进位;

将基地址的高位地址与偏移量超出第二位数的部分相加,确定第七结果,第七结果的选通条件为偏移量是正数,且进位结果指示不进位;

将基地址的高位地址、偏移量超出第二位数的部分与1相加,确定第八结果,第八结果的选通条件为偏移量是正数,且进位结果指示进位。

相对应的电路流程图如图17所示。

设目标地址总位数为D,偏移量的位数为M,低位地址的位数为N。此时,M>N,对应的高位计算规则如下表2所示:

表2 预计算结果与高位计算规则的关系

序号 计算公式 偏移量符号 是否进位
1 base[D-1:N]+1111…1111(D-M位符号扩展)+offset[M-1:N]+1 负数 1
2 base[D-1:N]+1111…1111(D-M位符号扩展)+offset[M-1:N] 负数 0
3 base[D-1:N](D-N位)+offset[M-1:N] 正数 0
4 base[D-1:N](D-N位)+offset[M-1:N]+1 正数 1

其中,base[D-1:N]是指基地址的高位地址;1111…1111(D-M位符号扩展)是指偏移量的1扩展;offset[M-1:N]是指偏移量超出第二位数的部分,即偏移量的高位部分;“是否进位”中,“1”表示进位,“0”表示不进位。

在本实施例中,高位地址和低位地址可以并行计算,相比于串行计算的方式,减少了进位链的长度,可以减少延迟。

步骤5,根据进位结果和偏移量的符号信息,在多个预计算结果中,确定目标地址的高位地址。

在一种可能的实施方式中,在设备中,步骤5可以通过选择器实现。在步骤3中确定进位结果之后,设备可以根据如上的选通条件,基于进位结果以及偏移量的符号,确定通过选择器的目标计算结果,确定目标地址的高位地址。

步骤6,对目标地址执行访存指令对应的访存操作。

具体的,上述步骤6的处理可以如下:根据目标计算结果,确定目标地址的高位地址,确定目标地址的Tag;根据目标地址的Tag,在基于Index获取的多个Cache Line中获取对应的目标Cache Line;在目标Cache Line中执行访存指令对应的访存操作。

在一种可能的实施方式中,当步骤5的目标计算结果确定时,也即是目标地址的高位地址确定。此时,设备可以执行步骤6,从目标计算结果中获取目标地址的Tag。进而,通过比较器在读取的多个Cache Line中,判断每个Cache Line的Tag是否与目标地址的Tag相同,以及有效位是否指示存储有效数据,也即是Tag是否命中。如果命中,即Cache Line的Tag与目标地址的Tag相同,且有效位为1,指示存储有效数据,则通过选择器,选择命中的目标Cache Line中的Data Block,并根据Block Offset在Data Block中的相应位置读取或存储数据;如果不命中,即Cache Line的Tag与目标地址的Tag不相同,或有效位为0,指示未存储有效数据,则可以访问下一级存储器,读取相应的数据。

本发明实施例中,当接收到访存指令时,可以将基地址划分为高位地址和低位地址,进而分别计算高位地址和低位地址来确定待访问目标地址。由于高位地址和低位地址可以分别计算,减少了加法器中进位链的长度,并且高位地址和低位地址可以并行计算,缩短了整体的计算时长,因此,采用本发明,可以减少计算目标地址的延迟,提高对访存指令的处理效率。

为了更加清楚地表述本发明提供的确定访问地址的方法,下面将参照一种具体的实施方式,对上述确定访问地址的方法进行介绍。

步骤1,CPU的访存部件接收到访存指令,字节加载(lb),读取基地址为40’h0080009000,偏移量offset为12’h0f2地址中的一个字节的数据经符号扩展后写入寄存器中。

Cache的配置是容量32KB,每个Cache行512位(即64字节),8路组相联,每路4KB、64个Cache行。

在40位的访问地址中,Block offset对应最低6位的地址,Index对应中间的6位地址,Tag对应高的28位地址。

步骤2,获取基地址的高位地址和低位地址,即与索引Tag对应的高28位,为28’h0080009;和低位地址,即与索引Index和块内偏移Block offset对应的低12位,为12h000。

步骤3,根据基地址的低位地址和偏移量,确定进位结果和目标地址的低位地址。

具体的,上述步骤3的处理可以为:根据低位地址和偏移量的位数之间的关系,属于偏移量的位数小于等于低位地址的位数的情况。将低位地址12’h000与偏移量12’h0f2相加,得到目标地址的Index和Block Offset,为12’h0f2,以及进位结果0。其中,进位结果为0,指示无需进位。

得到目标地址的Index为6’h03,CPU根据目标地址的Index索引的行号3(十进制)在Cache中获取对应的8路的8个缓存行Cache Line。Cache Line包括数据和Tag。同时得到对应的Block offset为6’h32,表示需要读取的字节位于第50(十进制)个字节。

基于Index在Cache中的查询操作,得到Index时即可开始执行,无需等待高位地址的计算完成。相比于完全计算得到完全的40位目标地址后,再基于Index在Cache中执行查询操作,节约了等待计算的时长,可以减少访存指令的处理延迟。

步骤4,在计算低位地址的同时,根据预设的高位计算规则,对基地址的高位地址进行计算,确定多个预计算结果。

偏移量的位数12位,小于等于低位地址的位数12位时,步骤4的处理可以如下:

将基地址的高位地址、偏移量的1扩展与1相加,确定第一结果28’h0080009,第一结果的选通条件为偏移量是负数,且进位结果指示进位;

将基地址的高位地址与偏移量的1扩展相加,确定第二结果28’h0080008,第二结果的选通条件为偏移量是负数,且进位结果指示不进位;

保留基地址的高位地址,确定第三结果28’h0080009,第三结果的选通条件为偏移量是正数,且进位结果指示不进位;

将基地址的高位地址与1相加,确定第四结果28’h008000a,第四结果的选通条件为偏移量是正数,且进位结果指示进位。

设目标地址总位数D为40位,偏移量的位数M为12位,低位地址的位数N为12位。此时,M<=N,对应的高位计算规则如下表3所示:

表3 预计算结果与高位计算规则的关系

序号 计算公式 偏移量符号 是否进位
1 28’h0080009+1111…1111(28位符号扩展)+1=28’h0080009 负数 1
2 28’h0080009+1111…1111(28位符号扩展)=28’h0080008 负数 0
3 28’h0080009 正数 0
4 28h0080009+1=28’h008000a 正数 1

高位地址和低位地址并行计算,相比于串行计算的方式,减少了进位链的长度,减少延迟。

步骤5,根据进位结果0,偏移量offset为正数,在多个预计算结果中,选择出目标地址的高位地址为序号3。

步骤6,对目标地址执行访存指令对应的访存操作。

根据目标计算结果,确定目标地址的Tag为28’h0080009;根据目标地址的Tag,在基于Index获取的多个Cache Line中获取对应的目标Cache Line的Tag;在目标Cache Line中执行访存指令对应的访存操作。

判断每个Cache Line的Tag是否与目标地址的Tag相同,以及有效位是否指示存储有效数据,也即是Tag是否命中。判断得到第0路命中,通过选择器,选择命中的第0路目标Cache Line中的Data Block,并根据Block Offset在Data Block中的相应位置读取第50个字节的数据。

本发明实施例提供了一种确定访问地址的装置,该装置用于实现上述确定访问地址的方法。如图18所示的确定访问地址的装置的示意性框图,确定访问地址的装置1800包括:接收模块1801,获取模块1802,确定模块1803,执行模块1804。

接收模块1801,用于接收访存指令,访存指令用于指示基地址和偏移量;

获取模块1802,用于获取基地址的高位地址和低位地址,低位地址与目标地址的索引Index和块内偏移BlockOffset的位置相对应,高位地址与目标地址的标签Tag的位置相对应;

确定模块1803,用于根据基地址的低位地址和偏移量,确定进位结果和目标地址的低位地址;根据预设的高位计算规则,对基地址的高位地址进行计算,确定多个预计算结果;根据进位结果和偏移量的符号信息,在多个预计算结果中,确定目标地址的高位地址;

执行模块1804,用于对目标地址所指示的位置执行访存指令对应的访存操作。

可选的,确定模块1803用于:

将基地址的低位地址与偏移量相加,得到目标地址的Index和BlockOffset,以及进位结果。

可选的,确定模块1803还用于:

当得到目标地址的Index时,根据目标地址的Index在高速缓冲存储器Cache中获取对应的多个缓存行CacheLine。

可选的,执行模块1804用于:

在目标地址的高位地址中,确定目标地址的Tag;

根据目标地址的Tag,在基于Index获取的多个CacheLine中获取对应的目标CacheLine;

对目标CacheLine中BlockOffset所指示的位置执行访存指令对应的访存操作。

可选的,当偏移量的第一位数小于等于低位地址的第二位数时,确定模块1803用于:

将所述基地址的高位地址、所述偏移量的1扩展与1相加,确定第一结果,所述第一结果的选通条件为偏移量是负数,且所述进位结果指示进位;

将所述基地址的高位地址与所述偏移量的1扩展相加,确定第二结果,所述第二结果的选通条件为偏移量是负数,且所述进位结果指示不进位;

保留所述基地址的高位地址,确定第三结果,所述第三结果的选通条件为偏移量是正数,且所述进位结果指示不进位;

将所述基地址的高位地址与1相加,确定第四结果,所述第四结果的选通条件为偏移量是正数,且所述进位结果指示进位。

可选的,当偏移量的第一位数大于低位地址的第二位数时,确定模块1803用于:

将所述基地址的高位地址、所述偏移量的1扩展、所述偏移量超出所述第二位数的部分与1相加,确定第五结果,所述第五结果的选通条件为偏移量是负数,且所述进位结果指示进位;

将所述基地址的高位地址、所述偏移量的1扩展与所述偏移量超出所述第二位数的部分相加,确定第六结果,所述第六结果的选通条件为偏移量是负数,且所述进位结果指示不进位;

将所述基地址的高位地址与所述偏移量超出所述第二位数的部分相加,确定第七结果,所述第七结果的选通条件为偏移量是正数,且所述进位结果指示不进位;

将所述基地址的高位地址、所述偏移量超出所述第二位数的部分与1相加,确定第八结果,所述第八结果的选通条件为偏移量是正数,且所述进位结果指示进位。

本发明实施例中,当接收到访存指令时,可以将基地址划分为高位地址和低位地址,进而分别计算高位地址和低位地址来确定待访问目标地址。由于高位地址和低位地址可以分别计算,减少了加法器中进位链的长度,并且高位地址和低位地址可以并行计算,缩短了整体的计算时长,因此,采用本发明,可以减少计算目标地址的延迟,提高对访存指令的处理效率。

本发明示例性实施例还提供一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器。存储器存储有能够被至少一个处理器执行的计算机程序,计算机程序在被至少一个处理器执行时用于使电子设备执行根据本发明实施例的方法。

本发明示例性实施例还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,计算机程序在被计算机的处理器执行时用于使计算机执行根据本发明实施例的方法。

本发明示例性实施例还提供一种计算机程序产品,包括计算机程序,其中,计算机程序在被计算机的处理器执行时用于使计算机执行根据本发明实施例的方法。

参考图19,现将描述可以作为本发明的服务器或客户端的电子设备1900的结构框图,其是可以应用于本发明的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,数据中心服务器、笔记本电脑、瘦客户机、膝上型计算机、台式计算机、工作站、个人数字助理、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。

如图19所示,电子设备1900包括计算单元1901,其可以根据存储在只读存储器(ROM)1902中的计算机程序或者从存储单元1908加载到随机访问存储器(RAM)1903中的计算机程序,来执行各种适当的动作和处理。在RAM 1903中,还可存储设备1900操作所需的各种程序和数据。计算单元1901、ROM 1902以及RAM 1903通过总线1904彼此相连。输入/输出(I/O)接口1905也连接至总线1904。

电子设备1900中的多个部件连接至I/O接口1905,包括:输入单元1906、输出单元1907、存储单元1908以及通信单元1909。输入单元1906可以是能向电子设备1900输入信息的任何类型的设备,输入单元1906可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入。输出单元1907可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元1908可以包括但不限于磁盘、光盘。通信单元1909允许电子设备1900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙设备、WiFi设备、WiMax设备、蜂窝通信设备和/或类似物。

计算单元1901可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1901的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1901执行上文所描述的各个方法和处理。例如,在一些实施例中,确定访问地址的方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1908。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1902和/或通信单元1909而被载入和/或安装到电子设备1900上。在一些实施例中,计算单元1901可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行确定访问地址的方法。

用于实施本发明的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本发明的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

如本发明使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。

25页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于高低位的确定访问地址的方法和装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类