一种处理器中内存消歧的验证方法及系统与流程

文档序号:29411212发布日期:2022-03-26 11:50阅读:189来源:国知局
一种处理器中内存消歧的验证方法及系统与流程

1.本发明涉及处理器技术领域,具体涉及一种处理器中内存消歧的验证方法及系统。


背景技术:

2.高性能乱序执行的处理器,内存访问指令往往是乱序执行的,load指令可以采取投机执行的策略,而store指令必须保证是顺序的写入内存。load指令在获得物理地址之后,就可以尝试获取数据,在尝试的过程中,load指令会查找和自身有地址相关性的store指令,若存在地址相同且更年轻的store指令,则load可以直接从该store指令获得数据。但是也存在一些更老且物理地址还没有获得的store指令,load可以先不管这些store指令而去获取数据,等到store指令获得物理地址的时候,该store指令需要去查找是否存在物理地址相同且比它年轻且已经获得数据的load指令,若存在则需要重刷流水线,重新执行这条投机执行的load指令,因为这条load指令获得的是陈旧的数据。这种操作称为内存消歧。
3.另一种需要内存消歧的情况发生在多核系统,若核0的两条load指令访问相同地址,但是因为某种原因年轻的load指令先执行并且获得了数据,这时核1对该地址进行写操作,更改了数据,之后核0年老的load指令执行,它获得的是新的数据,而年轻的load指令获得是陈旧的数据,这时就需要重刷流水线,重新执行年轻的load指令。
4.常规处理器验证中,针对访存模块,会进行单独的建模,对得到的访问数据进行比较,但是很难做到对内存消歧这种微架构进行准确的验证,尤其在多核系统中的内存消歧验证,需要对系统和微架构充分熟悉,目前市面上很难找到相关技术。


技术实现要素:

5.针对现有技术的不足,本发明公开了一种处理器中内存消歧的验证方法及系统,用于解决上述问题。
6.本发明通过以下技术方案予以实现:
7.第一方面,本发明提供了一种处理器中内存消歧的验证方法,所述方法通过监测dut中load指令和store指令的执行信息,对单核、多核及非对齐访问引起的内存消歧逻辑进行验证,通过比较dut的内存消歧结果和检查器的内存消歧结果,判断是否需要重刷流水线以及从哪条指令开始重刷,其中,若重刷流水线信息与dut不一致,则立即报错误信息。
8.更进一步的,所述方法中,单核内存消歧包括由store指令引起的内存消歧验和由缓存踢出行引起的内存消歧验证。
9.更进一步的,所述方法中,单核中由store指令引起的内存消歧验证流程如下:
10.监测dut中的store指令,在store指令获得物理地址后,单核内存消歧判断器开始查找本核中是否存在满足条件的load指令;
11.若存在满足以上条件的load指令,单核内存消歧判断器执行以下操作:比较这些load指令的年龄信息,找出其中最年老的一条;将选出的load指令信息存入store指令的
commit信息中,load指令信息包括它在指令流中的标记或者program counter信息;
12.若不存在满足以上条件的load指令,则单核内存消歧判断器将该store指令commit信息中的重刷流水线信息置无效;
13.监测dut中store指令的commit信息,当store指令commit时,比较器将dut commit信息中的重刷流水线信息与验证的单核内存消歧结果进行比较,若不一致,则报错,报错信息包括是否需要重刷流水线,若需要重刷流水线,从哪条load指令开始重刷。
14.更进一步的,所述方法中,满足的load指令如下:
15.load指令的访问范围与store指令的访问范围有重叠;
16.load指令已经获得数据;
17.load指令在program order中比store指令年轻。
18.更进一步的,所述方法中,单核中由缓存踢出行引起的内存消歧验证流程如下:
19.监测dut中是否有一级缓存行被踢出的情况,若存在,单核内存消歧判断器开始查找本核中是否存在满足条件的两类load指令;
20.第一类load指令如果满足条件,则该load指令标记需要重刷流水线标志位:
21.第二类load指令如果满足条件,则该load指令在commit时,可能需要带上重刷流水线信息:
22.找出符合上述两类条件的所有load指令,查找是否存在第二类load指令比第一类load指令年老的情况;
23.若存在上述情况,则找出第一类load指令中最年老且比第二类load指令年轻的一条load指令,该load指令即为需要重刷流水线的起始位置,该load指令在程序中的位置信息会标记在第二类load指令上;
24.若不存在上述情况,则表示不需要内存消歧;
25.需要内存消歧时,等待dut中第二类load指令的commit信息,当该load指令commit时,比较器比较dut和检查器的重刷流水线信息,若不一致,则报错,报错信息包括是否需要重刷流水线,若需要重刷流水线,从哪条load指令开始重刷。
26.更进一步的,所述方法中,第一类load指令如果满足条件为:
27.load指令的物理地址与被踢出缓存行是同一缓存行;
28.load指令已经获得数据;
29.load指令的数据不是从本核forward获得;
30.第二类load指令如果满足条件为:
31.load指令的物理地址与被踢出缓存行是同一缓存行;
32.b.load指令还没有获得数据。
33.更进一步的,所述方法中,多核内存消歧验证流程如下:
34.监测多核系统中每个核的store指令,当store指令的数据被其他核可见时,多核内存消歧判断器查找其他核中是否存在满足条件的两类load指令;
35.第一类load指令如果满足条件,则该load指令标记需要重刷流水线标志位:
36.第二类load指令如果满足条件,则该load指令在commit时,需要带上重刷流水线信息:
37.找出每个核中符合上述两类条件的所有load指令,查找在同一核中是否存在第二
类load指令比第一类load指令年老的情况;
38.若存在上述情况,则找出第一类load指令中最年老且比第二类load指令年轻的一条load指令,该load指令即为需要重刷流水线的起始位置,该load指令在程序中的位置信息会标记在第二类load指令上;
39.若不存在上述情况,则表示不需要内存消歧;
40.需要内存消歧时,等待dut中第二类load指令的commit信息,当该load指令commit时,比较dut和检查器的重刷流水线信息,若不一致,则报错,报错信息包括是否需要重刷流水线,若需要重刷流水线,从哪条load指令开始重刷。
41.更进一步的,所述方法中,第一类load指令如果满足条件为:
42.load指令的物理地址和store指令的物理地址在同一缓存行;
43.load指令已经获得数据;
44.load指令的数据不是从本核forward获得;
45.第二类load指令如果满足条件为:
46.load指令的物理地址和store指令的物理地址在同一缓存行;
47.load指令还没有获得数据。
48.更进一步的,所述方法中,非对齐访问引起的内存消歧验证如下:
49.若load指令为非对齐访问,处理器将该load访问拆分成两次对齐的访问,检查器对将这两次访问处理成两次独立的访问,去进行单核和多核的内存消歧检查;
50.若store指令为非对齐访问,处理器将该store访问拆分成两次对齐的写操作,检查器将这两次写操作处理成两次独立的写操作,去进行单核和多核的内存消歧检查。
51.第二方面,本发明提供了一种处理器中内存消歧的验证系统,所述系统用于实现第一方面所述的处理器中内存消歧的验证方法,包括
52.访存指令监测器,用于监测dut中load指令和store指令的执行信息,其中load指令的执行信息会存入每个核的load指令队列中,store指令的执行信息会同时输送给单核内存消歧判断器和多核内存消歧判断器;
53.一级缓存监测器,用于监测一级缓存是否有踢出缓存行,将此信息输送给单核内存消歧判断器;
54.commit信息监测器,用于监测dut中load/store指令的commit信息,包括commit信息中重刷流水线信息,为dut内存消歧的结果,并与检查器的内存消歧结果进行比较;
55.单核内存消歧判断器,用于根据输入的store指令执行信息和一级缓存踢出行信息,去查找对应核的load指令队列,判断是否符合内存消歧条件,最后输出单核内存消歧结果;
56.多核内存消歧判断器,用于根据输入的store指令执行信息,去查找其他核的load指令队列,判断是否符合内存消歧条件,最后输出多核内存消歧结果;
57.每个核的load指令队列,用于将访存指令监测器输入的load指令执行信息存入对应核的load指令队列,这些信息包括load指令的访问地址,是否已经获得数据,数据来源,以及是否是非对齐访问;
58.比较器,用于比较dut的内存消歧结果和检查器的内存消歧结果。
59.本发明的有益效果为:
60.本发明针对内存消歧的逻辑进行验证,同时支持单核和多核的内存消歧。内存消歧的最终结果是是否需要重刷流水线,以及从哪条指令开始重刷,本验证方法对于这两点能做到精确验证,若重刷流水线信息与dut不一致,会立即报错误信息,能帮助验证人员快速有效地调试代码。
附图说明
61.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
62.图1是本发明实施例内存消歧验证结构图;
63.图2是本发明实施例单核内存消歧验证流程图;
64.图3是本发明实施例多核内存消歧验证流程图。
具体实施方式
65.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
66.实施例1
67.本实施例提供一种处理器中内存消歧的验证方法,所述方法通过监测dut中load指令和store指令的执行信息,对单核、多核及非对齐访问引起的内存消歧逻辑进行验证,通过比较dut的内存消歧结果和检查器的内存消歧结果,判断是否需要重刷流水线以及从哪条指令开始重刷,其中,若重刷流水线信息与dut不一致,则立即报错误信息。
68.本实施例方法支持单核情况下内存消歧的验证,包括由store指令引起的内存消歧和由一级缓存行踢出引起的内存消歧。
69.本实施例方法支持多核系统中的内存消歧验证,且核的个数可配。
70.本实施例方法对于支持非对齐访问的处理器,一条load/store指令可能被拆分成两次内存访问,这类指令产生的内存消歧更加复杂,本验证方法支持对非对齐访问产生的内存消歧进行验证;
71.本实施例中,在访存指令commit的时候进行检查器和dut的数据比较,并实时打印信息,验证人员能快速地找到问题所在。
72.实施例2
73.在实施例1的基础上,本实施例提供了一种单核中由store指令引起的内存消歧验证流程,参照如图2所示,具体如下:
74.监测dut中的store指令,在store指令获得物理地址后,单核内存消歧判断器开始查找本核中是否存在满足以下三个条件的load指令;
75.a)load指令的访问范围与store指令的访问范围有重叠;
76.b)load指令已经获得数据;
77.c)load指令在program order中比store指令年轻。
78.若存在满足以上条件的load指令,单核内存消歧判断器执行以下操作:
79.a)比较这些load指令的年龄信息,找出其中最年老的一条;
80.b)将选出的load指令信息存入store指令的commit信息中,load指令信息包括它在指令流中的标记或者program counter信息,该信息即为之后重刷流水线的信息。
81.若不存在满足以上条件的load指令,则单核内存消歧判断器将该store指令commit信息中的重刷流水线信息置无效;
82.监测dut中store指令的commit信息,当store指令commit时,比较器将dut commit信息中的重刷流水线信息与验证的单核内存消歧结果进行比较,若不一致,则报错,报错信息包括是否需要重刷流水线,若需要重刷流水线,从哪条load指令开始重刷。
83.实施例3
84.在实施例2的基础上,本实施例提供了一种单核中由缓存踢出行引起的内存消歧验证流程如下:
85.监测dut中是否有一级缓存行被踢出的情况,若存在,单核内存消歧判断器开始查找本核中是否存在满足条件的两类load指令;
86.第一类load指令如果满足以下三个条件,则该load指令标记需要重刷流水线标志位:
87.a.load指令的物理地址与被踢出缓存行是同一缓存行;
88.b.load指令已经获得数据;
89.c.load指令的数据不是从本核forward获得;
90.第二类load指令如果满足以下两个条件,则该load指令在commit时,可能需要带上重刷流水线信息:
91.a.load指令的物理地址与被踢出缓存行是同一缓存行;
92.b.load指令还没有获得数据;
93.找出符合上述两类条件的所有load指令,查找是否存在第二类load指令比第一类load指令年老的情况;
94.若存在上述情况,则找出第一类load指令中最年老且比第二类load指令年轻的一条load指令,该load指令即为需要重刷流水线的起始位置,该load指令在程序中的位置信息会标记在第二类load指令上;
95.若不存在上述情况,则表示不需要内存消歧;
96.需要内存消歧时,等待dut中第二类load指令的commit信息,当该load指令commit时,比较器比较dut和检查器的重刷流水线信息,若不一致,则报错,报错信息包括是否需要重刷流水线,若需要重刷流水线,从哪条load指令开始重刷。
97.实施例4
98.在实施例1的基础上,本实施例提供了一种多核内存消歧验证流程,参照如图3所示,具体如下:
99.监测多核系统中每个核的store指令,当store指令的数据被其他核可见时,多核内存消歧判断器查找其他核中是否存在满足条件的两类load指令;
100.第一类load指令如果满足以下条件,则该load指令标记需要重刷流水线标志位:
101.d.load指令的物理地址和store指令的物理地址在同一缓存行;
102.e.load指令已经获得数据;
103.f.load指令的数据不是从本核forward获得;
104.第二类load指令如果满足以下条件,则该load指令在commit时,可能需要带上重刷流水线信息:
105.c.load指令的物理地址和store指令的物理地址在同一缓存行;
106.d.load指令还没有获得数据;
107.找出每个核中符合上述两类条件的所有load指令,查找在同一核中是否存在第二类load指令比第一类load指令年老的情况;
108.若存在上述情况,则找出第一类load指令中最年老且比第二类load指令年轻的一条load指令,该load指令即为需要重刷流水线的起始位置,该load指令在程序中的位置信息会标记在第二类load指令上;
109.若不存在上述情况,则表示不需要内存消歧;
110.需要内存消歧时,等待dut中第二类load指令的commit信息,当该load指令commit时,比较dut和检查器的重刷流水线信息,若不一致,则报错,报错信息包括是否需要重刷流水线,若需要重刷流水线,从哪条load指令开始重刷。
111.实施例5
112.在实施例1的基础上,本实施例提供了一种非对齐访问引起的内存消歧验证,验证方法如下:
113.若load指令为非对齐访问,一般处理器会将该load访问拆分成两次对齐的访问,检查器会对将这两次访问处理成两次独立的访问,去进行上述单核和多核的内存消歧检查,区别在于最后标记重刷流水线信息的时候,需要使用load指令的位置信息;
114.若store指令为非对齐访问,一般处理器会将该store访问拆分成两次对齐的写操作,检查器也会将这两次写操作处理成两次独立的写操作,去进行上述单核和多核的内存消歧检查,区别在于最后标记重刷流水线信息的时候,需要标记在store指令commit的信息中。
115.实施例6
116.本实施例提供了一种处理器中内存消歧的验证系统,其结构图如图1所示,包括访存指令监测器,一级缓存监测器,commit信息监测器,单核内存消歧判断器,多核内存消歧判断器,每个核的load指令队列,比较器。下面阐述每个部件的作用。
117.本实施例访存指令监测器,用于监测dut中load指令和store指令的执行信息,其中load指令的执行信息会存入每个核的load指令队列中,store指令的执行信息会同时输送给单核内存消歧判断器和多核内存消歧判断器。
118.本实施例一级缓存监测器,用于监测一级缓存是否有踢出缓存行,将此信息输送给单核内存消歧判断器。
119.本实施例commit信息监测器,用于监测dut中load/store指令的commit信息,包括commit信息中重刷流水线信息,这是dut内存消歧的结果,用于与检查器的内存消歧结果进行比较。
120.本实施例单核内存消歧判断器,用于根据输入的store指令执行信息和一级缓存
踢出行信息,去查找对应核的load指令队列,判断是否符合内存消歧条件,最后输出单核内存消歧结果。
121.本实施例多核内存消歧判断器,用于根据输入的store指令执行信息,去查找其他核的load指令队列,判断是否符合内存消歧条件,最后输出多核内存消歧结果。
122.本实施例每个核的load指令队列,用于将访存指令监测器输入的load指令执行信息存入对应核的load指令队列,这些信息包括load指令的访问地址,是否已经获得数据,数据来源,以及是否是非对齐访问等。
123.本实施例比较器,用于比较dut的内存消歧结果和检查器的内存消歧结果。
124.综上,本发明针对内存消歧的逻辑进行验证,同时支持单核和多核的内存消歧。内存消歧的最终结果是是否需要重刷流水线,以及从哪条指令开始重刷,本验证方法对于这两点能做到精确验证,若重刷流水线信息与dut不一致,会立即报错误信息,能帮助验证人员快速有效地调试代码。
125.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1