一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

store_buffermerge的实现方法及系统与流程

2022-03-23 03:58:11 来源:中国专利 TAG:

store_buffer merge的实现方法及系统
技术领域
1.本发明涉及cpu技术领域,具体涉及一种store_buffer merge的实现方法及系统。


背景技术:

2.store指令retire后,数据会保存在store_buffer中,根据数据的相关性,前后的几笔store指令的数据往往会是同一cacheline内部,如果每笔store指令都单独的去上pipeline,则占据pipeline的数量会很多,如果对store数据提供一个时间窗口给后面的同一cacheline的store指令来merge,这样多比store指令就可以merge在一起,这样就可以做到多个store指令在store_buffer中上pipeline的次数大大降低,从而充分利用pipeline资源,把更多的pipeline资源给其他请求使用。从而提供cpu的整体性能。
3.如果提供merge的时间窗口太长,可能导致store_buffer的entry被占满,而导致已经retire的数据不能正常的从store queue中保存到store_buffer中,从导致store queue的entry不能被deallocate,这会对cpu的整体性能有一定的影响,为了解决该问题,提出两种办法:(1)在store buffer entry项快用完的时候强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge。(2)一个store buffer entry项被分配后,在一定的cycle数后,强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge。


技术实现要素:

4.针对现有技术的不足,本发明公开了一种store_buffer merge的实现方法及系统,用于解决上述问题。
5.本发明通过以下技术方案予以实现:
6.第一方面,本发明提供了一种store_buffer merge的实现方法,包括以下步骤:
7.s1初始化,store指令从store queue进入store buffer后,判断store buffer entry项的使用情况,并做相应处理;
8.s2store_buffer发出read请求,上pipeline,判断在d_cache中命中m/e态或s态,并做相应处理;
9.s3miss queue entry项向l2发出reload请求,l2返回reload e态数据的同时唤醒在store buffer中的那边miss命中s态的store_buffer entry项;
10.s4reload数据回填refill_buffer,上pipeline,在store_buffer中检测是否有同一cacheline的数据需要store,并做相应处理。
11.更进一步的,所述方法中,如果store buffer entry项快用完,则强制要求store指令尽快进入pipeline流水,将store buffer entry空出来。
12.更进一步的,所述方法中,如果store buffer entry项还有2个以上的entry项没有还处于empty,则给新进的entry延时一段时间后再去上pipeline,后面如果出现相同地址的store指令和该entry则进行merge。
13.更进一步的,所述方法中,如果在d_cache中命中m/e态,则store_buffer接着发出write的请求,将数据写入d_cache中,并将cacheline的状态修改为e态。
14.更进一步的,所述方法中,如果在d_cache中没有命中,或命中的时s态,则向miss queue中请求分配一个entry项。
15.更进一步的,所述方法中,l2返回reload e态数据的同时唤醒在store buffer中的那边miss命中s态的store_buffer entry项,且给refill上pipeline几个时钟周期的merge窗口后,进行唤醒store_buffer entry项并上pipeline。
16.更进一步的,所述方法中,reload数据回填refill_buffer后,refill立马上pipeline,此时pipeline在store_buffer中检测是否有同一cacheline的数据需要store,如果存在则会将store的数据一同merge进来一同写入d_cache中,同时deallocation掉store_buffer和refill_buffer entry项。
17.第二方面,本发明提供了一种store_buffer merge的实现系统,所述系统用于实现第一方面所述的store_buffer merge的实现方法,包括store_buffer模块、pipeline模块、miss queue模块和refill模块。
18.更进一步的,所述store_buffer模块,用于在store queue完成sta和std操作后,得到毕业模块的确认该store指令的store数据可以往memory中写时,就会将该store的数据写入store_buffer中;
19.store_buffer则根据在d_cache的命中状态,确定是否直接将store的数据写入d_cache还是请求分配missq entry项,然后等l2返回reload数据,由refill上pipeline,和refill数据一同merge写入d_cache中;
20.所述pipeline模块,用于指令上pipeline之后的数据访问,如果miss新missq中请求分配一个entry项,refill上pipeline,如果store_buffer中有和该地址一致的数据需要store,则两数据进行merge后一同写入d_cache中;
21.所述miss queue模块,用于完成d_cache miss后向l2发出reload的请求;
22.所述refill模块,用于接收l2返回的数据后,refill_buffer上pipeline。
23.本发明的有益效果为:
24.本发明对store数据提供一个时间窗口给后面的同一cacheline的store指令来merge,这样多比store指令就可以merge在一起,这样就可以做到多个store指令在store_buffer中上pipeline的次数大大降低,从而充分利用pipeline资源,把更多的pipeline资源给其他请求使用。从而提供cpu的整体性能。
25.本发明在store buffer entry项快用完的时候强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge;一个store buffer entry项被分配后,在一定的cycle数后,强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge,进而提供了cpu的整体性能。
附图说明
26.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他的附图。
27.图1是一种store_buffer merge的实现系统的基本框图;
28.图2是本发明实施例store指令进入store buffer后的流程图。
具体实施方式
29.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
30.实施例1
31.本实施例提供了一种store_buffer merge的实现方法,包括以下步骤:
32.s1初始化,store指令从store queue进入store buffer后,判断store buffer entry项的使用情况,并做相应处理;
33.s2store_buffer发出read请求,上pipeline,判断在d_cache中命中m/e态或s态,并做相应处理;
34.s3miss queue entry项向l2发出reload请求,l2返回reload e态数据的同时唤醒在store buffer中的那边miss命中s态的store_buffer entry项;
35.s4reload数据回填refill_buffer,上pipeline,在store_buffer中检测是否有同一cacheline的数据需要store,并做相应处理。
36.本实施例对store数据提供一个时间窗口给后面的同一cacheline的store指令来merge,这样多比store指令就可以merge在一起,这样就可以做到多个store指令在store_buffer中上pipeline的次数大大降低。
37.本实施例在store buffer entry项快用完的时候强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge。
38.本实施例一个store buffer entry项被分配后,在一定的cycle数后,强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge。
39.实施例2
40.在具体实施层面,参照图2所示,本实施例提供一种store指令进入store buffer后的流程,具体如下:
41.本实施例store指令从store queue进入store buffer后;
42.如果store buffer entry项快用完,则强制要求store指令尽快进入pipeline流水,将store buffer entry空出来,不要堵住流水
43.如果store buffer entry项还有2个以上的entry项没有还处于empty,则给新进的entry延时一段时间后再去上pipeline,给后面如果出现相同地址的store指令和该entry进行merge,从而减少store指令上pipeline的次数
44.本实施例store_buffer发出read请求,上pipeline后;
45.如果在d_cache中命中m/e态,则store_buffer接着发出write的请求,将数据写入d_cache中,并将cacheline的状态修改为e态
46.如果在d_cache中没有命中,或命中的时s态,则向miss queue中请求分配一个
entry项
47.本实施例miss queue entry项向l2发出reload请求;
48.本实施例l2返回reload e态数据的同时唤醒在store buffer中的那边miss命中s态的store_buffer entry项,但是被唤醒的store_buffer entry项并不立马上pipeline,而是给refill上pipeline几个时钟周期的merge窗口,这样可以减少store_buffer再次上pipeline。
49.本实施例reload数据回填refill_buffer后,refill立马就上pipeline,此时pipeline在store_buffer中检测是否有同一cacheline的数据需要store,如果存在则会将store的数据一同merge进来一同写入d_cache中,同时deallocation掉store_buffer和refill_buffer entry项。
50.如果提供merge的时间窗口太长,可能导致store_buffer的entry被占满,而导致已经retire的数据不能正常的从store queue中保存到store_buffer中,从导致store queue的entry不能被deallocate,这会对cpu的整体性能有一定的影响。
51.因此本实施例在store buffer entry项快用完的时候强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge。
52.本实施例一个store buffer entry项被分配后,在一定的cycle数后,强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge。
53.实施例3
54.参照图1所示,本实施例提供一种store_buffer merge的实现系统,包括store_buffer模块、pipeline模块、miss queue模块和refill模块。
55.本实施例store_buffer模块,用于在store queue完成sta和std操作后,得到毕业模块的确认该store指令的store数据可以往memory中写时,就会将该store的数据写入store_buffer中;
56.store_buffer则根据在d_cache的命中状态,确定是否直接将store的数据写入d_cache还是请求分配missq entry项,然后等l2返回reload数据,由refill上pipeline,和refill数据一同merge写入d_cache中;
57.本实施例pipeline模块,用于指令上pipeline之后的数据访问,如果miss新missq中请求分配一个entry项,refill上pipeline,如果store_buffer中有和该地址一致的数据需要store,则两数据进行merge后一同写入d_cache中;
58.本实施例miss queue模块,用于完成d_cache miss后向l2发出reload的请求;
59.本实施例refill模块,用于接收l2返回的数据后,refill_buffer上pipeline。
60.综上,本发明对store数据提供一个时间窗口给后面的同一cacheline的store指令来merge,这样多比store指令就可以merge在一起,这样就可以做到多个store指令在store_buffer中上pipeline的次数大大降低,从而充分利用pipeline资源,把更多的pipeline资源给其他请求使用。从而提供cpu的整体性能。
61.本发明在store buffer entry项快用完的时候强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge;一个store buffer entry项被分配后,在一定的cycle数后,强制地让store buffer的entry项上pipeline,而不再等待更年轻的store来merge,进而提供了cpu的整体性能。
62.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献