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

L2中fence指令的实现方法及系统与流程

2022-09-04 05:16:19 来源:中国专利 TAG:

l2中fence指令的实现方法及系统
技术领域
1.本发明涉及cpu技术领域,具体涉及一种l2中fence指令的实现方法及系统。


背景技术:

2.在cpu系统中为确保执行某条指令前,之前指令的执行结果都可见,常常需要通过fence指令来实现,fence指令通俗的来说就是确保fence之后的指令一定要等到fence指令及fence指令之前的指令都已经在l2中执行完了,后面的指令才能继续执行,当然简单的做法就是出现fence指令后,就阻止新的指令进入l2,这样严重的影响到cpu的整体性能。
3.因此本文提供一种l2中fence指令的实现方法及系统,不光不会阻止新的指令进入l2,而且对应reload指令还可以上pipeline,将接收来自core请求的queue能释放出来接收更多来自core的reload请求。


技术实现要素:

4.针对现有技术的不足,本发明公开了一种l2中fence指令的实现方法及系统,用于解决上述问题。
5.本发明通过以下技术方案予以实现:
6.第一方面,本发明提供了一种l2中fence指令的实现方法,包括以下步骤:
7.s1初始化,将fence请求分配到cwq中,进而参与并赢得仲裁;
8.s2通过allocate orq,给当前orq/wrq/cpq的valid信息进行snapshot;
9.s3在给orq/wrq/ocsq snapshot的valid都有从valid变为unvalid过程后,回sync_done给lsu。
10.更进一步的,所述方法中,l2进行工作时包括以下步骤:
11.t1接收来自core和外部extend的请求,同时收来自crq cwq epq orq efq cpq的请求,并选出其中的一个请求进入pipeline;
12.t2根据请求的类型和当前l2中tag信息及mesi状态信息,生成相关分配方案;
13.t3通过l2向下游memory发出读请求或写请求,并由下游memory返回reload data回填到efq;
14.t4通过efq上l2de pipeline,将reload回来的数据写入l2$中,同时将数据return给请求的core。
15.更进一步的,所述方法中,l2接收来自core和外部extend的请求,包括接收来自core的read请求,放在crq中;接收来自core的write请求,放在cwq中;接收来自外部的probe请求,放在epq中。
16.更进一步的,所述方法中,在pipeline中,根据请求的类型,和当前l2中tag信息及mesi状态信息确定:是否可以直接写入l2;是否可以直接return data给请求方;是否需要向下游memory reload数据或权限;是否需要产生evict;是否需要向下游memory write数据;是否需要probe core;如果判断需要向下游memory reload数据或权限,则分配一个
orq;如果判断需要向下游memory write数据,则分配一个wrq;如果判断需要probe core,则分配一个cpq,l2向core发出probe请求,都是通过cpq来完成。
17.更进一步的,所述方法中,通过l2向下游memory发出读请求,则通过orq发出,向下游memory读取到数据并拿到该数据对应的权限;通过l2向下游memory发出写请求,则通过wrq,将数据从l2中写到下一级memory中。
18.第二方面,本发明提供一种l2中fence指令的实现系统,所述系统用于实现第一方面所述的l2中fence指令的实现方法,包括probe、eviction、tag ram、data ram、crq、cwq、epq、orq、wrq、efq和cpq。
19.更进一步的,所述probe用于窥视和监听,将core中dirty的数据probe下来或者为了拿到e权限,把core中的mesi状态信息进行修改;
20.所述eviction,用于保持cache中保存的数据相对新的数据,在cache中需要把数据替换出去时产生;
21.所述tag ram用于记录cacheline的addr及该cacheline在l2和所有的l2 core中的mesi状态信息;
22.所述data ram用于记录cacheline的数据信息;
23.所述crq用于接收来自core的read请求存放的队列;
24.所述cwq用于接收来自core的write请求的队列;
25.所述epq用于接收来自外部的probe请求的队列;
26.所述orq,用于在一个在l2中的请求,上l2 pipeline后,发现本cache中该cacheline不存在或该cacheline的在本cache中的访问权限不够时,则需要申请一个orq,通过orq向下一级memory reload数据并拿到相应的权限;
27.所述wrq,用于在l2需要把某条cacheline给写到下一级memory,则申请要给wrq,通过wrq将数据写入下一级memory;
28.所述efq用于在由reload数据回填l2的时候,先把数据回填写入efq中,然后通过efq上l2的pipeline将数据写入l2$同时将数据return给请求模块;
29.所述cpq用于将probe相应的core,probe请求则先存放在cpq中,然后通过cpq向对应的core发出probe请求。
30.本发明的有益效果为:
31.本发明不会过早地阻止core向l2发出请求;不会过早的阻止新的请求上pipeline;新的指令上pipeline,释放出queue资源,可接收更多来自core的reload请求。具有很强的实用性。
附图说明
32.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
33.图1是本发明实施例l2的基本框图;
34.图2是本发明实施例不支持snapshot功能,实现fence功能的流程图;
35.图3是本发明实施例支持snapshot功能,实现fence功能的流程图。
具体实施方式
36.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.实施例1
38.本实施例提供一种l2中fence指令的实现方法,包括以下步骤:
39.s1初始化,将fence请求分配到cwq中,进而参与并赢得仲裁;
40.s2通过allocate orq,给当前orq/wrq/cpq的valid信息进行snapshot;
41.s3在给orq/wrq/ocsq snapshot的valid都有从valid变为unvalid过程后,回sync_done给lsu。
42.本实施例支持snapshot功能,fence指令进入pipeline后,不阻止crq/cwq/epq有新的请求上pipeline,新的指令上pipeline,释放出queue资源,可接收更多来自core的reload请求。
43.本实施例不会过早的阻止新的请求上pipeline,新的指令上pipeline,释放出queue资源,可接收更多来自core的reload请求。
44.实施例2
45.在其他层面,本实施例提供一种l2工作方式,其框图如图1所示,其基本功能描述如下:
46.接收来自core和外部extend的请求,包括
47.接收来自core的read请求,放在crq(core read queue)中;
48.接收来自core的write请求,放在cwq(core write queue)中;
49.接收来自外部的probe请求,放在epq(extend probe queue)中;
50.仲裁模块接收来自crq cwq epq orq efq cpq的请求,选出其中的一个请求进入pipeline;
51.在pipeline中,根据请求的类型,和当前l2中tag信息及mesi状态信息确定:
52.是否可以直接写入l2;是否可以直接return data给请求方;是否需要向下游memory reload数据或权限;是否需要产生evict;是否需要向下游memory write数据;是否需要probe core等。
53.本实施例中,如果判断需要向下游memory reload数据或权限,则分配一个orq(outstanding request queue)。
54.本实施例中,如果判断需要向下游memory write数据,则分配一个wrq(write requet queue)。
55.本实施例中,如果判断需要probe core,则分配一个cpq(core probe queue),l2向core发出probe请求,都是通过cpq(core probe queue)来完成。
56.l2向下游memory发出请求:
57.读请求,则通过orq(outstanding request queue)发出,向下游memory读取到数
据并拿到该数据对应的权限。
58.写请求,则通过wrq(write requet queue),将数据从l2中写到下一级memory中。
59.l下游memory返回reload data回填到efq(extend fill queue)
60.再由efq(extend fill queue)上l2de pipeline,讲reload回来的数据写入l2$中,同时将数据return请求的core。
61.实施例3
62.本实施例提供一种memory系统维护数据一致性的协议,用来表明对该cacheline当前core具有怎么的权限,具体如下:
63.m:modify,表明该core对该cacheline进行了修改,该cacheline只在本cache中存在,如果其它cache需要访问该cachelin,则需要通过probe的方式才能拿到最新dirty数据,并拿到相应的权限。
64.e:exclusive表明该cacheline只在本cache中存在,如果其它cache需要访问该cacheline,则需要通过probe的方式拿到相应的数据和权限。
65.s:shared表明该cacheline不仅在本cache中存在,可能还在其它的cache中存在,如果其它cache需要访问该cacheline,并拿到e/m态,则需要通过probe的方式拿到相应的数据和权限。
66.i:invalid表明该cacheline不在本cache中。
67.实施例4
68.在具体实施层面,参照图2所示,本实施例提供一种不支持snapshot功能,实现fence功能的流程,具体如下:
69.fence请求分配到cwq(core write queue)中;
70.core write queue将该fence请求参与并赢得仲裁,上pipeline同时阻止crq/cwq/epq的请求再次上pipeline;
71.直到orq/wrq/cpq都empty后,回sync_done给lsu,同时允许crq/cwq/esq的请求再次上pipeline。
72.参照图3所示,本实施例同时提供一种支持snapshot功能,实现fence功能的流程,具体如下:
73.fence请求分配到core write queue中;
74.core write queue将该fence请求参与并赢得仲裁;
75.allocate orq,给当前orq/wrq/cpq的valid信息进行snapshot;
76.直到刚刚给orq/wrq/ocsq snapshot的valid都有从valid变为unvalid过程后,回sync_done给lsu。
77.本实施例中,从上面流程可以看出,支持snapshot功能,实现fence功能有如下优势:fence指令进入pipeline后,也不会阻止crq/cwq/epq有新的请求上pipeline,这样可以做到不会过早的阻止新的请求上pipeline,新的指令上pipeline,释放出queue资源,可接收更多来自core的reload请求。
78.实施例5
79.本实施例提供一种l2中fence指令的实现系统,具体包括:
80.probe:窥视监听,在多核环境下为维护数据的一致性,需要通过probe的方式,将
core中dirty的数据probe下来或者为了拿到e权限,把core中的mesi状态信息进行修改。
81.eviction:由于cache的容量有限,为了保持cache中保存的数据相对新的数据,当cache中需要把数据替换出去时,就会产生eviction。
82.tag ram:记录cacheline的addr及该cacheline在l2和所有的l2 core中的mesi状态信息。
83.data ram:记录cacheline的数据信息。
84.crq(core read queue):接收来自core的read请求存放的队列。
85.cwq(core write queue):接收来自core的write请求的队列。
86.epq(extend probe queue):接收来自外部的probe请求的队列。
87.orq(outstanding request queue):当一个在l2中的请求,上l2pipeline后,发现本cache中该cacheline不存在或该cacheline的在本cache中的访问权限不够时,则需要申请一个orq,通过orq向下一级memory reload数据并拿到相应的权限。
88.wrq(write requet queue):当l2需要把某条cacheline给写到下一级memory,则申请要给wrq,通过wrq将数据写入下一级memory。
89.efq(extend fill queue):当由reload数据回填l2的时候,先把数据回填写入efq中,然后通过efq上l2的pipeline将数据写入l2$同时将数据return给请求模块。
90.cpq(core probe queue):由于一个l2挂了多个core,可能模块core所需要的最新数据在其它core中或某个core需要拿到e/m权限的时候,此时需要probe相应的core,probe请求则先存放在cpq中,然后通过cpq向对应的core发出probe请求。
91.综上,本发明不会过早地阻止core向l2发出请求;不会过早的阻止新的请求上pipeline;新的指令上pipeline,释放出queue资源,可接收更多来自core的reload请求。具有很强的实用性。
92.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

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

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

相关文献