CN107844380A - 一种支持指令预取的多核缓存wcet分析方法 - Google Patents
一种支持指令预取的多核缓存wcet分析方法 Download PDFInfo
- Publication number
- CN107844380A CN107844380A CN201710996826.1A CN201710996826A CN107844380A CN 107844380 A CN107844380 A CN 107844380A CN 201710996826 A CN201710996826 A CN 201710996826A CN 107844380 A CN107844380 A CN 107844380A
- Authority
- CN
- China
- Prior art keywords
- cache
- instruction
- state
- analysis
- abstract
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/008—Reliability or availability analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/885—Monitoring specific for caches
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Probability & Statistics with Applications (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
一种支持指令预取的多核缓存WCET分析方法,属于嵌入式实时系统应用技术领域。本发明在基于共享缓存的多核架构基础上,针对指令预取中的WCET分析问题,通过对指令预取语义进行扩展,引入缓存提前访问分类,来分析出指令预取对私有L1指令缓存和共享L2指令缓存状态的影响。以提高应用程序WCET分析的精确度。本发明可广泛应用于实时系统中任务的可调度分析,以获得精确,紧凑的WCET估值。
Description
技术领域
本发明涉及一种任务最坏情况执行时间(Worst Case Execution Time,WCET)分析方法,尤其是一种支持指令预取的多核缓存WCET分析方法,属于嵌入式实时系统应用领域。
背景技术
随着半导体技术的快速发展,多核处理器开始广泛被应用于无人机、高铁、汽车、工厂自动化等嵌入式实时控制系统。与传统的通用计算机系统不同,在这类嵌入式实时系统中,任务的执行有着严格的时间约束,系统中所有任务必须在规定的截止期前完成,否则可能会引发严重甚至灾难性的后果。因此,在设计这类实时系统时,需要提前获知系统中任务WCET估值,获得任务最差情况执行时间的过程称为WCET分析,WCET分析不仅是实时系统时间特性验证的核心任务,也是实时系统可调度分析的基础。
目前,在多核处理器中,为了提升应用程序的访存性能,通常采用指令预取来隐藏存储器访问延迟。该技术的基本思想是:提前将程序将来需要但目前不在缓存中的指令预取到缓存中,当处理器核需要访问此指令时,由于该指令已经被预取到缓存中,从而避免了处理器核在访问缓存时的失效行为,同时处理器核可以与低层存储系统中取指令的时间重叠,减少了流水线停顿对程序执行时间的影响,提高了系统的性能。然而,预取虽然可以减少程序在缓存中的缺失数,但是也会改变指令在私有L1缓存和共享L2缓存中的命中\缺失状态,从而导致任务的WCET分析变得复杂。现有研究在分析指令预取对任务执行时间的影响时,假设预取总是影响指令在所有缓存层中的命中缺失状态,以简化WCET分析。然而,指令请求访问数据时并不一定要访问所有的缓存层,因此,现有的分析方法通常导致任务WCET估算过于保守。基于这一原因,本发明实现了一种支持指令预取的WCET分析方法。
发明内容
本发明的目的在于克服现有多核共享缓存WCET分析技术过于复杂以及任务WCET估算过于保守的局限性,提出了一种支持指令预取的多核缓存WCET分析方法。
为了便于陈述,首先对本方法中有关符号和术语的含义进行介绍:
设各级缓存均为A-way组关联型缓存结构,各级缓存均使用LRU替换策略;令capacity表示缓存容量,linesize表示缓存行大小,缓存缺失时,从下一级存储取得的连续字节数,则缓存可以容纳n=capacity/linesize个缓存行,缓存组的集合可表示为F=<f1,f2,…fn/A>,其中,n/A是缓存的组数;fi(i≤n/A)表示一个组缓存行序列L=<l1,l2,…ln/A>,令函数adr:M→N0计算内存块的地址,函数计算内存块所映射到的缓存组,则set函数可表示为(1):
set(m)=fi; (1)
其中,i=adr(m)%(n/A)+1,%表示取余操作;
用Φ代表一个任务的缓存行没有映射到的内存块,则M'=M∪Φ;
定义1:抽象组状态:一个抽象组状态是对应一个函数其中表示所有抽象组状态的集合,L表示一个组缓存行序列;
定义2:抽象缓存状态:一个抽象缓存状态(ACS)是一个函数其中表示所有抽象缓存状态的集合;
定义3:更新函数:一个抽象缓存状态更新函数:用来更新抽象缓存状态;
定义4:联合函数:在任务的控制流程图中,对具有多个前驱的结点进行抽象缓存状态联合,一个抽象缓存状态联合函数表示为:
本发明提出的一种支持指令预取的多核缓存WCET分析方法,其核心思想是改善传统WCET分析中不考虑预取指令的对请求在缓存中状态的影响,为了判断预取指令是否影响请求在私有L1缓存和共享L2缓存中的状态,在缓存访问分类(Cache AccessClassification,CAC)的基础上,引入缓存提前访问分类(Cache Preceding AccessClassification,CPAC)并进行语义扩展分析,以确定提前访问缓存的预取操作对缓存状态(Cache State Classification,CSC)的影响,提高了任务WCET分析的精确度。
具体实现步骤如下:
步骤1:识别预取指令;
采用一条特殊Load指令,也称为预取Load指令,来替代预取指令的语义,该指令在WCET分析过程中只会把预取数据送到目标缓存,而不影响寄存器值,因此在分析过程中,如果一条指令是Load操作,且它的目标是预先定义好的不影响程序的寄存器N,则标记该特殊Load指令为预取指令;
其中,采用预取指令的目的是通过在程序中插入预取指令,实现对数据的预取;预取指令与普通指令,即Load指令,的主要区别在于预取指令有特殊的格式及参数,且为了让静态分析工具所采用的编译器能够识别预取指令,预取指令取回的数据将提前被放入缓存;
步骤2:构建请求的缓存提前访问分类CPAC;
具体的,步骤2在步骤1分析得到预取指令的基础上,基于请求的缓存访问分类CAC构建提前访问分类CPAC,所述步骤2具体又包括子步骤2.1和步骤2.2;
步骤2.1请求的缓存状态分析;
本步骤2.1对基本块(程序中一段顺序的执行序列,其中只有一个入口,只有一个出口)所映射的内存块进行缓存抽象状态分析,通过使用以下3种缓存分析方法:Must缓存语义分析、May缓存语义分析和Persistence缓存语义分析获得每个基本块所映射内存块的抽象状态;
(A)Must缓存语义分析
对于一个内存块访问,本步骤(A)判定对该内存块的引用是否是必然命中的(Always Hit,AH);若则可判断内存块m在缓存上是必然命中的,这里x表示内存块m在抽象组缓存中的位置(缓存组相对年龄);步骤(A)中用函数分别对抽象组和抽象缓存状态进行更新,表示把y映射到z;函数和用公式(2)和(3)表达:
令分别是抽象组和抽象缓存状态联合函数,则可以表达为公式(4)和(5):
对于内存块m,如果对于任意y,1≤y≤A,则能确定对该缓存块的访问在缓存上是AH的;
(B)May缓存语义分析
对于一个内存块访问,本步骤(B)判定对该内存块的引用是否是必然缺失(AlwaysMiss,AM),若对于任意y,1≤y≤A,则该内存块一定不在缓存中,步骤(B)中用函数分别对抽象组和抽象缓存状态进行更新,具体采用公式(6)和(7)进行更新;
令分别是抽象组和抽象缓存状态联合函数,则,
对于内存块m,如果对于任意y,1≤y≤A,则能确定对该缓存块的访问在缓存上是AM的;
(C)Persistence缓存语义分析
对于一个内存块访问,本步骤(C)判定对该内存块的引用是否是第一次访问是缺失,其余次的访问是命中;每个缓存组引入了一个额外的缓存行l⊥,收集被移除缓存的内存块;步骤(C)中用函数 分别对抽象组和抽象缓存状态进行更新,具体采用公式(9)和(10)进行更新;
令分别是抽象组和抽象缓存状态更新函数,则和可以分别表述为:
对内存块m的访问在缓存上是PS的;
步骤2.2扩展请求的缓存状态
针对步骤2.1,设MIP(i)={mem(1)+1,mem(1)+2,…,mem(2)+N}代表指令i顺序预取下N个指令缓存行,这些被预取的N行指令将会更新指令i在指令缓存的acsout(i),即将预取指令融入到缓存状态分析中,令分别表示指令i在步骤2.1中Must,May和Persistence分析下支持指令预取语义的缓存状态更新函数,则有:
其中表示用缓存行imem(i)+1,…,imem(i)+N依次更新acsin(i);
对于一条指令k,其CPAC可分为“总提前访问”(Always Preceding,AP)、“从不提前访问”(Never Preceding,NP)、“第一次提前访问”(First Preceding,FP)和“不确定是否提前访问”(Uncertain Preceding,UP):这里AP意味着k总是提前访问L2缓存;NP意味着k从不提前访问L2缓存;FP意味着k第一次会提前访问L2缓存,其余则不会;UP意味着不能确定是否会访问L2缓存;
对于集合I中任意一条指令k,用CPAC(k)表示它在L2缓存上的CPAC,CPAC(k)依赖于支持指令预取的L1指令缓存分析结果,其由可以预取它的前驱指令在L1指令缓存的命中/缺失状态决定,用下面公式(14)计算指令k的CPAC:
对于指令k,用acsomust(k),acsomust(k),acsomust(k)分别表示指令k在Must,May和Persistence缓存分析下的抽象缓存输出状态,这里有:
上述(A)、(B)以及(C)三种缓存语义分析的执行顺序如下:
首先,执行(A)Must缓存语义分析,如果指令k没有被预取,表示所有能够预取指令k的指令在L1指令缓存上都是命中,指令k从不会被预取,其CPAC(k)是NP,跳至步骤3;
其次,执行(B)May缓存语义分析,如果指令k被预取,表示预取指令k的指令在L1缓存上总是缺失;指令k在L1缓存上一定不是命中,指令k总会被预取,其CPAC(k)是AP,跳至步骤3;
第三,如果CPAC(k)不是NP也不是AP,执行(C)Persistence缓存语义分析,如果在Persistence缓存语义分析中指令k被预取,表示预取指令k的指令在L1缓存上不是总命中,也不是总缺失,而是第一次缺失,指令k在第一次会被预取,其CPAC(k)是FP;其它情况则不确定指令k何时被预取,其CPAC(k)是UP;
步骤3:任务的L1缓存状态分析,具体为:
步骤3.1依据任务的控制流图(Control Flow Graph,CFG),控制流图是程序或过程的抽象表现,根据其计算每个基本块的前驱节点和后继节点,并为每个基本块设置稳定状态变量;
步骤3.2遍历任务中所有基本块,在遍历过程中,使用定义4中联合函数对基本块和它所有前驱基本块之间的缓存状态进行联合操作,然后使用步骤2.1中Must,May和Persistence分析进行L1缓存语义分析;
步骤3.3将缓存语义分析结果作为步骤2.2请求的缓存状态分析的输入,并对基本块内指令逐条进行分析,当一条指令在L1缓存上不是命中时,且该指令没有被预取执行过,则触发预取,使用步骤2.2请求的缓存状态更新函数进行更新;
步骤3.4当指令在L1缓存上命中或指令已经被预取指令过,则使用定义3中更新函数对缓存状态进行更新;
步骤3.5重复步骤3.2到步骤3.4,直至整个任务中每个基本块的私有L1缓存状态达到稳定状态,即基本块的L1缓存状态在执行联合操作和更新操作后,其L1缓存状态不再发生变化;
由于缓存行数和任务访问的内存块数目都是有限的,所以缓存行的抽象缓存状态也是有限的;同时支持指令预取的缓存状态联合操作函数和更新操作函数是单调的,单调有界的函数存在极限,因此,缓存状态分析必然能达到稳定状态;
步骤4:任务的L2缓存状态分析,具体为:
进行任务的L2共享缓存状态分析,在此分析前,首先分析预取指令预取的数据在L1缓存上的CAC状态,如果预取的数据是不是AH的,则标记该预取指令在L2缓存状态为A;然后按照如下过程进行L2缓存状态分析:
步骤4.1依据控制流图对任务中基本块进行L2缓存状态分析,在基本块中,对每条标记为A的指令执行CPAC分析,如果一条指令不属于NP,则使用它预取的L2缓存行更新当前的L2缓存状态,然后再进行中Must,May和Persistence分析进行L2缓存语义分析;
步骤4.2计算预取指令所对应L2缓存行和数据块的数目并用Conflict_num(data)表示;分析预取指令所预取的数据在程序点中的缓存年龄,并表示为Prefech_Age(data);
步骤4.3计算预取指令I的Conflict_num(data)和Prefech_Age(data)之和是否大于L2缓存的路数,如果大于意味着预取的数据在被用到之前没有被替换出缓存.则计算预取节省的访存延迟,如果预取能够及时把数据取回,并且该数据在L2缓存上抽象状态不是AH,则更新它的状态为AH;
步骤4.4重复步骤4.1到步骤4.3直至整个任务中每个基本块的L2缓存状态达到稳定状态,即基本块的L2缓存状态在执行联合操作和更新操作后,其L2缓存状态未发生变化;
步骤5:计算任务的WCET,具体为:
一个在预取技术下实时任务的WCET,可以由如下公式(15)和(16)计算:
WCET=Tpipeline+TM (15)
TM=TL1+TL2+Tmem=LhitL1*nhitL1+LmissL1*nmissL1
+LmissL2*nmissL2 (16)
公式(15)中用Tpipeline表示程序在流水线上总的执行时间,LhitL1是L1缓存上命中的延迟,nhitL1表示任务在访问L1缓存时总的命中次数,LmissL1,LmissL2分别表示请求访问L1缓存,L2缓存缺失延迟,nmissL1,nmissL2则分别表示任务访问L1缓存,L2缓存总的缺失次数;对于程序指令,指令以块的形式连续存放在内存,并以块为单位从内存调入到缓存;当处理器访问一条指令时,如果该指令不在缓存,则将该指令调入缓存,进行流水线分析,然后基于步骤3和步骤4进行状态分析并计算任务的WCET,步骤5,具体过程如下:
步骤5.1预测每条指令所访问地址的范围,该数据地址可以进行L1缓存及L2缓存抽象状态分析及更新;并对支持指令预取的L1指令缓存分析将对T中的每一条指令执行前和执行后的L1抽象缓存状态进行分析;
步骤5.2对每条指令的CPAC进行计算,利用L1指令/数据CSC分类确定指令/数据在L1缓存上的AM/AH/PS/NC分类;得到指令/数据在L1缓存上的CSC分类;
步骤5.3用L2缓存访问过滤函数来计算指令和数据在L2共享缓存上的CAC,支持指令预取的L2共享缓存分析将结合指令在L2缓存上的CAC和CPAC和数据在L2缓存上的CAC,分析每一条指令执行前和执行后的L2抽象缓存状态;
步骤5.4分析指令/数据在L2缓存上CSC分类;最后将依据指令和数据在L1和L2缓存上的CSC,建立整数线性规划方程(Integer Liner Programming,ILP)方程来评估任务带有指令预取时的WCET;
至此,从步骤1到步骤5,完成了一种支持指令预取多核缓存WCET的分析方法。
有益效果
本发明一种支持指令预取任务WCET的分析方法,与现有技术相比,具有如下有益效果:
1.利用该方法可以获得精确估值任务WCET;
2.利用本方法扩展WCET分析的应用范围;
3.本发明可广泛应用于在多核环境下,实时任务WCET的估算;
4.主要技术包括识别预取指令、构造带有预取指令的缓存状态分析及WCET计算,该方法使得支持指令预取的硬实时任务的WCET可测,这样预取技术就可以被用来进一步提高实时系统的性能;
5.本发明可广泛应用于实时系统中任务的性能分析及可调度性分析。
附图说明
图1为本发一种支持指令预取的多核缓存WCET分析方法的流程图;
图2为本发明一种支持指令预取的多核缓存WCET分析方法中对基本块分析的流程图;
图3是本发明一种支持指令预取的多核缓存WCET分析方法及实施例1中的程序源代码描述。
具体实施方式
根据上述技术方案,下面结合实施例和附图对本发明进行详细说明,使得本领域技术人员能够实践本发明。
实施例1
本实施例详细阐述了本发明在指令预取情况下具体实施时的执行过程。
图1是本发明的WCET分析方法流程图,图中每个方框代表本发明的一个操作步骤。图2是本发明中对基本块分析的流程图,对任务中基本块的L1缓存状态分析和L2缓存状态分析,均采用图2中的步骤。图3(a-c)描述了一个程序的部分源代码,以及通过逆向分析得到其对应的CFG和汇编代码。图3(b)中的一个结点表示基本块的编号,例如,B0表示基本块的编号是0。对于图3(c)基本块中的基于Simplescalar模拟器的PISA汇编代码,每一行最前面的数字是指令的编号(1-10),后面用来表示指令。数字后面的字母表示指令所映射的缓存行(例如I0),往后依次是指令的地址(例如004001f0)和汇编代码本身,这里指令3需要访问数据缓存行x。
设第一级缓存是独立的L1指令/数据缓存,它们是2路组关联。第二级是联合的指令/数据缓存,它是4路组关联。缓存行的大小都是16B,每行可以容纳2条指令。为了简单,设私有L1缓存和共享L2缓存均只有1组,指令预取度是1。
本发明提出的支持指令预取任务WCET的分析方法包括5个步骤,具体步骤如下:
步骤1:识别预取指令
本发明使用一条特殊Load指令来替代预取指令的语义,该指令使用寄存器R1作为目标寄存器,以便于让静态WCET分析工具采用的编译器能够识别预取指令和普通指令。
步骤2:构建请求的缓存提前访问分类
所述的步骤1包括两个子步骤2.1、2.2:
步骤2.1:请求的缓存状态分析
表1.程序代码描述
该步骤对指令请求的缓存访问状态进行分析,即获得CAC。表1中第2列描述在最长路径p1→p2→p3→p4→p5→p6下采用支持指令预取时的私有L1指令缓存状态,第3,4,5列分别描述了支持指令预取的L1缓存Must、May和Persistence分析后的抽象L1缓存状态。对于表1的第5列Persistence分析中的一个抽象缓存状态来说,第3列是额外的L1抽象缓存行l⊥。对同一个缓存行中的指令来说,如果它不是该行的第一条指令,并且也不是跳转目标指令,那么它的缺失延迟被同一缓存行的第一条指令的缺失延迟所隐藏,同时,它在缓存上的CSC是AH。在Must分析中,imem(I)=I1,在基本块B0开始执行时,I1在L1缓存上缺失,指令1的缺失触发了对缓存行I2的预取,Tmust(1)=1,Pmust(3)=1,指令3在L1缓存上是AH;imem(5)=I3,在基本块B0中它没有被预取,它在L1缓存上缺失,然后触发了对缓存行I4的预取Tmust(5)=1,Pmust(7)=1。在基本块B0结束时(程序点p1),缓存行I4已经被预取到L1缓存,它在acsout(5)中,经过联合基本块B0中的acsout(5)和基本块B1中acsout(6),当基本块B2开始执行时(程序点p3)缓存行I4依然在acsin(7)中,指令7在L1缓存上是AH。在May分析中,指令1、5、9在执行前,都没有在它们各自的抽象缓存输入状态中,所以它们在L1缓存上的CSC都是AM,Tmay(1)=1,Tmay(5)=1,Tmay(9)=1,指令1预取了指令3,指令5预取了指令7,Pmay(3)=1,Pmay(7)=1,此时已经得到了所有指令在L1指令缓存上的CSC,经过Persistence分析后,可以得到指令在L1缓存上的具体状态下命中/缺失。
步骤2.2:扩展请求的缓存状态
该步骤通过指令请求的CAC进行扩展,获得请求的缓存提前访问状态,即CPAC。经过支持指令预取的L1缓存分析后得到CSC如表2所示,从表2可以看出,具体状态下在L1缓存上缺失的指令在抽象缓存分析中的CSC都是AM。
表2.指令在L1缓存上的具体的命中/缺失和CSC
Inst | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Concrete hit/miss | miss | hit | hit | hit | miss | hit | hit | hit | miss | hit |
CSC | AM | AH | AH | AH | AM | AH | AH | AH | AM | AH |
通过图1的支持指令预取的L1指令缓存分析后可以得到每条指令在L2缓存上的CPAC和CAC,如表3所示。
表3.指令在L1缓存上的具体的命中/缺失和CSC
Inst | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
CAC | A | N | N | N | A | N | N | N | A | N |
CPAC | NP | NP | AP | NP | NP | NP | AP | NP | NP | NP |
表4描述了代码在最长路径p1→p2→p3→p4→p5→p6的支持指令预取的具体L2指令缓存状态(第2列)和通过支持指令预取的L2缓存Must、May和Persistence分析后的抽象L2缓存状态(第3,4,5列)。对于表4的第5列Persistence分析中的一个抽象缓存状态来说,第5列是额外的L2抽象缓存行l⊥。
表4.程序代码描述
在Must分析中,cac(I)=A,在基本块B0开始执行时,I1访问L2共享缓存,虽然cac(3)-N,但是cpac(3)=AP,指令3被取到了L2缓存,I2在I1之后访问L2缓存;cpac(5)=A,I3访问L2缓存,cpac(7)=A,在基本块B0结束时(程序点p1),缓存行I4被预取到L2缓存,它在L2缓存下的acsout(5)中,经过联合L2缓存下的基本块B0中的acsout(5)和基本块B1中acsout(6),当基本块B2开始执行时(程序点p3)缓存行I4依然在它在L2缓存下的acsin(7)中。在May分析中,指令1、5、9在执行前,都没有在它们各自的L2抽象缓存输入状态中,所以它们在L2缓存上的CSC都是AM。指令在L2缓存上的具体状态下命中/缺失和经过支持指令预取的L2缓存分析后得到CSC如表3所示,⊥表示指令不访问L2缓存。从表3可以看出,具体状态下在L2缓存上缺失的指令在抽象缓存分析中的CSC都是AM,因此支持指令预取的L2指令缓存分析是安全的。
表5.程序代码描述
Inst | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Concrete hit/miss | miss | ⊥ | ⊥ | ⊥ | miss | ⊥ | ⊥ | ⊥ | miss | ⊥ |
CSC | AM | ⊥ | ⊥ | ⊥ | AM | ⊥ | ⊥ | ⊥ | AM | ⊥ |
以上所述为本发明的较佳实施例而已,本发明不应该局限于该实施例和附图所公开的内容。凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。
Claims (7)
1.一种支持指令预取的多核缓存WCET分析方法,其特征在于:核心思想是改善传统WCET分析中不考虑预取指令的对请求在缓存中状态的影响,为了判断预取指令是否影响请求在私有L1缓存和共享L2缓存中的状态,在缓存访问分类(Cache AccessClassification,CAC)的基础上,引入缓存提前访问分类(Cache Preceding AccessClassification,CPAC)并进行语义扩展分析,以确定提前访问缓存的预取操作对缓存状态(Cache State Classification,CSC)的影响,提高了任务WCET分析的精确度;
有关符号和术语的含义如下:设各级缓存均为A-way组关联型缓存结构,各级缓存均使用LRU替换策略;令capacity表示缓存容量,linesize表示缓存行大小,缓存缺失时,从下一级存储取得的连续字节数,则缓存可以容纳n=capacity/linesize个缓存行,缓存组的集合可表示为F=<f1,f2,…fn/A>,其中,n/A是缓存的组数;fi(i≤n/A)表示一个组缓存行序列L=<l1,l2,…ln/A>,令函数adr:M→N0计算内存块的地址,函数计算内存块所映射到的缓存组,则set函数可表示为(1):
set(m)=fi; (1)
其中,i=adr(m)%(n/A)+1,%表示取余操作;
用Φ代表一个任务的缓存行没有映射到的内存块,则M'=M∪Φ;
定义1:抽象组状态:一个抽象组状态是对应一个函数其中表示所有抽象组状态的集合,L表示一个组缓存行序列;
定义2:抽象缓存状态:一个抽象缓存状态(ACS)是一个函数其中表示所有抽象缓存状态的集合;
定义3:更新函数:一个抽象缓存状态更新函数:用来更新抽象缓存状态;
定义4:联合函数:在任务的控制流程图中,对具有多个前驱的结点进行抽象缓存状态联合,一个抽象缓存状态联合函数表示为:
2.根据权利要求1所述的一种支持指令预取的多核缓存WCET分析方法,其特征在于:
具体实现步骤如下:
步骤1:识别预取指令;
步骤2:构建请求的缓存提前访问分类CPAC;
步骤3:任务的L1缓存状态分析;
步骤4:任务的L2缓存状态分析;
步骤5:计算任务的WCET;
至此,从步骤1到步骤5,完成了一种支持指令预取任务WCET的分析方法。
3.根据权利要求2所述的一种支持指令预取的多核缓存WCET分析方法,其特征在于:步骤1,采用一条特殊Load指令,也称为预取Load指令,来替代预取指令的语义,该指令在WCET分析过程中只会把预取数据送到目标缓存,而不影响寄存器值,因此在分析过程中,如果一条指令是Load操作,且它的目标是预先定义好的不影响程序的寄存器N,则标记该特殊Load指令为预取指令;
其中,采用预取指令的目的是通过在程序中插入预取指令,实现对数据的预取;预取指令与普通指令,即Load指令,的主要区别在于预取指令有特殊的格式及参数,且为了让静态分析工具所采用的编译器能够识别预取指令,预取指令取回的数据将提前被放入缓存。
4.根据权利要求2所述的一种支持指令预取的多核缓存WCET分析方法,其特征在于:步骤2在步骤1分析得到预取指令的基础上,基于请求的缓存访问分类CAC构建提前访问分类CPAC,所述步骤2具体又包括子步骤2.1和步骤2.2;
步骤2.1请求的缓存状态分析;
本步骤2.1对基本块(程序中一段顺序的执行序列,其中只有一个入口,只有一个出口)所映射的内存块进行缓存抽象状态分析,通过使用以下3种缓存分析方法:Must缓存语义分析、May缓存语义分析和Persistence缓存语义分析获得每个基本块所映射内存块的抽象状态;
(A)Must缓存语义分析
对于一个内存块访问,本步骤(A)判定对该内存块的引用是否是必然命中的(AlwaysHit,AH);若则可判断内存块m在缓存上是必然命中的,这里x表示内存块m在抽象组缓存中的位置(缓存组相对年龄);步骤(A)中用函数分别对抽象组和抽象缓存状态进行更新,表示把y映射到z;函数和用公式(2)和(3)表达:
令分别是抽象组和抽象缓存状态联合函数,则可以表达为公式(4)和(5):
<mrow>
<msubsup>
<mover>
<mi>J</mi>
<mo>^</mo>
</mover>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mi>H</mi>
</msubsup>
<mrow>
<mo>(</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>1</mn>
</msub>
<mo>,</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mo>;</mo>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>x</mi>
</msub>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mo>{</mo>
<mi>m</mi>
<mo>|</mo>
<mo>&Exists;</mo>
<msub>
<mi>l</mi>
<mi>a</mi>
</msub>
<mo>,</mo>
<msub>
<mi>l</mi>
<mi>b</mi>
</msub>
<mi>m</mi>
<mo>&Element;</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>2</mn>
</msub>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>b</mi>
</msub>
<mo>)</mo>
</mrow>
<mi>a</mi>
<mi>n</mi>
<mi>d</mi>
<mi> </mi>
<mi>x</mi>
<mo>=</mo>
<mi>m</mi>
<mi>a</mi>
<mi>x</mi>
<mrow>
<mo>(</mo>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
<mo>)</mo>
</mrow>
<mo>}</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>4</mn>
<mo>)</mo>
</mrow>
</mrow>
对于内存块m,如果对于任意y,1≤y≤A,则能确定对该缓存块的访问在缓存上是AH的;
(B)May缓存语义分析
对于一个内存块访问,本步骤(B)判定对该内存块的引用是否是必然缺失(AlwaysMiss,AM),若对于任意y,1≤y≤A,则该内存块一定不在缓存中,步骤(B)中用函数分别对抽象组和抽象缓存状态进行更新,具体采用公式(6)和(7)进行更新;
令分别是抽象组和抽象缓存状态联合函数,则,
<mrow>
<msubsup>
<mover>
<mi>J</mi>
<mo>^</mo>
</mover>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mi>M</mi>
</msubsup>
<mrow>
<mo>(</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>1</mn>
</msub>
<mo>,</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mo>;</mo>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>x</mi>
</msub>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mo>{</mo>
<mi>m</mi>
<mo>|</mo>
<mo>&Exists;</mo>
<msub>
<mi>l</mi>
<mi>a</mi>
</msub>
<mo>,</mo>
<msub>
<mi>l</mi>
<mi>b</mi>
</msub>
<mi>m</mi>
<mo>&Element;</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>a</mi>
</msub>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mi>m</mi>
<mo>&Element;</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>2</mn>
</msub>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>b</mi>
</msub>
<mo>)</mo>
</mrow>
</mrow>
and x=max(a,b)}
对于内存块m,如果对于任意y,1≤y≤A,则能确定对该缓存块的访问在缓存上是AM的;
(C)Persistence缓存语义分析
对于一个内存块访问,本步骤(C)判定对该内存块的引用是否是第一次访问是缺失,其余次的访问是命中;每个缓存组引入了一个额外的缓存行l⊥,收集被移除缓存的内存块;步骤(C)中用函数 分别对抽象组和抽象缓存状态进行更新,具体采用公式(9)和(10)进行更新;
令分别是抽象组和抽象缓存状态更新函数,则和可以分别表述为:
<mrow>
<msubsup>
<mover>
<mi>J</mi>
<mo>^</mo>
</mover>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mi>P</mi>
</msubsup>
<mrow>
<mo>(</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>1</mn>
</msub>
<mo>,</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mi>w</mi>
<mi>h</mi>
<mi>e</mi>
<mi>r</mi>
<mi>e</mi>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>x</mi>
</msub>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mo>{</mo>
<mi>m</mi>
<mo>|</mo>
<mo>&Exists;</mo>
<msub>
<mi>l</mi>
<mi>a</mi>
</msub>
<mo>,</mo>
<msub>
<mi>l</mi>
<mi>b</mi>
</msub>
<mi>w</mi>
<mi>i</mi>
<mi>t</mi>
<mi>h</mi>
<mi> </mi>
<mi>m</mi>
<mo>&Element;</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>a</mi>
</msub>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mi>m</mi>
<mo>&Element;</mo>
<msub>
<mover>
<mi>s</mi>
<mo>^</mo>
</mover>
<mn>2</mn>
</msub>
<mrow>
<mo>(</mo>
<msub>
<mi>l</mi>
<mi>b</mi>
</msub>
<mo>)</mo>
</mrow>
<mi>a</mi>
<mi>n</mi>
<mi>d</mi>
</mrow>
x=max(a,b)}
对内存块m的访问在缓存上是PS的;
步骤2.2扩展请求的缓存状态
针对步骤2.1,设MIP(i)={mem(1)+1,mem(1)+2,…,mem(2)+N}代表指令i顺序预取下N个指令缓存行,这些被预取的N行指令将会更新指令i在指令缓存的acsout(i),即将预取指令融入到缓存状态分析中,令分别表示指令i在步骤2.1中Must,May和Persistence分析下支持指令预取语义的缓存状态更新函数,则有:
其中表示用缓存行imem(i)+1,…,imem(i)+N依次更新acsin(i);
对于一条指令k,其CPAC可分为“总提前访问”(Always Preceding,AP)、“从不提前访问”(Never Preceding,NP)、“第一次提前访问”(First Preceding,FP)和“不确定是否提前访问”(Uncertain Preceding,UP):这里AP意味着k总是提前访问L2缓存;NP意味着k从不提前访问L2缓存;FP意味着k第一次会提前访问L2缓存,其余则不会;UP意味着不能确定是否会访问L2缓存;
对于集合I中任意一条指令k,用CPAC(k)表示它在L2缓存上的CPAC,CPAC(k)依赖于支持指令预取的L1指令缓存分析结果,其由可以预取它的前驱指令在L1指令缓存的命中/缺失状态决定,用下面公式(14)计算指令k的CPAC:
对于指令k,用acsomust(k),acsomust(k),acsomust(k)分别表示指令k在Must,May和Persistence缓存分析下的抽象缓存输出状态,这里有:
<mrow>
<msub>
<mi>acs</mi>
<mrow>
<mi>o</mi>
<mi>m</mi>
<mi>u</mi>
<mi>s</mi>
<mi>t</mi>
</mrow>
</msub>
<mrow>
<mo>(</mo>
<mi>k</mi>
<mo>)</mo>
</mrow>
<mo>&SubsetEqual;</mo>
<msub>
<mi>acs</mi>
<mrow>
<mi>o</mi>
<mi>p</mi>
<mi>e</mi>
<mi>r</mi>
<mi>s</mi>
<mi>i</mi>
<mi>s</mi>
<mi>tan</mi>
<mi>c</mi>
<mi>e</mi>
</mrow>
</msub>
<mrow>
<mo>(</mo>
<mi>k</mi>
<mo>)</mo>
</mrow>
<mo>&SubsetEqual;</mo>
<msub>
<mi>acs</mi>
<mrow>
<mi>o</mi>
<mi>m</mi>
<mi>a</mi>
<mi>y</mi>
</mrow>
</msub>
<mrow>
<mo>(</mo>
<mi>k</mi>
<mo>)</mo>
</mrow>
</mrow>
上述(A)、(B)以及(C)三种缓存语义分析的执行顺序如下:
首先,执行(A)Must缓存语义分析,如果指令k没有被预取,表示所有能够预取指令k的指令在L1指令缓存上都是命中,指令k从不会被预取,其CPAC(k)是NP,跳至步骤3;
其次,执行(B)May缓存语义分析,如果指令k被预取,表示预取指令k的指令在L1缓存上总是缺失;指令k在L1缓存上一定不是命中,指令k总会被预取,其CPAC(k)是AP,跳至步骤3;
第三,如果CPAC(k)不是NP也不是AP,执行(C)Persistence缓存语义分析,如果在Persistence缓存语义分析中指令k被预取,表示预取指令k的指令在L1缓存上不是总命中,也不是总缺失,而是第一次缺失,指令k在第一次会被预取,其CPAC(k)是FP;其它情况则不确定指令k何时被预取,其CPAC(k)是UP。
5.根据权利要求2所述的一种支持指令预取的多核缓存WCET分析方法,其特征在于:步骤3,具体为:
步骤3.1依据任务的控制流图(Control Flow Graph,CFG),控制流图是程序或过程的抽象表现,根据其计算每个基本块的前驱节点和后继节点,并为每个基本块设置稳定状态变量;
步骤3.2遍历任务中所有基本块,在遍历过程中,使用定义4中联合函数对基本块和它所有前驱基本块之间的缓存状态进行联合操作,然后使用步骤2.1中Must,May和Persistence分析进行L1缓存语义分析;
步骤3.3将缓存语义分析结果作为步骤2.2请求的缓存状态分析的输入,并对基本块内指令逐条进行分析,当一条指令在L1缓存上不是命中时,且该指令没有被预取执行过,则触发预取,使用步骤2.2请求的缓存状态更新函数进行更新;
步骤3.4当指令在L1缓存上命中或指令已经被预取指令过,则使用定义3中更新函数对缓存状态进行更新;
步骤3.5重复步骤3.2到步骤3.4,直至整个任务中每个基本块的私有L1缓存状态达到稳定状态,即基本块的L1缓存状态在执行联合操作和更新操作后,其L1缓存状态不再发生变化;
由于缓存行数和任务访问的内存块数目都是有限的,所以缓存行的抽象缓存状态也是有限的;同时支持指令预取的缓存状态联合操作函数和更新操作函数是单调的,单调有界的函数存在极限,因此,缓存状态分析必然能达到稳定状态。
6.根据权利要求2所述的一种支持指令预取的多核缓存WCET分析方法,其特征在于:步骤4,具体为:
进行任务的L2共享缓存状态分析,在此分析前,首先分析预取指令预取的数据在L1缓存上的CAC状态,如果预取的数据是不是AH的,则标记该预取指令在L2缓存状态为A;然后按照如下过程进行L2缓存状态分析:
步骤4.1依据控制流图对任务中基本块进行L2缓存状态分析,在基本块中,对每条标记为A的指令执行CPAC分析,如果一条指令不属于NP,则使用它预取的L2缓存行更新当前的L2缓存状态,然后再进行中Must,May和Persistence分析进行L2缓存语义分析;
步骤4.2计算预取指令所对应L2缓存行和数据块的数目并用Conflict_num(data)表示;分析预取指令所预取的数据在程序点中的缓存年龄,并表示为Prefech_Age(data);
步骤4.3计算预取指令I的Conflict_num(data)和Prefech_Age(data)之和是否大于L2缓存的路数,如果大于意味着预取的数据在被用到之前没有被替换出缓存.则计算预取节省的访存延迟,如果预取能够及时把数据取回,并且该数据在L2缓存上抽象状态不是AH,则更新它的状态为AH;
步骤4.4重复步骤4.1到步骤4.3直至整个任务中每个基本块的L2缓存状态达到稳定状态,即基本块的L2缓存状态在执行联合操作和更新操作后,其L2缓存状态未发生变化。
7.根据权利要求2所述的一种支持指令预取的多核缓存WCET分析方法,其特征在于:步骤5,具体为:
一个在预取技术下实时任务的WCET,可以由如下公式(15)和(16)计算:
WCET=Tpipeline+TM (15)
<mrow>
<mtable>
<mtr>
<mtd>
<mrow>
<msub>
<mi>T</mi>
<mi>M</mi>
</msub>
<mo>=</mo>
<msub>
<mi>T</mi>
<mrow>
<mi>L</mi>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>T</mi>
<mrow>
<mi>L</mi>
<mn>2</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>T</mi>
<mrow>
<mi>m</mi>
<mi>e</mi>
<mi>m</mi>
</mrow>
</msub>
<mo>=</mo>
<msub>
<mi>Lhit</mi>
<mrow>
<mi>L</mi>
<mn>1</mn>
</mrow>
</msub>
<mo>*</mo>
<msub>
<mi>nhit</mi>
<mrow>
<mi>L</mi>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>Lmiss</mi>
<mrow>
<mi>L</mi>
<mn>1</mn>
</mrow>
</msub>
<mo>*</mo>
<msub>
<mi>nmiss</mi>
<mrow>
<mi>L</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>+</mo>
<msub>
<mi>Lmiss</mi>
<mrow>
<mi>L</mi>
<mn>2</mn>
</mrow>
</msub>
<mo>*</mo>
<msub>
<mi>nmiss</mi>
<mrow>
<mi>L</mi>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>16</mn>
<mo>)</mo>
</mrow>
</mrow>
公式(15)中用Tpipeline表示程序在流水线上总的执行时间,LhitL1是L1缓存上命中的延迟,nhitL1表示任务在访问L1缓存时总的命中次数,LmissL1,LmissL2分别表示请求访问L1缓存,L2缓存缺失延迟,nmissL1,nmissL2则分别表示任务访问L1缓存,L2缓存总的缺失次数;对于程序指令,指令以块的形式连续存放在内存,并以块为单位从内存调入到缓存;当处理器访问一条指令时,如果该指令不在缓存,则将该指令调入缓存,进行流水线分析,然后基于步骤3和步骤4进行状态分析并计算任务的WCET,步骤5,具体过程如下:
步骤5.1预测每条指令所访问地址的范围,该数据地址可以进行L1缓存及L2缓存抽象状态分析及更新;并对支持指令预取的L1指令缓存分析将对T中的每一条指令执行前和执行后的L1抽象缓存状态进行分析;
步骤5.2对每条指令的CPAC进行计算,利用L1指令/数据CSC分类确定指令/数据在L1缓存上的AM/AH/PS/NC分类;得到指令/数据在L1缓存上的CSC分类;
步骤5.3用L2缓存访问过滤函数来计算指令和数据在L2共享缓存上的CAC,支持指令预取的L2共享缓存分析将结合指令在L2缓存上的CAC和CPAC和数据在L2缓存上的CAC,分析每一条指令执行前和执行后的L2抽象缓存状态;
步骤5.4分析指令/数据在L2缓存上CSC分类;最后将依据指令和数据在L1和L2缓存上的CSC,建立整数线性规划方程(Integer Liner Programming,ILP)方程来评估任务带有指令预取时的WCET。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710996826.1A CN107844380B (zh) | 2017-10-19 | 2017-10-19 | 一种支持指令预取的多核缓存wcet分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710996826.1A CN107844380B (zh) | 2017-10-19 | 2017-10-19 | 一种支持指令预取的多核缓存wcet分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107844380A true CN107844380A (zh) | 2018-03-27 |
CN107844380B CN107844380B (zh) | 2020-10-27 |
Family
ID=61662654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710996826.1A Expired - Fee Related CN107844380B (zh) | 2017-10-19 | 2017-10-19 | 一种支持指令预取的多核缓存wcet分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107844380B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108845938A (zh) * | 2018-06-11 | 2018-11-20 | 南京航空航天大学 | 一种基于抽象解释的嵌入式软件模块化Cache行为分析方法 |
CN112799809A (zh) * | 2021-01-26 | 2021-05-14 | 南京大学 | 基于高速缓存着色的资源共享和隔离的混合关键实时系统 |
CN115794727A (zh) * | 2022-11-03 | 2023-03-14 | 格兰菲智能科技有限公司 | 缓存系统构造方法和装置 |
CN116069602A (zh) * | 2022-11-30 | 2023-05-05 | 西部科学城智能网联汽车创新中心(重庆)有限公司 | 一种最坏情况执行时间分析方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080052465A1 (en) * | 2006-08-23 | 2008-02-28 | Shi-Wu Lo | Method of accessing cache memory for parallel processing processors |
US20090293048A1 (en) * | 2008-05-23 | 2009-11-26 | International Business Machines Corporation | Computer Analysis and Runtime Coherency Checking |
CN103914333A (zh) * | 2014-04-14 | 2014-07-09 | 中国科学技术大学苏州研究院 | 基于片上网络互连的多核存储系统仿真器 |
CN104679521A (zh) * | 2015-03-13 | 2015-06-03 | 洛阳理工学院 | 一种精确计算任务高速缓存wcet的分析方法 |
-
2017
- 2017-10-19 CN CN201710996826.1A patent/CN107844380B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080052465A1 (en) * | 2006-08-23 | 2008-02-28 | Shi-Wu Lo | Method of accessing cache memory for parallel processing processors |
US20090293048A1 (en) * | 2008-05-23 | 2009-11-26 | International Business Machines Corporation | Computer Analysis and Runtime Coherency Checking |
CN103914333A (zh) * | 2014-04-14 | 2014-07-09 | 中国科学技术大学苏州研究院 | 基于片上网络互连的多核存储系统仿真器 |
CN104679521A (zh) * | 2015-03-13 | 2015-06-03 | 洛阳理工学院 | 一种精确计算任务高速缓存wcet的分析方法 |
Non-Patent Citations (3)
Title |
---|
安立奎、古志民、付引霞、赵鑫、甘志华: "支持软件预取的缓存WCET分析", 《北京理工大学学报》 * |
安立奎、韩丽艳: "支持指令预取的多核缓存WCET分析方法", 《计算机工程》 * |
韩丽艳、安立奎: "支持指令预取的两级指令缓存WCET分析", 《渤海大学学报(自然科学版)》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108845938A (zh) * | 2018-06-11 | 2018-11-20 | 南京航空航天大学 | 一种基于抽象解释的嵌入式软件模块化Cache行为分析方法 |
CN108845938B (zh) * | 2018-06-11 | 2021-04-30 | 南京航空航天大学 | 一种基于抽象解释的嵌入式软件模块化Cache行为分析方法 |
CN112799809A (zh) * | 2021-01-26 | 2021-05-14 | 南京大学 | 基于高速缓存着色的资源共享和隔离的混合关键实时系统 |
CN112799809B (zh) * | 2021-01-26 | 2023-12-26 | 南京大学 | 基于高速缓存着色的资源共享和隔离的混合关键实时系统 |
CN115794727A (zh) * | 2022-11-03 | 2023-03-14 | 格兰菲智能科技有限公司 | 缓存系统构造方法和装置 |
CN116069602A (zh) * | 2022-11-30 | 2023-05-05 | 西部科学城智能网联汽车创新中心(重庆)有限公司 | 一种最坏情况执行时间分析方法和装置 |
CN116069602B (zh) * | 2022-11-30 | 2024-03-12 | 西部科学城智能网联汽车创新中心(重庆)有限公司 | 一种最坏情况执行时间分析方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107844380B (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107844380B (zh) | 一种支持指令预取的多核缓存wcet分析方法 | |
US8683129B2 (en) | Using speculative cache requests to reduce cache miss delays | |
JP4027620B2 (ja) | 分岐予測装置、プロセッサ、及び分岐予測方法 | |
US7681015B2 (en) | Generating and comparing memory access ranges for speculative throughput computing | |
US8370575B2 (en) | Optimized software cache lookup for SIMD architectures | |
US7073030B2 (en) | Method and apparatus providing non level one information caching using prefetch to increase a hit ratio | |
CN110287010B (zh) | 一种面向Spark时间窗口数据分析的缓存数据预取方法 | |
CN112100094B (zh) | 用于基于预取指针的结构的系统和方法 | |
KR20160033768A (ko) | 캐시 점유도 결정 및 명령어 스케줄링을 위한 방법 및 장치 | |
US20070150660A1 (en) | Inserting prefetch instructions based on hardware monitoring | |
US9891916B2 (en) | Dynamically updating hardware prefetch trait to exclusive or shared in multi-memory access agent system | |
US20150286597A1 (en) | Data Transfer in a Multi-Core Processor | |
WO2020073641A1 (zh) | 一种面向数据结构的图形处理器数据预取方法及装置 | |
US10552334B2 (en) | Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early | |
CN105930281A (zh) | 以配置信息驱动数据访存模式匹配的片上缓存预取机制 | |
Huber et al. | Worst‐case execution time analysis‐driven object cache design | |
JP5514211B2 (ja) | 分岐オーバーライドを用いたプロセッサ実行のシミュレーション | |
US11048637B2 (en) | High-frequency and low-power L1 cache and associated access technique | |
CN108762812B (zh) | 面向通用字符串处理的硬件加速结构装置及控制方法 | |
KR101975101B1 (ko) | 학습을 이용한 프리페칭 장치 및 방법과 이에 관한 기록매체 | |
US20140258688A1 (en) | Benchmark generation using instruction execution information | |
US11740906B2 (en) | Methods and systems for nested stream prefetching for general purpose central processing units | |
US11086781B2 (en) | Methods and apparatus for monitoring prefetcher accuracy information using a prefetch flag independently accessible from prefetch tag information | |
Zhang et al. | Locality‐protected cache allocation scheme with low overhead on GPUs | |
Hasan et al. | Comparative Study for Catch Prefetching Algorithms |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20201027 Termination date: 20211019 |
|
CF01 | Termination of patent right due to non-payment of annual fee |