CN112433765B - 一种数据存储方法、装置、处理器及电子设备 - Google Patents
一种数据存储方法、装置、处理器及电子设备 Download PDFInfo
- Publication number
- CN112433765B CN112433765B CN202011367010.0A CN202011367010A CN112433765B CN 112433765 B CN112433765 B CN 112433765B CN 202011367010 A CN202011367010 A CN 202011367010A CN 112433765 B CN112433765 B CN 112433765B
- Authority
- CN
- China
- Prior art keywords
- branch
- written
- fragments
- segment
- executed
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000013500 data storage Methods 0.000 title claims abstract description 20
- 239000012634 fragment Substances 0.000 claims abstract description 201
- 238000012544 monitoring process Methods 0.000 claims abstract description 15
- 230000015654 memory Effects 0.000 claims description 25
- 230000008569 process Effects 0.000 claims description 22
- 238000004891 communication Methods 0.000 claims description 6
- 125000004122 cyclic group Chemical group 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000001351 cycling effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002401 inhibitory effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
- G06F9/381—Loop buffering
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种数据存储方法、装置、处理器及电子设备。方法包括:接收待写入的分支片段,待写入的分支片段包括多条指令;按照指令的执行顺序将多条指令进行写操作,根据指令缓存的状态确定待写入的分支片段是否为大分支片段;若为大分支片段,则监测应用程序中执行的小分支片段的个数;根据记录的小分支片段的个数确定待写入的分支片段是否为循环执行的分支片段,若是则禁止其他分支片段写入指令缓存。本申请在判断大分支片段为循环执行的分支片段后,禁止其他分支片段写入,避免其他分支片段覆盖循环执行的分支片段,使得处理器前端在取循环执行的分支片段时可以从指令缓存中提取,提高了取指效率。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种数据存储方法、装置、处理器及电子设备。
背景技术
为了提高处理器的运行速度,处理器前端应当提供较多的指令到后端执行。处理器前端性能可以从取指令的带宽和取指令的延时两方面进行改进。Moksha中采用了UopCache(微指令缓存)来缓存最近一段时间内经常使用的指令。在取指令的时候,若发现一段时间Uop Cache一直命中,处理器就会从IC Decode模式切换到Uop Cache模式。由UopCache直接发送指令到后端的执行单元,不需要经过IC模块和Decode模块。相比于ICDecode模式,Uop Cache模式有更大的带宽和更小的延时。
但是Uop Cache的容量有限,当应用程序的核心代码中最大的分支片段的大小已经超过了Uop Cache的容量大小时,大分支片段中只能有一部分指令写入到Uop Cache中。当应用程序在执行过程中,从大分支片段跳转到其他的新的分支片段后,Uop Cache中便会缓存新的分支片段,从而新的分支片段会覆盖掉大分支片段。若应用程序中大分支片段和其他的分支片段循环执行,那么Uop Cache中将会出现大分支片段重复被其他分支片段替换的情况,从而导致Uop Cache不能命中,处理器只能一直运行在IC Decode模式,降低了处理器的处理效率。
发明内容
本申请实施例的目的在于提供一种数据存储方法、装置、处理器及电子设备,用以解决现有技术中,Uop Cache中的指令反复被替换的问题。
第一方面,本申请实施例提供一种数据存储方法,包括:接收待写入的分支片段,所述待写入的分支片段包括多条指令;按照指令的执行顺序对所述多条指令进行写操作,并根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;若为大分支片段,则监测应用程序中执行的小分支片段的个数;根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,若是,则禁止将其他分支片段写入所述指令缓存。
本申请实施例通过在判断写入指令缓存中的大分支片段为循环执行的分支片段后,禁止其他分支片段写入,从而避免了其他分支片段覆盖循环执行的分支片段,使得处理器前端在取循环执行的分支片段时,可以从指令缓存中提取,提高了取指效率。
进一步地,所述根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段,包括:若指令缓存被写满且所述待写入的分支片段中有部分指令未写入指令缓存中,则确定所述待写入的分支片段为大分支片段。
本申请实施例通过判断分支片段将指令缓存写满,且分支片段中仍然有部分指令未写入指令缓存中的情况下,确定分支片段为大分支片段,从而能够提高指令缓存的利用率。
进一步地,所述根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,包括:
若在所述应用程序连续执行预设次数过程中,每次执行所记录的所述小分支片段的个数均相等,则确定所述待写入的分支片段为循环执行的分支片段:否则,则确定所述待写入的分支片段不为循环执行的分支片段。
进一步地,所述监测应用程序中执行的小分支片段的个数,包括:
存储所述待写入的分支片段的第一首地址;
根据所述第一首地址统计所述应用程序中在所述待写入的分支片段之后执行的小分支片段的个数。
进一步地,所述根据所述第一首地址统计所述应用程序中执行的小分支片段的个数,包括:获取所述应用程序当前执行的分支片段对应的第二首地址,并将所述第一首地址和所述第二首地址进行比较;若所述第一首地址与所述第二首地址不同,则计数加1,获得小分支片段的个数的当前计数值;若当前计数值小于预设阈值,则继续获取下一当前执行的分支片段对应的第二首地址,直至当前执行的分支片段对应的第二首地址与所述第一首地址相同为止,获取对应的最终计数值,将所述最终计数值作为所述应用程序在执行过程中小分支片段的个数。
本申请实施例通过循环统计应用程序在执行过程中经过的分支数量来判断大分支片段是否为循环执行的分支片段,从而确定是否将该大分支片段写入指令缓存,并禁止其他分支片段写入,避免了其他分支片段反复替换大分支片段的情况。
进一步地,所述方法,还包括:
若所述小分支片段的个数不小于预设阈值,则确定所述待写入的分支片段不为循环执行的分支片段。
本申请实施例中,在统计应用程序在执行过程中,从大分支片段到下一次执行大分支片段中所执行的其他分支片段数大于预设阈值时,则确定大分支片段不为循环执行的分支片段,从而能够更加有效的确定循环执行的分支片段。
进一步地,所述方法还包括:接收当前执行的分支片段对应的第三首地址,若所述第三首地址与所述待写入的分支片段的第一首地址相同,则将存储的所述待写入的分支片段取出,并向执行单元发送。
本申请实施例中在取指令时,所取的为存储在指令缓存中的分支片段,则从指令缓存中将分支片段取出并向执行单元发送,提高了取指令的效率。
进一步地,所述方法还包括:若监测所述应用程序在执行完所述循环执行的分支片段后,执行的分支片段个数大于所述小分支片段的个数,且未再次执行所述循环执行的分支片段,则清除已存储的第一首地址,并允许其他分支片段写入所述指令缓存。
本申请实施例通过判断是否跳出当前循环,以便能够及时更新指令缓存中的分支片段。
进一步地,所述禁止其他分支片段写入所述指令缓存,包括:丢弃其他分支片段的写入请求。
第二方面,本申请实施例提供一种数据存储装置,包括:接收模块,用于接收待写入的分支片段,所述待写入的分支片段包括多条指令;写入模块,用于按照指令的执行顺序对所述多条指令进行写操作,并根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;监测模块,用于若为大分支片段,则监测应用程序中执行的小分支片段的个数;禁止覆盖模块,用于根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段;若是,则禁止将其他分支片段写入所述指令缓存。
第三方面,本申请实施例提供一种处理器,包括第二方面所述的数据存储装置。
第四方面,本申请实施例提供一种电子设备,包括:处理器、存储器和总线,其中,所述处理器和所述存储器通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行第一方面所述的方法。
第五方面,本申请实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令被计算机运行时,使所述计算机执行第一方面所述的方法。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种数据存储方法流程示意图;
图2为本申请实施例提供的判断循环执行的分支片段的方法流程示意图;
图3为本申请实施例提供的一种应用程序执行流程示意图;
图4为本申请实施例提供的数据存储装置结构示意图;
图5为本申请实施例提供的电子设备实体结构示意图。
具体实施方式
为了便于理解本申请的技术方案,下面先介绍本申请中涉及到的相关概念:
Uop Cache与cache memory类似,Uop Cache中存储的是Decode译码后的指令。当CPU需要取指令时,如果该指令已经存放在Uop Cache中,可以由Uop Cache直接提供,不需要重新译码。Uop Cache通常由相联存储器实现。相联存储器的每一个存储块都具有额外的存储信息,称为标签(tag)。当访问相联存储器时,将地址和每一个标签同时进行比较,从而对标签相同的存储块进行访问。另外,Uop Cache分为全相联Uop Cache、直接映像UopCache和组相联Uop Cache。
处理器中处理指令的两种模式,即IC Decode模式和Uop Cache模式。
IC Decode模式为处理器将前端的指令发送给后端执行模块的常用模式,该模式主要由两个模块完成,即Instruction Cache(IC)模块和Decode模块,IC模块用于存储二进制的分支片段,Decode模块从IC模块中读取二进制的分支片段,并对读取的分支片段进行逐条指令的译码,获取后端执行模块可识别的指令。IC Decode模式中在将译码后的指令向后端执行模块发送的同时,还会向Uop Cache中发送。
Uop Cache模式,Uop Cache中预先存储有译码后的指令。当有分支片段需要执行时,先判断是否在Uop Cache中,如果存在,则在该模式下可以直接将译码后的指令发送给后端执行模块,并且可以一次取多条指令发送给后端执行模块。
由上可知,Uop Cache模式能够更快的将指令发送给后端执行模块,不需要逐个字节进行译码。因此,为了能够提高处理器前端取指令的效率,应该尽量从Uop Cache中取指令。
在应用程序中,有的分支片段所包含的指令较多,有的分支片段包含的指令较少。由于Uop Cache的容量有限,应当说明的是,对于一个应用程序来说,若待写入的分支片段被认为是大分支片段,则将除待写入的分支片段以外的分支片段作为小分支片段。
应用程序如下所示:
对于上述应用程序,while循环里包含了大量的顺序执行的分支片段。当程序初次执行到while时会采用IC Decode模式,同时Uop Cache缓存从#1到#3的指令。假设这时UopCache正好存满,会停止缓存指令#4和#5。程序如果跳转到新的分支片段#8的位置。UopCache会开始重新缓存#8和#9.替换原来的#1-#3。
当程序再次循环回来执行到#1时,会尝试进入Uop Cache模式,但是由于#8.和#9.替换了#1-#3的部分指令,程序一定会退回到IC Decode模式,重新再次缓存#1-#3中缺失的部分。Uop Cache再次缓存满,停止缓存#4,#5。同样程序跳转到#8,#9时,再次发生#1-#3的替换。程序再次回到#1时,Uop Cache一定会再次缺失,退回到IC Decode模式再次缓存指令……。
如此循环下去,整个程序都在IC Decode模式运行,同时缓存指令到Uop Cache。这样Uop Cache既没有带来性能的提升,还浪费了更多的能量在Uop Cache缓存指令上。
为了解决上述大分支片段反复被替换的问题,本申请实施例提供一种数据存储方法,即对判断写入指令缓存的分支片段是否为大分支片段,并且该大分支片段是否为循环执行的分支片段,在为是时,停止缓存其他分支片段,从而防止其他分支片段替换已写入指令缓存的大分支片段。
下面将结合本申请实施例中的附图,对该数据存储方法进行描述。如图1所示,该方法应用于指令缓存,例如Uop Cache中,包括:
步骤101:接收待写入的分支片段,所述待写入的分支片段包括多条指令。
在具体的实施过程中,处理器在将应用程序中的分支片段发送给后端执行单元时,会利用将要发送给后端执行单元的分支片段的地址判断对应的分支片段是否存储在Uop Cache,如果没有,则在IC Decode模式下将分支片段送往后端执行单元,并且,将还将发往后端执行单元的分支片段写入Uop Cache中,将Uop Cache接收到的分支片段为待写入分支片段。可以理解的是,待写入分支片段包括多条指令。
步骤102:按照指令的执行顺序对所述多条指令进行写操作,根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段。
在具体的实施过程中,Uop Cache在接收到待写入分支指令后,从分支指令的首地址开始对该待写入分支片段对应的指令进行写操作,以写入Uop Cache中。可以理解的是,Uop Cache在初始状态时为空的,待写入分支片段根据Uop Cache的写入规则选择一个或多个空的way将待写入分支片段进行写入。如果Uop Cache中已经被写满,则根据写入规则从中选择一个或多个way,将待写入分支片段替换way中已存储的分支片段。写入规则为预先设定的规则,具体可以根据实际情况设定,例如可以是最近最少使用LRU算法,本申请实施例对此不作具体限定。
在写入的过程中,可以根据Uop Cache的状态确定写入的分支片段是否为大分支片段。具体可以是,如果待写入分支片段全部写入Uop Cache中,并且Uop Cache中还包括空的way或者其他分支片段,则说明该待写入分支片段不是大分支片段。如果当待写入分支片段全部写入Uop Cache,或部分写入Uop Cache中,Uop Cache中已被写满,并且该Uop Cache中全部都是待写入分支片段,则说明待写入分支片段为大分支片段。
步骤103:若为大分支片段,则监测应用程序中执行的小分支片段的个数;
在具体的实施过程中,当Uop Cache确定待写入分支片段为大分支片段后,则根据应用程序的执行情况,监测应用程序中执行的小分支片段的个数,从而确定大分支片段是否为循环执行的分支片段。可以理解的是,若写入Uop Cache中的大分支片段不在循环中,则说明大分支片段可能只执行这一次,那么将其写入Uop Cache中也没有意义,反而会占用Uop Cache的容量。若该大分支片段在循环中,也就是会循环被执行,那么将其写入UopCache中后,当下次该大分支片段被执行时,可以从Uop Cache中获取。因此需要对大分支片段进行是否为循环执行的分支片段。
步骤104:根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,若是,则禁止将其他分支片段写入所述指令缓存。
在判断大分支片段为循环执行的分支片段后,则禁止新的其他分支片段写入,具体可以是,若Uop Cache接收到其他分支片段写入的请求后,将该请求丢弃处理。
应当说明的是,本申请判断待写入分支片段为大分支片段的目的是能够更好的利用Uop Cache。这是由于大分支片段能够充分占用Uop Cache的容量,即将Uop Cache中每个way都占满,而小分支片段由于大小不同,会导致Uop Cache中有的way不满的情况,从而浪费了Uop Cache的容量。
本申请实施例通过在判断写入指令缓存中的大分支片段为循环执行的分支片段后,禁止其他分支片段写入,从而避免了其他分支片段覆盖循环执行的分支片段,使得处理器前端在取循环执行的分支片段时,可以从指令缓存中提取,提高了取指效率。
在上述实施例的基础上,所述根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,包括:
若在所述应用程序连续执行预设次数过程中,每次执行所记录的所述小分支片段的个数均相等,则确定所述待写入的分支片段为循环执行的分支片段:否则,则确定所述待写入的分支片段不为循环执行的分支片段。
在具体的实施过程中,统计待写入的分支片段所属的应用程序每次被执行的过程中,执行的小分支片段的个数,如果连续预设次数记录的小分支片段的个数均相等,则说明该应用程序是循环执行的,进而待写入的分支片段也为循环执行的分支片段。如果连续预设次数记录的小分支片段个数不完全相等,则说明该应用程序中可能包含多个执行的分支,进而确定待写入的分支片段不是循环执行的分支片段。
在上述实施例的基础上,具体根据统计的小分支片段的个数判断待写入分支片段是否为训练执行的分支片段的方法如下:
存储所述待写入的分支片段的第一首地址;
根据所述第一首地址统计所述应用程序中执行的小分支片段的个数。
其中,所述根据所述第一首地址统计所述应用程序中执行的小分支片段的个数,包括:
获取所述应用程序当前执行的分支片段对应的第二首地址,并将所述第一首地址和所述第二首地址进行比较;
若所述第一首地址与所述第二首地址不同,则计数加1,获得小分支片段的个数的当前计数值;
若当前计数值小于预设阈值,则继续获取下一当前执行的分支片段对应的第二首地址,直至当前执行的分支片段对应的第二首地址与所述第一首地址相同为止,获取对应的最终计数值,将所述最终计数值作为所述应用程序在执行过程中小分支片段的个数。
在具体的实施过程中,本申请实施例通过如下步骤判断大分支片段是否为循环执行的分支片段,如图2所示:
步骤201:记录待写入的分支片段的首地址;Uop Cache在将待写入分支片段写入时,若Uop Cache被写满,则停止写入待写入分支片段的剩余指令,并记录待写入分支片段对应的第一首地址lastBrTgtphyAd。图3为本申请实施例提供的一种应用程序执行流程示意图,如图3所示,当指令运行到#m+1Branch region的一部分指令时,Uop Cache被写满,记录#m+1Branch region对应的第一首地址。
步骤202:获取所述应用程序当前执行的分支片段对应的第二首地址,并将所述第一首地址和所述第二首地址进行比较;由于应用程序不断的被执行,因此在步骤201之后执行的步骤202中的当前执行的分支片段为待写入分支片段之后被执行的分支片段;步骤204之后执行的步骤202中的当前执行的分支片段为当前实际执行中的分支片段。例如:当前执行的分支片段为#m+2Branch region,那么第二首地址则为#m+2Branch region对应的首地址。
步骤203:判断第一首地址与第二首地址是否相同,若所述第一首地址与所述第二首地址不同,则说明当前执行的分支片段不是待写入分支片段,也就是还未完成一个循环,则计数加1,并执行步骤204;如果第一首地址和第二首地址相同,则说明完成了一次循环,执行步骤205;
步骤204:判断计数器是否大于预设阈值;若不大于则执行步骤202,获取下一个被执行的分支片段,并进行首地址的比较;否则,则说明待写入分支片段没有在一个循环中,执行步骤206。
步骤205:记录计数器最终计数值,并将计数器清零;继续执行步骤202-步骤205。循环执行步骤202-步骤205,并每次将统计的计数器最终计数值numBrTargetFromSurpassKill与上一次计数器的最终计数值numBrTargetFromSurpassKill进行比较,判断是否一致,若连续预设次数的计数器最终计数值都一致,则说明该应用程序被循环执行了预设次数,说明该应用程序中的待写入分支片段很有可能再次被循环执行,因此确定待写入分支片段为循环执行的分支片段。如果不一致,则用新的计数器最终计数值替换之前记录的计数器最终计数值,并再次执行步骤202-步骤205,如果循环了指定次数,仍然没有连续预设次数的计数器最终计数值都一致,则执行步骤206。可以理解的是,指定次数大于预设次数。最终计数值为应用程序在执行过程中小分支片段的个数。
步骤206:删除记录的第一首地址;如果计数器的数值大于预设阈值,仍然没有回到待写入分支片段,则确定该应用程序不是循环执行的应用程序,则停止计数,认定待写入的分支片段不是循环执行的分支片段。
本申请实施例通过循环统计应用程序在执行过程中经过的分支数量来判断大分支片段是否为循环执行的分支片段,从而确定是否将该大分支片段写入指令缓存,并禁止其他分支片段写入,避免了其他分支片段反复替换大分支片段的情况。
在上述实施例的基础上,所述方法还包括:
接收当前执行的分支片段对应的第三首地址,若所述第三首地址与所述待写入的分支片段的第一首地址相同,则将存储的所述待写入的分支片段取出,并向执行单元发送。
在具体的实施过程中,在将循环执行的大分支片段写入Uop Cache中后,应用程序每执行一个分支片段,Uop Cache便会将当前执行的分支片段对应的第三首地址与存储的第一首地址进行比较,判断当前执行的分支片段是否为循环执行的分支片段,如果第三首地址与第一首地址相同,则说明应用程序执行循环到了大分支片段,进入Uop Cache模式,即从Uop Cache中读取大分支片段对应的指令,并向执行单元发送。可以理解的是,UopCache中可能只存储的大分支片段的部分指令,当将Uop Cache中的指令全部取出后,会退出Uop Cache模式,并进入IC Decode模式,这时仍然不再缓存接下来的其他分支片段。
可以理解的是,在numBrTargetFromSurpassKill个分支片段后如果还是回到第一首地址,则会再次进入到Uop Cache模式,从而保证了大分支片段的发部分指令都是由UopCache提供指令到执行单元,不需要经过IC Decode模式,达到充分利用Uop Cache加速程序执行的目的。
在上述实施例的基础上,所述方法还包括:
若监测所述应用程序在执行完所述循环执行的分支片段后,执行的分支片段个数大于所述小分支片段的个数,且未再次执行所述循环执行的分支片段,则清除已存储的第一首地址,并允许其他分支片段写入所述指令缓存。
在具体的实施过程中,当从Uop Cache模式切换到IC Decode模式之后,如果经过最终计数值numBrTargetFromSurpassKill个分支片段后没有回到第一首地址对应的大分支片段,则认为应用程序已经跳转出了大分支片段所在的循环,清除已存储的第一首地址,并允许其他分支片段写入所述指令缓存,继续探测其他的大分支片段。
本申请实施例通过判断是否跳出当前循环,以便能够及时更新指令缓存中的分支片段。
图4为本申请实施例提供的数据存储装置结构示意图,该装置可以是电子设备上的模块、程序段或代码。应理解,该装置与上述图1方法实施例对应,能够执行图1方法实施例涉及的各个步骤,该装置具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。该装置包括:接收模块401、写入模块402和禁止覆盖模块404,其中:
接收模块401用于接收待写入的分支片段,所述待写入的分支片段包括多条指令;写入模块402用于按照指令的执行顺序对所述多条指令进行写操作,根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;监测模块403用于若为大分支片段,则监测应用程序中执行的小分支片段的个数;禁止覆盖模块404用于根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,若是,则禁止将其他分支片段写入所述指令缓存。
在上述实施例的基础上,写入模块402具体用于:
若指令缓存被写满且所述待写入的分支片段中有部分指令未写入指令缓存中,则确定所述待写入的分支片段为大分支片段。
在上述实施例的基础上,禁止覆盖模块404具体用于:
若在所述应用程序连续执行预设次数过程中,每次执行所记录的所述小分支片段的个数均相等,则确定所述待写入的分支片段为循环执行的分支片段:否则,则确定所述待写入的分支片段不为循环执行的分支片段。
在上述实施例的基础上,监测模块403具体用于:
存储所述待写入的分支片段的第一首地址;
统计所述应用程序中执行的小分支片段的个数。
在上述实施例的基础上,监测模块403具体用于:
获取所述应用程序当前执行的分支片段对应的第二首地址,并将所述第一首地址和所述第二首地址进行比较;
若所述第一首地址与所述第二首地址不同,则计数加1,获得小分支片段的个数的当前计数值;
若当前计数值小于预设阈值,则继续获取下一当前执行的分支片段对应的第二首地址,直至当前执行的分支片段对应的第二首地址与所述第一首地址相同为止,获取对应的最终计数值,将所述最终计数值作为所述应用程序在执行过程中小分支片段的个数。
在上述实施例的基础上,该装置还包括循环分支判断模块,用于:
若所述小分支片段的个数不小于预设阈值,则确定所述待写入的分支片段不为循环执行的分支片段。
在上述实施例的基础上,该装置还包括取指模块,用于:
接收当前执行的分支片段对应的第三首地址,若所述第三首地址与所述待写入的分支片段的第一首地址相同,则将存储的所述待写入的分支片段取出,并向执行单元发送。
在上述实施例的基础上,该装置还包括地址清除模块,用于:
若监测所述应用程序在执行完所述循环执行的分支片段后,执行的分支片段个数大于所述小分支片段的个数,且未再次执行所述循环执行的分支片段,则清除已存储的第一首地址,并允许其他分支片段写入所述指令缓存。
在上述实施例的基础上,禁止覆盖模块404具体用于:
丢弃其他分支片段的写入请求。
本申请实施例提供一种处理器,该处理器包括上述各实施例提供的数据存储装置。
图5为本申请实施例提供的电子设备实体结构示意图,如图5所示,所述电子设备,包括:处理器(processor)501、存储器(memory)502和总线503;
其中,所述处理器501和存储器502通过所述总线503完成相互间的通信;
所述处理器501用于调用所述存储器502中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:接收待写入的分支片段,所述待写入的分支片段包括多条指令;按照指令的执行顺序对所述多条指令进行写操作,并根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;若为大分支片段,则监测应用程序中执行的小分支片段的个数,根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,若是则禁止其他分支片段写入所述指令缓存。
处理器501可以是一种集成电路芯片,具有信号处理能力。上述处理器501可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。其可以实现或者执行本申请实施例中公开的各种方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器502可以包括但不限于随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)等。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:接收待写入的分支片段,所述待写入的分支片段包括多条指令;按照指令的执行顺序对所述多条指令进行写操作,并根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;若为大分支片段,则监测应用程序中执行的小分支片段的个数;根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,若是则禁止其他分支片段写入所述指令缓存。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:接收待写入的分支片段,所述待写入的分支片段包括多条指令;按照指令的执行顺序对所述多条指令进行写操作,并根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;若为大分支片段,则监测应用程序中执行的小分支片段的个数;根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,若是则禁止其他分支片段写入所述指令缓存。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (11)
1.一种数据存储方法,其特征在于,应用于指令缓存,包括:
接收待写入的分支片段,所述待写入的分支片段包括多条指令;
按照指令的执行顺序对所述多条指令进行写操作,并根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;
若为大分支片段,则监测应用程序中执行的小分支片段的个数;
根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段;
若是,则禁止将其他分支片段写入所述指令缓存;
所述根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段,包括:
若指令缓存被写满且所述待写入的分支片段全部写入或部分写入指令缓存中,且所述指令缓存中全部是所述待写入分支片段,则确定所述待写入的分支片段为大分支片段。
2.根据权利要求1所述的方法,其特征在于,所述根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段,包括:
若在所述应用程序连续执行预设次数过程中,每次执行所记录的所述小分支片段的个数均相等,则确定所述待写入的分支片段为循环执行的分支片段;否则,则确定所述待写入的分支片段不为循环执行的分支片段。
3.根据权利要求1或2述的方法,其特征在于,所述监测应用程序中执行的小分支片段的个数,包括:
存储所述待写入的分支片段的第一首地址;
根据所述第一首地址统计所述应用程序中执行的小分支片段的个数。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一首地址统计所述应用程序中执行的小分支片段的个数,包括:
获取所述应用程序当前执行的分支片段对应的第二首地址,并将所述第一首地址和所述第二首地址进行比较;
若所述第一首地址与所述第二首地址不同,则计数加1,获得小分支片段的个数的当前计数值;
若所述当前计数值小于预设阈值,则继续获取下一当前执行的分支片段对应的第二首地址,直至当前执行的分支片段对应的第二首地址与所述第一首地址相同为止,获取对应的最终计数值,将所述最终计数值作为所述应用程序在执行过程中小分支片段的个数。
5.根据权利要求4所述的方法,其特征在于,所述方法,还包括:
若所述小分支片段的个数不小于预设阈值,则确定所述待写入的分支片段不为循环执行的分支片段。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收当前执行的分支片段对应的第三首地址,若所述第三首地址与所述待写入的分支片段的第一首地址相同,则将存储的所述待写入的分支片段取出,并向执行单元发送。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若监测所述应用程序在执行完所述循环执行的分支片段后,执行的分支片段个数大于所述小分支片段的个数,且未再次执行所述循环执行的分支片段,则清除已存储的第一首地址,并允许将其他分支片段写入所述指令缓存。
8.一种数据存储装置,其特征在于,包括:
接收模块,用于接收待写入的分支片段,所述待写入的分支片段包括多条指令;
写入模块,用于按照指令的执行顺序对所述多条指令进行写操作,并根据指令缓存的状态确定所述待写入的分支片段是否为大分支片段;
监测模块,用于若为大分支片段,则监测应用程序中执行的小分支片段的个数;
禁止覆盖模块,用于根据记录的所述小分支片段的个数确定所述待写入的分支片段是否为循环执行的分支片段;若是,则禁止将其他分支片段写入所述指令缓存;
所述写入模块,具体用于若指令缓存被写满且所述待写入的分支片段全部写入或部分写入指令缓存中,且所述指令缓存中全部是所述待写入分支片段,则确定所述待写入的分支片段为大分支片段。
9.一种处理器,其特征在于,包括如权利要求8所述的数据存储装置。
10.一种电子设备,其特征在于,包括:处理器、存储器和总线,其中,
所述处理器和所述存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1-7任一项所述的方法。
11.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令被计算机运行时,使所述计算机执行如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011367010.0A CN112433765B (zh) | 2020-11-26 | 2020-11-26 | 一种数据存储方法、装置、处理器及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011367010.0A CN112433765B (zh) | 2020-11-26 | 2020-11-26 | 一种数据存储方法、装置、处理器及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112433765A CN112433765A (zh) | 2021-03-02 |
CN112433765B true CN112433765B (zh) | 2023-09-08 |
Family
ID=74698046
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011367010.0A Active CN112433765B (zh) | 2020-11-26 | 2020-11-26 | 一种数据存储方法、装置、处理器及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112433765B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103176914A (zh) * | 2011-11-18 | 2013-06-26 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
CN103838550A (zh) * | 2012-11-26 | 2014-06-04 | 上海芯豪微电子有限公司 | 一种分支处理系统和方法 |
CN105045562A (zh) * | 2014-04-25 | 2015-11-11 | 美国博通公司 | 利用生成重命名的计算机信息处理器 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7603604B2 (en) * | 2007-04-09 | 2009-10-13 | Advantest Corporation | Test apparatus and electronic device |
US10657057B2 (en) * | 2018-04-04 | 2020-05-19 | Nxp B.V. | Secure speculative instruction execution in a data processing system |
-
2020
- 2020-11-26 CN CN202011367010.0A patent/CN112433765B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103176914A (zh) * | 2011-11-18 | 2013-06-26 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
CN103838550A (zh) * | 2012-11-26 | 2014-06-04 | 上海芯豪微电子有限公司 | 一种分支处理系统和方法 |
CN105045562A (zh) * | 2014-04-25 | 2015-11-11 | 美国博通公司 | 利用生成重命名的计算机信息处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN112433765A (zh) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9690591B2 (en) | System and method for fusing instructions queued during a time window defined by a delay counter | |
US8880807B2 (en) | Bounding box prefetcher | |
US6810466B2 (en) | Microprocessor and method for performing selective prefetch based on bus activity level | |
US7260684B2 (en) | Trace cache filtering | |
US8645631B2 (en) | Combined L2 cache and L1D cache prefetcher | |
KR100962058B1 (ko) | 스레드 식별자에 기초한 캐시 축출을 갖춘 멀티스레드 캐시의 방법 및 장치 | |
US8719510B2 (en) | Bounding box prefetcher with reduced warm-up penalty on memory block crossings | |
US7987322B2 (en) | Snoop request management in a data processing system | |
US11263139B2 (en) | Hardware accelerators and access methods thereof | |
US8060701B2 (en) | Apparatus and methods for low-complexity instruction prefetch system | |
US9367466B2 (en) | Conditional prefetching | |
US11249762B2 (en) | Apparatus and method for handling incorrect branch direction predictions | |
US8719555B2 (en) | Method for overcoming livelock in a multi-threaded system | |
CN112433765B (zh) | 一种数据存储方法、装置、处理器及电子设备 | |
CN112612728B (zh) | 缓存管理方法及装置、设备 | |
US7062640B2 (en) | Instruction segment filtering scheme | |
CN110737475B (zh) | 一种指令缓存装填过滤装置 | |
CN112379929B (zh) | 一种指令替换方法、装置、处理器、电子设备及存储介质 | |
US20200133863A1 (en) | Correlated addresses and prefetching | |
CN116383100A (zh) | 基于合并位向量访存模式的缓存数据预取方法和系统 | |
US7062607B2 (en) | Filtering basic instruction segments in a processor front-end for power conservation | |
CN114063923A (zh) | 数据读取方法、装置、处理器及电子设备 | |
TW201216060A (en) | Processor independent loop entry cache | |
US20070233961A1 (en) | Multi-portioned instruction memory | |
CN115658150B (zh) | 一种指令分配方法、处理器、芯片及电子设备 |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Industrial incubation-3-8, North 2-204, No. 18, Haitai West Road, Huayuan Industrial Zone, Binhai New Area, Tianjin 300450 Applicant after: Haiguang Information Technology Co.,Ltd. Address before: 100082 industrial incubation-3-8, North 2-204, 18 Haitai West Road, Huayuan Industrial Zone, Haidian District, Beijing Applicant before: Haiguang Information Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |