1.本发明涉及一种电子装置,且特别涉及一种计算装置及其内存依赖管理 方法和机器可读存储介质。
背景技术:
2.一般而言,在计算程序(program)中的多个
指令的执行是有序的。比如 说,前一个计算指令生成计算结果后,存储指令(store instruction)可以将处 理器的计算结果存储至内存,然后
加载指令(load instruction)可以从内存提 取
所述计算结果至处理器以供下一个计算指令使用。处理器在执行计算程序 的过程中,处理器能会因为某些原因而被闲置以等待下一指令。为了提升处 理器的效能,乱序执行(out-of-order execution,简称oooe或ooe)技术被 应用于计算器工程领域。在乱序执行技术中,处理器执行指令的顺序是由输 入数据可用性所决定,而不是由计算程序的原始顺序所决定。乱序执行可以 避免处理器因等待下一指令所引起的闲置/延迟,因此可以避免特定类型的延 迟消耗。
3.乱序执行操作可能会使计算程序的执行发生加载存储冲突(或称加载存 储风险,load-store hazards)。举例来说,假设某一个存储指令必须先被执行然 后才能执行加载指令,乱序执行操作可能会在所述存储指令未被执行的情况 下先执行了所述加载指令。可想而知,所述加载指令从内存提取的数据是不 正确地,而这样的问题便是加载存储冲突。如何有效率地解决加载存储冲突 问题,是本领域诸多技术课题之一。
技术实现要素:
4.本发明提供一种计算装置及其内存依赖管理(memory dependencymanagement)方法,以及机器可读存储介质,以解决加载存储冲突(或称加 载存储风险,load-store hazards)问题。
5.在根据本发明的实施例中,所述内存依赖管理方法包括:检查目前发射 (issue)的存储指令(store instruction)与先前发射的第一加载指令(loadinstruction)有无发生加载存储冲突;在目前发射的存储指令与先前发射的第 一加载指令发生加载存储冲突的情况下,从先前发射的多个已发射指令中检 索出对于第一加载指令有依赖性的至少一个相冲突指令,其中所述至少一个 相冲突指令包括所述第一加载指令;以及重新发射所述至少一个相冲突指令。
6.在根据本发明的实施例中,所述机器可读存储介质用于存储非暂时性机 器可读指令。当所述非暂时性机器可读指令由计算机执行时,可以实现所述 内存依赖管理方法。
7.在根据本发明的实施例中,所述计算装置包括内存以及运算核。运算核 耦接至内存。运算核检查目前发射的存储指令与先前发射的第一加载指令有 无发生加载存储冲突,其中所述存储指令用以将数据存储至所述内存,以及 所述第一加载指令用以从所述内存提取数据。在目前发射的存储指令与先前 发射的第一加载指令发生加载存储冲突的情况下,运算核从先前发射的多个 已发射指令中检索出对于所述第一加载指令有依赖性的至
少一个相冲突指令, 其中所述至少一个相冲突指令包括所述第一加载指令。运算核重新发射所述 至少一个相冲突指令。
8.基于上述,当目前发射的存储指令与先前发射的第一加载指令发生加载 存储冲突时,已经发射执行且尚未保序(committed in order)的多个已发射指 令可能包含与所述第一加载指令无关的指令。若将这些已发射指令全部重新 发射,对与第一加载指令无关的所述指令所进行的重新发射(重新执行)是 浪费时间与资源的操作。在本发明的实施例中,运算核可以在发生加载存储 冲突时从先前发射的多个已发射指令中选择一个或多个指令作为所述相冲突 指令(包括所述第一加载指令以及对于所述第一加载指令有依赖性的指令), 然后重新发射所述相冲突指令以解决加载存储冲突问题。亦即,当目前发射 的存储指令与先前发射的第一加载指令发生加载存储冲突时,与第一加载指 令无关的指令不会被重新发射(重新执行)。因此,所述内存依赖管理方法可 以有效率地解决加载存储冲突问题。
附图说明
9.图1是依照本发明的一实施例的一种计算装置的电路方块(circuit block) 示意图。
10.图2是依照本发明的一实施例的一种计算装置的内存依赖管理方法的流 程示意图。
11.图3是依照本发明的一实施例的一种运算核的电路方块示意图。
12.附图标记说明
13.100:计算装置
14.110:内存
具体实施方式
15.现将详细地参考本发明的示范性实施例,示范性实施例的实例说明于附 图中。只要有可能,相同组件符号在附图和描述中用来表示相同或相似部分。
16.在本案说明书全文(包括权利要求)中所使用的“耦接(或连接)”一词 可指任何直接或间接的连接手段。举例而言,若文中描述第一装置耦接(或 连接)于第二装置,则应该被解释成该第一装置可以直接连接于该第二装置, 或者该第一装置可以透过其他装置或某种连接手段而间接地连接至该第二装 置。本案说明书全文(包括权利要求)中提及的“第一”、“第二”等用语是用 以命名组件(element)的名称,而并非用来限制组件数量的上限或下限,亦 非用来限制组件的次序。另外,凡可能之处,在附图及实施方式中使用相同 标号的组件/构件/步骤代表相同或类似部分。不同实施例中使用相同标号或使 用相同用语的组件/构件/步骤可以相互参照相关说明。
17.图1是依照本发明的一实施例的一种计算装置100的电路方块(circuitblock)示意图。图1所示计算装置100包括内存110以及运算核120。内存 110用以存放运算数(operand)以及其他数据。本实施利并不限制运算数/数 据的具体数据结构。举例来说,在神经网络的应用中,运算数可以是矢量 (vector)、矩阵(matrix)、张量(tensor)或是其他数据。运算核120耦接至 内存110。在不同的应用范例中,所述运算核120包括张量核
(tensorcore)、通用矩阵乘(generalmatrixmultiply,gemm)核、算术逻辑单元(arithmeticlogicunit,alu)以及/或是其他运算单元。依照不同的设计需求,在一些实施例中,上述运算核120的实现方式可以是硬件(hardware)电路。在另一些实施例中,运算核120的实现方式可以是固件(firmware)、软件(software,即程序)或是前述二者的组合形式。在又一些实施例中,运算核120的实现方式可以是硬件、固件、软件中的多者的组合形式。
18.以硬件形式而言,上述运算核120可以实现于集成电路(integratedcircuit)上的逻辑电路。举例来说,运算核120的相关功能可以被实现于一或多个控制器、微控制器(microcontroller)、微处理器(microprocessor)、特殊应用集成电路(application-specificintegratedcircuit,asic)、数字信号处理器(digitalsignalprocessor,dsp)、场可程序逻辑门阵列(fieldprogrammablegatearray,fpga)及/或其他处理单元中的各种逻辑区块、模块和电路。运算核120的相关功能可以利用硬件描述语言(hardwaredescriptionlanguages,例如veriloghdl或vhdl)或其他合适的编程语言来实现为硬件电路,例如集成电路中的各种逻辑区块、模块和电路。
19.以软件形式及/或固件形式而言,上述运算核120的相关功能可以被实现为编程码(programmingcodes)。例如,利用一般的编程语言(programminglanguages,例如c、c++或汇编语言)或其他合适的编程语言来实现运算核120。所述编程码可以被记录/存放在非临时的机器可读存储介质(non-transitorymachine-readablestoragemedium)中。在一些实施例中,所述机器可读存储介质例如包括半导体内存以及(或是)存储装置。所述半导体内存包括记忆卡、只读存储器(readonlymemory,rom)、闪存(flashmemory)、可程序设计的逻辑电路或是其他半导体内存。所述存储装置包括带(tape)、碟(disk)、硬盘(harddiskdrive,hdd)、固态硬盘(solid-statedrive,ssd)或是其他存储装置。电子设备(例如计算机、中央处理器(centralprocessingunit,cpu)、控制器、微控制器或微处理器)可以从所述机器可读存储介质中读取并执行所述编程码,从而实现运算核120的相关功能。或者,所述编程码可经由任意传输媒体(例如通信网路或广播电波等)而提供给所述电子设备。所述通信网路例如是因特网(internet)、有线通信(wiredcommunication)网络、无线通信(wirelesscommunication)网络或其它通信介质。
20.图2是依照本发明的一实施例的一种计算装置的内存依赖管理方法的流程示意图。在一些实施例中,图2所示内存依赖管理方法可以实现于固件(firmware)或软件(software,即程序)。例如,图2所示内存依赖管理方法的相关操作可以被实现为非暂时性机器可读指令(编程码或程序),而所述非暂时性机器可读指令可以被存储在机器可读存储介质。当非暂时性机器可读指令由计算机执行时可以实现图2所示内存依赖管理方法。在另一些实施例中,图2所示内存依赖管理方法可以实现于硬件,例如实现于图1所示计算装置100。
21.请参照图1与图2。运算核120可以从内存110提取指令(以下称目前指令)。例如,运算核120可以从内存110提取指令,例如加载(load)指令、矩阵乘和累加(matrixmultiplyandaccumulation,mma)指令、存储(store)指令或是其他指令。其中,所述存储指令用以将运算核120的数据存储至内存110,以及所述加载指令用以从内存110提取数据(经加载数据)至运算核120。运算核120可以重新排序所提取的指令,以便将指令发射
(issue)给在 运算核120内部的执行电路。因此,运算核120可以进行乱序执行(out-of
‑ꢀ
order execution,简称oooe或ooe)。为了避免加载存储冲突(或称加载存 储风险,load-store hazards)问题的发生,在步骤s210中,运算核120可以 检查目前发射的存储指令与先前发射的加载指令有无发生加载存储冲突。在 目前发射的存储指令与先前发射的加载指令没有发生加载存储冲突的情况下 (步骤s220的判断结果为“否”),运算核120可以进行后续正常操作(步骤 s230)。
22.在此,所述加载存储冲突可以被定义为:目前发射的存储指令的存取地 址范围的部分或全部重迭(重叠)于先前发射的加载指令的存取地址范围的 部分或全部,而且所述存储指令的重新排序
队列识别号(reorder queue id, roq_id)早于所述加载指令的重新排序队列识别号。在目前发射的存储指令 与先前发射的加载指令发生加载存储冲突的情况下(步骤s220的判断结果为
ꢀ“
是”),运算核120可以进行步骤s240。在步骤s240中,运算核120可以 从先前发射且尚未保序(committed in order)的多个已发射指令中检索出对于 所述加载指令有依赖性的至少一个相冲突指令。在此,所述至少一个相冲突 指令包括发生加载存储冲突的所述加载指令。在这些已发射指令中的一个或 多个指令使用了发生加载存储冲突的所述加载指令的经加载数据的情况下, 所述至少一个相冲突指令还包括使用了所述加载指令的经加载数据的所述一 个或多个指令(发生加载存储冲突的所述加载指令的相关指令)。
23.在步骤s250中,运算核120可以重新发射步骤s240所检索出的所述相 冲突指令(发生加载存储冲突的所述加载指令及其相关指令),以便于在目前 发射的所述存储指令完成执行后重新执行所述相冲突指令。在步骤s250后, 运算核120可以进行后续正常操作(步骤s230)。基此,图2所示内存依赖 管理方法可以解决加载存储冲突问题。须强调的是,当目前发射的存储指令 与先前发射的加载指令发生加载存储冲突时,已经发射执行且尚未保序的多 个已发射指令可能包含与所述加载指令无关的指令(亦即,不会被所述加载 指令影响的指令)。若将这些已发射且尚未保序的指令全部重新发射与重新执 行,进行的重新发射(重新执行)与发生加载存储冲突的所述加载指令无关 的指令是浪费时间与资源的操作。在本发明的实施例中,运算核120可以在 发生加载存储冲突时从先前发射的多个已发射指令中检索出一个或多个指令 作为所述相冲突指令,然后重新发射(重新执行)所述相冲突指令以解决加 载存储冲突问题。亦即,当目前发射的存储指令与先前发射的加载指令发生 加载存储冲突时,与所述加载指令无关的指令不会被重新发射(重新执行)。 因此,图2所示内存依赖管理方法可以有效率地解决加载存储冲突问题。
24.图3是依照本发明的一实施例所绘示,一种运算核120的电路方块示意 图。图3所示内存110以及运算核120可以参照图1所示内存110以及运算 核120的相关说明,故不再赘述。在图3所示实施例中,运算核120包括重 新排序队列(reorder queue,roq)电路121、执行电路122以及加载存储队 列(load-store queue,lsq)电路123。重新排序队列电路121可以将多个指 令之间的关联性填写至关联性信息表。所述关联性信息表的具体结构可以依 照实际设计来决定。
25.举例来说,表1是关联性信息表的一个具体范例。表1所示关联性信息 表包括重新排序队列识别号(roq_id)字段、指令字段、来源运算数字段以 及目的运算数字段。表1所示指令字段是为了帮助阅读者理解,而实际关联 性信息表可以没有表1所示指令字段。表1所
示指令字段展现多个指令的伪 代码(pseudo code),其中st_mem(adr100)表示存取地址为“adr100”的存储 指令,st_mem(adr200)表示存取地址为“adr200”的存储指令,ld_mem(adr100) 表示存取地址为“adr100”的加载指令,ld_mem(adr300)表示存取地址为
ꢀ“
adr300”的加载指令,inst_4(#2)表示来源运算数(operand)为重新排序队 列识别号“2”的运算指令,inst_5(#3)表示来源运算数为重新排序队列识别号
ꢀ“
3”的运算指令,inst_10(#3)表示来源运算数为重新排序队列识别号“3”的 另一个运算指令,inst_11(#4,5)表示来源运算数为重新排序队列识别号“4”与
ꢀ“
5”的运算指令,inst_12(#11)表示来源运算数为重新排序队列识别号“11
”ꢀ
的运算指令,inst_13(#10)表示来源运算数为重新排序队列识别号“10”的运 算指令,inst_14(#13)表示来源运算数为重新排序队列识别号“13”的运算指 令,inst_15(#14)表示来源运算数为重新排序队列识别号“14”的运算指令, 而inst_6、inst_7、inst_8与inst_9表示其他指令。重新排序队列电路121可 以将表1所示多个指令的来源运算数的重新排序队列识别号(关联性)记录/ 填写至来源运算数字段,如表1所示。
26.表1:关联性信息表的一个具体范例
[0027][0028]
重新排序队列电路121可以用乱序方式发射表1所示多个指令给执行电 路122。重新排序队列电路121可以将表1所示每一个指令的处理状态记录 在处理状态表。所述处理状态表的具体结构可以依照实际设计来决定。举例 来说,表2是处理状态表的一个具体范例。表2所示处理状态表包括发射字 段、执行字段、保序字段以及重新发射字段。表2所示指令字段是为了帮助 阅读者理解,而实际处理状态表可以没有表2所示指令字段。发射字段用以 记录指令的发射状态,其中“n”表示尚未发射给执行电路122,以及“y”表 示已经发射给执行电路122。执行字段用以记录指令的执行状态,其中“n
”ꢀ
表示执行电路122尚未执行,以及“y”表示执行电路122已经执行。保序字 段用以记录指令的保序状态,其中“n”表示指
令的执行顺序正确性尚未被确 认,以及“y”表示指令的执行顺序正确性已经被确认。重新发射字段用以记 录指令因发生所述加载存储冲突所导致的重新发射状态。
[0029]
表2:处理状态表的一个具体范例
[0030][0031]
表2所示范例情境为,重新排序队列识别号“0”与“1”的存储指令 st_mem(adr100)与st_mem(adr200)尚未发射给执行电路122。在存储指令 st_mem(adr100)与st_mem(adr200)发射给执行电路122后,处理状态表的内容 如表3所示。表3至表4所示实施例示范了图2所示步骤s240的一个实现范 例。在此实施例中,重新排序队列电路121可以在发生加载存储冲突时使用 表1所示关联性信息表的数据去从先前发射的多个已发射指令中搜寻/检索出 与发生加载存储冲突的加载指令ld_mem(adr100)的相关指令。然后,重新排 序队列电路121可以重新发射/执行相冲突指令(加载指令ld_mem(adr100)与 其相关指令)以解决加载存储冲突问题。特别的是,当目前发射的存储指令 ld_mem(adr100)与先前发射的加载指令st_mem(adr100)发生加载存储冲突时, 与加载指令ld_mem(adr100)无关的指令不会被重新发射(重新执行)。
[0032]
表3:st_mem(adr100)与st_mem(adr200)发射后的处理状态表
[0033][0034]
重新排序队列电路121可以检查目前发射的存储指令st_mem(adr100)、 st_mem(adr200)与先前发射的加载指令ld_mem(adr100)、ld_mem(adr300)有无 发生加载存储冲突。在表3所示范例情境中,目前发射的存储指令 st_mem(adr100)与先前发射的加载指令ld_mem(adr100)发生加载存储冲突。重 新排序队列电路121可以将发生加载存储冲突的加载指令ld_mem(adr100)记 录在表3所示处理状态表的重新发射字段以便重新发射。在表3所示重新发 射字段中,“y”表示指令需要被重新发射。因此,重新排序队列电路121可 以将发生加载存储冲突的加载指令ld_mem(adr100)的发射字段与执行字段的 内容从“y”改为“n”,如表3所示。
[0035]
基于发生加载存储冲突的加载指令ld_mem(adr100)的重新排序队列识别 号“2”,重新排序队列电路121可以从表1所示关联性信息表搜寻出与加载 指令ld_mem(adr100)的相关指令。因为重新排序队列识别号为“4”的运算指 令inst_4(#2)使用了重新排序队列识别号为“2”的加载指令ld_mem(adr100) 的经加载数据,所以运算指令inst_4(#2)是ld_mem(adr100)的相关指令。因为 重新排序队列识别号为“11”的运算指令inst_11(#4,5)使用了重新排序队列识 别号为“4”的运算指令inst_4(#2)的运算结果,所以运算指令inst_11(#4,5)是 ld_mem(adr100)的相关指令。因为重新排序队列识别号为“12”的运算指令 inst_12(#11)使用了重新排序队列识别号为“11”的运算指令inst_11(#4,5)的运 算结果,所以运算指令inst_12(#11)是ld_mem(adr100)的相关指令。表4展示 了在搜寻关联性信息表后,处理状态表的内容。重新排序队列电路121可以 将经搜寻出的这些相关指令记录在所述处理状态表的所述重新发射字段以 便重新发射。此外,重新排序队列电路121可以将这些相关指令inst_4(#2)、 inst_11(#4,5)、inst_12(#11)的发射字段与执行字段的内容从“y”改为“n”,如 表4所示。
[0036]
表4:搜寻关联性信息表后的处理状态表
[0037][0038][0039]
上述实施例示范了图2所示步骤s240的一个实现范例。无论如何,图2 所示步骤s240的实现方式不应限于上述实施例。图2所示步骤s240的实现 方式可以依照实际设计来决定。举例来说,以下将用表5至表6说明图2所 示步骤s240的另一个实现范例。在下述实施例中,除了表1所示关联性信息 表以及表2所示处理状态表,重新排序队列电路121还可以配置一个推测风 险识别号(speculate hazard id)表。举例来说,表5是推测风险识别号表的 一个具体范例。表5所示指令字段是为了帮助阅读者理解,而实际推测风险 识别号表可以没有表5所示指令字段。表5所示推测风险识别号表包括多个 推测风险识别号字段,如表5所示推测风险识别号“0”、“1”、“2”、“3”、“4”、
ꢀ“
5”和“6”。推测风险识别号字段的数量可以依照实际设计来定。
[0040]
表5:推测风险识别号表的一个具体范例
[0041][0042]
在表5所示推测风险识别号字段中,“y”表示“这个指令已经被分配/继 承这个推测风险识别号”。在不同指令发射的过程中,重新排序队列电路121 可以基于目前发射指令与先前发射指令之间的关联性,使目前发射指令选择 性地被分配/继承某个推测风险识别号,以及将目前发射指令与推测风险识别 号之间的关联性记载于推测风险识别号表。请同时参照表2与表5。表2与 表5所示范例情境为,重新排序队列识别号“0”、“1”、“14”与“15”的指 令尚未发射给执行电路122,而重新排序队列识别号“2”至“13”的指令已 经发射给执行电路122。在重新排序队列识别号“2”至“13”的指令的发射 过程中,重新排序队列电路121可以使这些指令选择性地被分配/继承某个推 测风险识别号,以及将这些指令与推测风险识别号之间的关联性记载于表5 所示推测风险识别号表。
[0043]
举例来说,如表5所示,重新排序队列电路121可以为已发射的加载指 令ld_mem(adr100)分配推测风险识别号“0”,以及为已发射的加载指令 ld_mem(adr300)分配推测风险识别号“1”。在指令inst_4(#2)的来源运算数为 加载指令ld_mem(adr100)的经加载数据的情况下,重新排序队列电路121可 以使指令inst_4(#2)继承加载指令ld_mem(adr100)的推测风险识别号“0”。在 指令inst_5(#3)与inst_10(#3)的来源运算数为加载指令ld_mem(adr300)的经加 载数据的情况下,重新排序队列电路121可以使指令inst_5(#3)与inst_10(#3) 继承加载指令ld_mem(adr300)的推测风险识别号“1”。在指令inst_13(#10)的 来源运算数为指令inst_10(#3)的结果数据(运算结果)的情况下,重新排序队 列电路121可以使指令inst_13(#10)继承指令inst_10(#3)的推测风险识别号
ꢀ“
1”。在指令inst_11(#4,5)的第一来源运算数为指令inst_4(#2)的结果数据(运 算结果)以及指令inst_11(#4,5)的第二来源运算数为指令inst_5(#3)的结果数 据(运算结果)的情况下,重新排序队列电路121可以使指令inst_11(#4,5)继 承指令inst_4(#2)与ld_mem(adr100)的推测风险识别
号“0”以及指令inst_5(#3) 与ld_mem(adr300)的推测风险识别号“1”。
[0044]
在存储指令st_mem(adr100)与st_mem(adr200)发射给执行电路122后, 处理状态表与推测风险识别号表的内容如表4与表6所示。在加载指令 ld_mem(adr100)发生加载存储冲突的情况下,重新排序队列电路121可以将 具有推测风险识别号“0”的所有指令一次性地(在一个周期内)记录在处理 状态表的重新发射字段以便重新发射。然后,重新排序队列电路121可以重 新发射/执行相冲突指令(加载指令ld_mem(adr100)与其相关指令)以解决加 载存储冲突问题。特别的是,当目前发射的存储指令ld_mem(adr100)与先前 发射的加载指令st_mem(adr100)发生加载存储冲突时,与加载指令 ld_mem(adr100)无关的指令不会被重新发射(重新执行)。经记录在处理状态 表的重新发射字段后,推测风险识别号表中的所有推测风险识别号“0”可以 被清除。此外,因为确认了加载指令ld_mem(adr300)没有发生加载存储冲突, 所以推测风险识别号表中的所有推测风险识别号“1”可以被清除,如表6所 示。
[0045]
表6:st_mem(adr100)与st_mem(adr200)发射后的推测风险识别号表
[0046][0047]
综上所述,在加载指令ld_mem(adr100)发生加载存储冲突的情况下,现 有技术将重新发射(重新执行)加载指令ld_mem(adr100)以及已经发射且尚 未保序的所有已发射指令(例如指令ld_mem(adr300)、inst_4(#2)、inst_5(#3)、 inst_6、inst_7、inst_8、inst_9、inst_10(#3)、inst_11(#4,5)、inst_12(#11)以及 inst_13(#10))。将这些与加载指令ld_mem(adr100)无关的指令ld_mem(adr300)、inst_5(#3)、inst_6、inst_7、inst_8、inst_9、inst_10(#3)以及inst_13(#10)进行重 新发射(重新执行)是浪费时间与资源的操作。在本实施例中,运算核120可 以在发生加载存储冲突时从先前发射且尚未保序的所有已发射指令中检索出 一个或多个指令作为“相冲突指令”(包括发生加载存储冲突的加载指令 ld_
mem(adr100)以及与加载指令ld_mem(adr100)相关的指令inst_4(#2)、 inst_11(#4,5)以及inst_12(#11)),然后重新发射所述“相冲突指令”以解决加 载存储冲突问题。特别的是,当目前发射的存储指令st_mem(adr100)与先前 发射的加载指令ld_mem(adr100)发生加载存储冲突时,与加载指令 ld_mem(adr100)无关的指令ld_mem(adr300)、inst_5(#3)、inst_6、inst_7、inst_8、 inst_9、inst_10(#3)以及inst_13(#10)不会被重新发射(重新执行),以保留无需 重新执行指令的计算成果。因此,所述内存依赖管理方法可以有效率地解决 加载存储冲突问题。
[0048]
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对 其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通 技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改, 或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并 不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
技术特征:
1.一种计算装置的内存依赖管理方法,其特征在于,所述内存依赖管理方法包括:检查目前发射的存储指令与先前发射的第一加载指令有无发生加载存储冲突;在目前发射的所述存储指令与先前发射的所述第一加载指令发生所述加载存储冲突的情况下,从先前发射的多个已发射指令中检索出对于所述第一加载指令有依赖性的至少一个相冲突指令,其中所述至少一个相冲突指令包括所述第一加载指令;以及重新发射所述至少一个相冲突指令。2.根据权利要求1所述的内存依赖管理方法,其特征在于,所述加载存储冲突被定义为,目前发射的所述存储指令的存取地址范围的部分或全部重迭于先前发射的所述第一加载指令的存取地址范围的部分或全部,而且所述存储指令的重新排序队列识别号早于所述第一加载指令的重新排序队列识别号。3.根据权利要求1所述的内存依赖管理方法,其特征在于,所述至少一个相冲突指令还包括使用了所述第一加载指令的经加载数据的至少一个相关指令。4.根据权利要求1所述的内存依赖管理方法,其特征在于,所述内存依赖管理方法还包括:由所述计算装置的重新排序队列电路将多个指令之间的关联性填写至关联性信息表;由所述重新排序队列电路以乱序方式发射所述多个指令给所述计算装置的执行电路;以及由所述重新排序队列电路将所述多个指令的每一个的处理状态记录在处理状态表,其中所述处理状态表包括发射字段以及重新发射字段,所述发射字段用以记录指令的发射状态,以及所述重新发射字段用以记录指令因发生所述加载存储冲突所导致的重新发射状态。5.根据权利要求4所述的内存依赖管理方法,其特征在于,所述关联性信息表包括至少一个来源运算数字段,用以记录指令的来源运算数的重新排序队列识别号。6.根据权利要求4所述的内存依赖管理方法,其特征在于,所述处理状态表还包括执行字段以及保序字段,其中所述执行字段用以记录指令的执行状态,以及所述保序字段用以记录指令的保序状态。7.根据权利要求1所述的内存依赖管理方法,其特征在于,从先前发射的所述多个已发射指令中检索出对于所述第一加载指令有依赖性的所述至少一个相冲突指令的操作包括:将发生所述加载存储冲突的所述第一加载指令记录在处理状态表的重新发射字段以便重新发射;基于发生所述加载存储冲突的所述第一加载指令的重新排序队列识别号,从关联性信息表搜寻出对于所述第一加载指令有依赖性的至少一个相关指令;以及将所述至少一个相关指令记录在所述处理状态表的所述重新发射字段以便重新发射。8.根据权利要求1所述的内存依赖管理方法,其特征在于,从先前发射的所述多个已发射指令中检索出对于所述第一加载指令有依赖性的所述至少一个相冲突指令的操作包括:为已发射的所述第一加载指令分配一个第一推测风险识别号;在所述多个已发射指令中的一个第一指令的来源运算数为所述第一加载指令的经加载数据的情况下,使所述第一指令继承所述第一加载指令的所述第一推测风险识别号;以及
在所述多个已发射指令中的一个第二指令的来源运算数为所述第一指令的结果数据的情况下,使所述第二指令继承所述第一指令的所述第一推测风险识别号。9.根据权利要求8所述的内存依赖管理方法,其特征在于,从先前发射的所述多个已发射指令中检索出对于所述第一加载指令有依赖性的所述至少一个相冲突指令的操作还包括:为已发射的第二加载指令分配一个第二推测风险识别号;在所述多个已发射指令中的一个第三指令的来源运算数为所述第二加载指令的经加载数据的情况下,使所述第三指令继承所述第二加载指令的所述第二推测风险识别号;以及在所述多个已发射指令中的一个第四指令的第一来源运算数为所述第一指令的所述结果数据以及所述第四指令的第二来源运算数为所述第三指令的结果数据的情况下,使所述第四指令继承所述第一指令的所述第一推测风险识别号以及所述第三指令的所述第二推测风险识别号。10.根据权利要求8所述的内存依赖管理方法,其特征在于,从先前发射的所述多个已发射指令中检索出对于所述第一加载指令有依赖性的所述至少一个相冲突指令的操作还包括:在所述第一加载指令发生所述加载存储冲突的情况下,将具有所述第一推测风险识别号的所有指令记录在处理状态表的重新发射字段以便重新发射。11.一种机器可读存储介质,用于存储非暂时性机器可读指令,当所述非暂时性机器可读指令由计算机执行时可以实现权利要求1-10任一项所述的内存依赖管理方法。12.一种计算装置,其特征在于,所述计算装置包括:内存;以及运算核,耦接至所述内存,其中,所述运算核检查目前发射的存储指令与先前发射的第一加载指令有无发生加载存储冲突,其中所述存储指令用以将数据存储至所述内存,以及所述第一加载指令用以从所述内存提取数据;在目前发射的所述存储指令与先前发射的所述第一加载指令发生所述加载存储冲突的情况下,所述运算核从先前发射的多个已发射指令中检索出对于所述第一加载指令有依赖性的至少一个相冲突指令,其中所述至少一个相冲突指令包括所述第一加载指令;以及所述运算核重新发射所述至少一个相冲突指令。13.根据权利要求12所述的计算装置,其特征在于,所述加载存储冲突被定义为,目前发射的所述存储指令的存取地址范围的部分或全部重迭于先前发射的所述第一加载指令的存取地址范围的部分或全部,而且所述存储指令的重新排序队列识别号早于所述第一加载指令的重新排序队列识别号。14.根据权利要求12所述的计算装置,其特征在于,所述至少一个相冲突指令还包括使用了所述第一加载指令的经加载数据的至少一个相关指令。15.根据权利要求12所述的计算装置,其特征在于,所述运算核包括:执行电路;以及重新排序队列电路,用以将多个指令之间的关联性填写至关联性信息表,其中所述重
新排序队列电路以乱序方式发射所述多个指令给所述执行电路,所述重新排序队列电路将所述多个指令的每一个的处理状态记录在处理状态表,所述处理状态表包括发射字段以及重新发射字段,所述发射字段用以记录指令的发射状态,以及所述重新发射字段用以记录指令因发生所述加载存储冲突所导致的重新发射状态。16.根据权利要求15所述的计算装置,其特征在于,所述关联性信息表包括至少一个来源运算数字段,用以记录指令的来源运算数的重新排序队列识别号。17.根据权利要求15所述的计算装置,其特征在于,所述处理状态表还包括执行字段以及保序字段,其中所述执行字段用以记录指令的执行状态,以及所述保序字段用以记录指令的保序状态。18.根据权利要求12所述的计算装置,其特征在于,所述重新排序队列电路将发生所述加载存储冲突的所述第一加载指令记录在处理状态表的重新发射字段以便重新发射;基于发生所述加载存储冲突的所述第一加载指令的重新排序队列识别号,所述重新排序队列电路从关联性信息表搜寻出对于所述第一加载指令有依赖性的至少一个相关指令;以及所述重新排序队列电路将所述至少一个相关指令记录在所述处理状态表的所述重新发射字段以便重新发射。19.根据权利要求12所述的计算装置,其特征在于,所述重新排序队列电路为已发射的所述第一加载指令分配一个第一推测风险识别号;在所述多个已发射指令中的一个第一指令的来源运算数为所述第一加载指令的经加载数据的情况下,所述重新排序队列电路使所述第一指令继承所述第一加载指令的所述第一推测风险识别号;以及在所述多个已发射指令中的一个第二指令的来源运算数为所述第一指令的结果数据的情况下,所述重新排序队列电路使所述第二指令继承所述第一指令的所述第一推测风险识别号。20.根据权利要求19所述的计算装置,其特征在于,所述重新排序队列电路为已发射的第二加载指令分配一个第二推测风险识别号;在所述多个已发射指令中的一个第三指令的来源运算数为所述第二加载指令的经加载数据的情况下,所述重新排序队列电路使所述第三指令继承所述第二加载指令的所述第二推测风险识别号;以及在所述多个已发射指令中的一个第四指令的第一来源运算数为所述第一指令的所述结果数据以及所述第四指令的第二来源运算数为所述第三指令的结果数据的情况下,所述重新排序队列电路使所述第四指令继承所述第一指令的所述第一推测风险识别号以及所述第三指令的所述第二推测风险识别号。21.根据权利要求19所述的计算装置,其特征在于,在所述第一加载指令发生所述加载存储冲突的情况下,所述重新排序队列电路将具有所述第一推测风险识别号的所有指令记录在处理状态表的重新发射字段以便重新发射。
技术总结
本发明提供一种计算装置及其内存依赖管理(memory dependencymanagement)方法和机器可读存储介质,以解决加载存储冲突(或称加载存储风险,load-store hazards)问题。所述内存依赖管理方法包括:检查目前发射(issue)的存储指令(store instruction)与先前发射的第一加载指令(loadinstruction)有无发生加载存储冲突;在目前发射的存储指令与先前发射的第一加载指令发生加载存储冲突的情况下,从先前发射的多个已发射指令中检索出所有由于乱序加载存储冲突而应为无效的加载指令,以及对于这些加载指令有依赖性的乱序发射的指令,所引发后续乱序指令,予以判为无效。如果这判为无效的指令没有因为其他原因必须清除(比如由于错误分支预测等原因),必须重新发射。必须重新发射。必须重新发射。
技术研发人员:
ꢀ(74)专利代理机构
受保护的技术使用者:
上海壁仞智能科技有限公司
技术研发日:
2022.10.10
技术公布日:
2022/12/30