一种处理器核外缓存模型及模拟方法与流程
未命名
08-26
阅读:111
评论:0
1.本技术涉及处理器技术领域,尤其涉及一种处理器核外缓存模型及模拟方法。
背景技术:
2.在处理器系统设计过程中,往往会对某一级或某几级缓存进行建模,以减少模块设计过程之间的耦合,提高各子系统的设计并行度。但不同级的缓存往往需要单独进行开发,如在验证多级缓存时,需要一对一地开发多个模型,不仅需要设计人员花费大量时间和精力,还容易导致缓存模型不一致的问题,多个对应不同级的缓存模型也增加了对缓存模型的移植和维护难度。
技术实现要素:
3.本技术提供了一种处理器核外缓存模型及模拟方法,其中,该缓存模型可通用于多种缓存的应用场景,减少了对多个缓存模型的维护和移植难度。
4.第一方面,本技术实施例提供了一种处理器核外缓存模型,该模型包括:请求接口模块、读取处理模块、写入处理模块、命中检测模块、数据缓存模块和总线请求处理模块;
5.请求接口模块用于根据请求接口时序接收读取请求和写入请求,将读取请求转换为读取事件发给读取处理模块,将写入请求转换为写入事件发给写入处理模块;
6.请求接口模块还用于根据模式配置信息修改请求接口时序;
7.数据缓存模块用于将读取事件对应的读取数据发送给读取处理模块;
8.数据缓存模块还用于根据模式配置信息修改数据缓存模块的容量;
9.读取处理模块用于通过命中检测模块获取读取事件的读取命中结果,并基于模式配置信息和读取命中结果获取读取数据;
10.写入处理模块用于通过命中检测模块获取写入事件的写入命中结果,并基于模式配置信息和写入命中结果,根据写入事件或写入数据更新数据缓存模块;
11.总线请求处理模块用于基于总线接口时序获取读取数据并发送至读取处理模块,基于总线接口时序获取写入数据并发送至写入处理模块;
12.总线请求处理模块还用于根据模式配置信息修改总线接口时序。
13.进一步的,该模型还包括读取队列模块和写入队列模块;读取队列模块用于接收读取事件,写入队列模块用于接收写入事件;
14.读取队列模块还用于对各读取事件与写入队列模块中的各写入事件做冲突检测,将无冲突的读取事件发送至读取处理模块;写入队列模块还用于对各写入事件与读取队列模块中的各读取事件做冲突检测,将无冲突的写入事件发送至写入处理模块;
15.读取处理模块还用于在获取读取数据后,将其发送给读取队列模块。
16.上述实施例保证了发送给读取/写入处理模块的各个请求事件是无冲突、无依赖的,避免了读取/写入处理模块因地址冲突等原因需要排队处理接收到的各请求事件的情况,从而避免了因请求事件冲突、排队处理造成的延时。
17.进一步的,命中检测模块和总线请求处理模块还用于在模式配置信息为无缓存信息时进入屏蔽状态;读取处理模块用于在模式配置信息为无缓存信息时,获取数据缓存模块中的读取数据;写入处理模块用于在模式配置信息为无缓存信息时,根据写入事件更新数据缓存模块。
18.上述实施例令本技术的缓存模型实现了无缓存模式下对读取请求和写入请求的处理。
19.进一步的,读取处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,若读取事件为命中,则获取数据缓存模块中的读取数据;若读取事件为未命中,则通过总线请求处理模块获取读取数据;写入处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,若写入事件为命中,则根据写入事件更新数据缓存模块;若写入事件为未命中,则通过总线请求处理模块获取写入数据,并根据写入数据更新数据缓存模块。
20.上述实施例令本技术的缓存模型实现了l2和l3模式下对读取请求和写入请求的处理。
21.进一步的,该模型还包括访存记录模块;
22.读取处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,在获取读取数据后根据读取数据更新访存记录模块;
23.写入处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,在根据写入事件或写入数据更新数据缓存模块后,根据写入事件或写入数据更新访存记录模块。
24.上述实施例通过设置访存记录模块,通过其中记录的访存记录数据可以读取处理模块和写入处理模块快速准确地选择出最优的替换数据。
25.进一步的,该模型还包括替换处理模块;
26.读取处理模块或写入处理模块还用于在读取事件或写入事件未命中时,通过访存记录模块得到替换数据并发送给替换处理模块;替换处理模块用于将替换数据写出该模型。
27.上述实施例替换处理模块的设置实现了在请求未命中、获取新数据时的数据替换操作,避免了未被分配的缓存行被用完时,未命中后的缓存处理流程出错,同时通过访存记录模块确定替换数据保证了替换数据选择的最优。
28.进一步的,替换处理模块还用于根据替换数据生成替换写请求并发送给总线请求处理模块,并在接收到总线应答时写出替换数据;总线请求处理模块还用于将替换写请求转换为总线写请求并发送给总线;以及将接收到的总线应答发送给替换处理模块。
29.上述实施例在产生替换数据后,通过总线发出总线写请求,在确定该替换数据可以被写出后产生总线应答,避免了访存记录模块产生的替换数据不合适的情况。
30.进一步的,写入处理模块还用于在根据写入数据更新数据缓存模块后,根据写入数据更新命中检测模块;读取处理模块还用于在通过总线请求处理模块获取读取数据后,根据读取数据更新数据缓存模块和命中检测模块。
31.上述实施例通过在从总线获取数据后,对命中检测模块的更新,保证了命中检测模块和数据缓存模块的实时对应,确保了后续相同请求的命中。
32.进一步的,该模型还包括窥探处理模块和窥探队列模块;
33.当模式配置信息为二级缓存信息或三级缓存信息时:总线请求处理模块还用于接
收窥探请求,并将窥探请求转换为窥探事件发送给窥探队列模块;
34.窥探队列模块用于将各窥探事件与各读取事件、各写入事件进行冲突检测,得到无冲突的窥探事件并将其发送给窥探处理模块;窥探处理模块用于通过命中检测模块获取窥探事件的命中结果,根据命中结果生成窥探应答并发送至总线请求处理模块。
35.上述实施例考虑到了多核处理器中,可能接收到的来自其他缓存的窥探请求,实现了在二级缓存和三级缓存的模式下对窥探请求的处理,令本技术能够应用于多核、多缓存的应用场景。
36.进一步的,窥探处理模块还用于在窥探事件为数据窥探事件且窥探事件命中时,获取数据缓存模块中窥探事件对应的窥探数据;窥探处理模块生成的窥探应答中包括窥探数据。
37.上述实施例在窥探请求是需要数据的请求时,若其命中,则将其请求的数据一同发送给窥探请求方,实现了对数据请求类型的窥探请求的处理。
38.进一步的,读取处理模块、写入处理模块、命中检测模块、数据缓存模块、总线请求处理模块、读取队列模块、写入队列模块、访存记录模块、替换处理模块、窥探队列模块、窥探处理模块之间均采用事件信息的形式进行数据传输。
39.上述实施例令除了请求接口模块和总线请求处理模块这两个缓存模型用来对接外部上下层模块的结构,其他模块都是基于事件信息的形式进行数据的传输,使得本技术的缓存模型在不同模式下无需修改内部模块的数据处理逻辑,从而有利于降低模型复杂度。
40.进一步的,数据缓存模块包括缓存索引深度值、缓存行参数和缓存相关联度;缓存行参数和缓存索引深度、缓存组相关联度共同决定数据缓存模块的容量。
41.上述实施例通过模型中3个可调节的参数的设置,令本技术的模型可以支持不同的缓存行大小配置、不同的缓存组相联配置,增加了本技术的可应用场景、提高了适用性。
42.第二方面,本技术实施例提供了一种处理器核外缓存模拟方法,该方法包括:
43.步骤s1,接收模式配置信息,并根据模式配置信息确定缓存数据的大小、请求接口时序和总线接口时序;根据请求接口时序接收读取请求和写入请求;
44.步骤s2,将读取请求转换为读取事件,将写入请求转换为写入事件;
45.步骤s3,基于模式配置信息和总线接口时序处理读取事件和写入事件。
46.上述实施例提供的一种处理器核外缓存模拟方法,通过模式配置信息确定缓存数据的大小、请求接口时序和总线接口时序,实现了多种应用场景下对不同数据的接收、处理;其次,将接收到的读取请求和写入请求均转换为事件进行处理,实现了在请求的信息时序不同时,本技术的模拟方法中对事件的处理逻辑无需发生改变,且事件信息的传递本身不耗时,使得该方法可模拟的延时范围更广;本技术提供的方法可以通过更改模式配置信息模拟多种应用场景下的缓存功能,无需针对每一种缓存单独开发一套模拟方法,大大减少了设计人员花费的精力与时间。
47.进一步的,上述基于模式配置信息和总线接口时序处理读取事件和写入事件,包括:
48.在模式配置信息为无缓存信息时,根据读取事件获取缓存数据中的读取数据;根据写入事件更新缓存数据。
49.上述实施例在无缓存信息时,直接执行读取/写入事件,无需对其进行命中检测,实现了对无缓存模式下的缓存功能的模拟。
50.进一步的,上述基于模式配置信息和总线接口时序处理读取事件和写入事件,包括:
51.在模式配置信息为二级缓存信息或三级缓存信息时:
52.根据命中地址数据检测读取事件是否命中;若命中,则获取缓存数据中的读取数据;若未命中,则基于总线接口时序获取读取数据;
53.根据命中地址数据检测写入事件是否命中;
54.若命中,则根据写入事件更新缓存数据;若未命中,则基于总线接口时序获取写入数据,并根据写入数据更新缓存数据。
55.上述实施例在二级/三级缓存信息时,在对读取/写入事件进行命中检测后,基于命中检测的结果执行读取/写入事件,实现了对二级/三级缓存模式下的缓存功能的模拟。
56.进一步的,该方法还包括:
57.在执行完步骤s2后,将各读取事件与各写入事件进行冲突检测,得到无冲突的读取事件和无冲突的写入事件;基于无冲突的读取事件和无冲突的写入事件执行步骤s3。
58.上述实施例保证了执行命中检测的请求事件是无冲突、无依赖的,避免了因事件之间地址冲突等原因需要排队处理接收到的各请求事件的情况,从而避免了因冲突、排队造成的延时。
59.进一步的,该方法还包括:
60.在获取读取数据后,根据读取数据更新访存记录数据;
61.在根据写入事件或写入数据更新缓存数据后,根据写入事件或写入数据更新访存记录数据。
62.上述实施例通过访存记录数据可以在缓存未命中时快速准确地选择出最优的替换数据。
63.进一步的,该方法还包括:
64.在读取事件或写入事件未命中时,根据访存记录数据得到替换数据,并将替换数据写出。
65.上述实施例替换处理模块的设置实现了在请求未命中、获取新数据时的数据替换操作,避免了未被分配的缓存行被用完时,未命中后的缓存处理流程出错,同时根据访存记录数据确定替换数据保证了替换数据选择的最优。
66.进一步的,该方法还包括:
67.根据替换数据生成替换写请求,将替换写请求转换为总线写请求;
68.在接收到总线应答后,将替换数据写出处理器核外缓存模型。
69.上述实施例在产生替换数据后,发出总线写请求,在确定该替换数据可以被写出后产生总线应答,避免了根据访存记录数据产生的替换数据不合适的情况。
70.进一步的,该方法还包括:
71.在根据写入数据更新缓存数据后,根据写入数据更新命中地址数据;在基于总线接口时序获取读取事件对应的读取数据后,根据读取数据更新缓存数据和命中地址数据。
72.上述实施例通过在基于总线接口时序获取数据后,对命中检测模块的更新,保证
了命中地址数据和缓存数据的实时对应,确保了后续相同请求的命中。
73.进一步的,该方法还包括:
74.在模式配置信息为二级缓存信息或三级缓存信息时,接收窥探请求;将窥探请求转换为窥探事件,将各窥探事件与各读取事件、各写入事件进行冲突检测,得到无冲突的窥探事件;
75.根据命中地址数据检测无冲突的窥探事件是否命中;
76.根据窥探事件的命中结果生成窥探应答。
77.上述实施例考虑到了可能接收到来自其他缓存的窥探请求的情况,实现了在二级缓存和三级缓存的模式下对窥探请求的处理,令该方法能够模拟多核、多缓存的应用场景。
78.进一步的,该方法还包括:若窥探事件为数据窥探事件,则在窥探事件命中后,获取缓存数据中窥探事件对应的窥探数据,并根据窥探数据和命中结果生成窥探应答。
79.上述实施例在窥探请求是需要数据的请求时,若其命中,则将其请求的数据一同发送给窥探请求方,实现了对数据请求类型的窥探请求的处理。
80.进一步的,该方法还包括:
81.通过调节缓存行参数、缓存索引深度和缓存组相关联度的大小来控制缓存数据的大小。
82.上述实施例通过调节3个参数,令该模拟方法可以模拟不同的缓存行大小配置、不同的缓存组相联配置下的缓存功能,提高了本技术的适用性。
83.综上,与现有技术相比,本技术实施例提供的技术方案带来的有益效果至少包括:
84.本技术实施例提供的一种处理器核外缓存模型,通过请求接口模块接收读取请求和写入请求,通过读取处理模块、写入处理模块、命中检测模块、数据缓存模块和总线请求处理模块实现对读取请求和写入请求的处理,从而实现了缓存对处理器请求的处理功能。
85.其中,令请求接口模块根据模式配置信息修改接口时序、数据缓存模块根据模式配置信息修改容量、总线请求处理模块根据模式配置信息修改总线接口时序,即在更换应用场景、更换模式时,仅需通过模式配置信息修改便可实现与不同的上下级模块连接和数据传输,以及数据缓存模块容量的变化,从而使得本技术的模型可以作为任意级的缓存接入处理器中。
86.同时本技术通过请求接口模块将接收到的请求均转换为事件再向后传递,即在模型的应用场景不同、接收到的请求信息不同时,模型内部仍为事件传递逻辑,无需因上级模块的变化而更改模型内部各模块之间的数据处理逻辑;其次,通过本身不耗时的事件进行传递,可以控制的延时范围更广,有助于对处理器系统的快速设计与开发。
87.本技术可通用于多种缓存的应用场景,解决了对不同缓存一对一开发导致的花费大量人力与时间、模型不一致问题,减少了对多个缓存模型的维护和移植难度。
附图说明
88.图1为本技术一个实施例提供的一种处理器核外缓存模型的结构图。
89.图2为本技术又一个实施例提供的一种处理器核外缓存模型的结构图。
90.图3为本技术一个实施例提供的无缓存信息下一种处理器核外缓存模型的结构图。
91.图4为本技术一个实施例提供的无缓存信息下缓存模型中执行读取请求的流程图。
92.图5为本技术一个实施例提供的无缓存信息下缓存模型中执行写入请求的流程图。
93.图6为本技术一个实施例提供的二级/三级缓存信息下一种处理器核外缓存模型的结构图。
94.图7为本技术一个实施例提供的二级/三级缓存信息下缓存模型中执行读取请求的流程图。
95.图8为本技术一个实施例提供的二级/三级缓存信息下缓存模型中执行写入请求的流程图。
96.图9为本技术一个实施例提供的二级/三级缓存信息下缓存模型中执行窥探请求的流程图。
97.图10为本技术一个实施例提供的一种处理器核外缓存模拟方法的流程图。
98.图11为本技术一个实施例提供的无缓存模式下模拟读取请求处理步骤的流程图。
99.图12为本技术一个实施例提供的无缓存模式下模拟写入请求处理步骤的流程图。
100.图13为本技术一个实施例提供的二级/三级缓存模式下模拟处理读取请求的流程图。
101.图14为本技术一个实施例提供的二级/三级缓存模式下模拟处理写入请求的流程图。
102.图15为本技术一个实施例提供的二级/三级缓存模式下模拟处理窥探请求的流程图。
103.图16为本技术一个实施例提供的无缓存信息下带有各模块间数据传输流向的一种处理器核外缓存模型的结构图。
104.图17为本技术一个实施例提供的二级/三级缓存信息下带有各模块间数据传输流向的一种处理器核外缓存模型的结构图。
具体实施方式
105.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
106.请参见图1,本技术实施例提供了一种处理器核外缓存模型,该模型包括:请求接口模块、读取处理模块、写入处理模块、命中检测模块、数据缓存模块和总线请求处理模块。
107.请求接口模块用于根据请求接口时序接收读取请求和写入请求,将读取请求转换为读取事件发给读取处理模块,将写入请求转换为写入事件发给写入处理模块。
108.请求接口模块还用于根据模式配置信息修改请求接口时序。
109.数据缓存模块用于将读取事件对应的读取数据发送给读取处理模块。
110.数据缓存模块还用于根据模式配置信息修改数据缓存模块的容量。
111.读取处理模块用于通过命中检测模块获取读取事件的读取命中结果,并基于模式
配置信息和读取命中结果获取读取数据。
112.写入处理模块用于通过命中检测模块获取写入事件的写入命中结果,并基于模式配置信息和写入命中结果,根据写入事件或写入数据更新数据缓存模块。
113.总线请求处理模块用于基于总线接口时序获取读取数据并发送至读取处理模块,基于总线接口时序获取写入数据并发送至写入处理模块。
114.总线请求处理模块还用于根据模式配置信息修改总线接口时序。
115.请求接口模块即load/store interface unit,请求接口模块会将core(处理器核)接口上的load(读取)、store(写入)等请求的时序信息转化为事件(event)。
116.当model(模型)上层模块发生变化,即该模型的应用场景、工作模式变化时,会导致请求接口时序发生变化,请求接口模块中的事件转换逻辑需要相应修改。
117.具体地,请求接口模块收到core下发的load或store请求后,由于core的可能存在接口信号的pipeline(流水线)(即不同的信号可能不在同一拍有效,而是存在固定的延时),因此会根据接口信号的pipeline时序,即请求接口时序来进行接收并生成事件。
118.对于load请求,会从core接收到请求的有效指示、线程号(thread id)、传输请求类型(transfer type)、请求地址等。对于store请求,会从core接收到请求的有效指示、线程号(thread id)、传输请求类型(transfer type)、请求地址、有效字节指示(byte enables)、数据(store data)等。在按照core设计中的pipeline收集到一笔请求的所有信息后,发送请求接口模块。transaction(事务)是事件传递,本身不占用仿真时间。
119.请求接口模块的设计难点是core接口pipeline行为和transaction之间的转换。
120.读取处理模块即load unit,写入处理模块即store unit,读取处理模块收到读取事件后,会根据其地址的高位访问directory,获得该笔请求的缓存命中情况,即读取命中结果;写入处理模块收到写入事件后,会根据其地址的高位访问directory,获得该笔请求的缓存命中情况,即写入命中结果;directory为命中检测模块,directory会存储缓存数据的地址高位(tag)和状态信息,即命中地址数据,包括缓存地址的有效标记(valid bit)、cacheline状态(state)、(inclusive状态,如果为inclusive l2,l1的缓存内容包含与l2)、ecc等。
121.通过配置读取处理模块的乱序执行状态机数量load_unit_fsm_num的值,可以改变缓存模型的并行处理能力,load_unit_fsm_num越大,缓存模型同时可以处理的不同地址的读取请求越多。通过配置写入处理模块的乱序执行状态机数量store_unit_fsm_num的值,可以改变缓存模型的并行处理能力,store_unit_fsm_num越大,缓存模型同时可以处理的对不同地址的写入请求越多。
122.通过配置读取处理模块的transaction传递延迟load_unit_trans_delay的值,可改变缓存模型的读请求响应延时,load_queue_trans_delay越大,读延迟越大,缓存模型的性能越低。通过配置写入处理模块的transaction传递延迟store_unit_trans_delay的值,可以改变缓存模型的写请求响应延时,store_queue_trans_delay越大,写延迟越大,可以反映出缓存模型的性能越低。
123.数据缓存模块,即cache memory,存储缓存数据,在l2和l3模式下该模块为多维数组结构。以512kb缓存大小,64byte缓存行大小为例,根据地址进行划分,可以有index(地址15:7)、bank(地址6)、8-byte double word(地址5:3)三个维度。在无缓存模式下该存储为
关联数组结构,即对完整的地址空间进行存储,而非其他模式中对地址空间进行哈希。
124.其中,无缓存模式也可称为全内存模式,英文名称为full memory。
125.总线请求处理模块,即fabric unit,收到读取/写入处理模块发送的请求后,会发出总线的读请求,同时也会将来自总线的窥探请求转换成窥探队列模块和窥探处理模块可以处理的事件。总线请求处理模块还会将总线的响应/应答转换为事件信息反馈给读取/写入/替换处理模块。总线请求处理模块的设计难点是总线接口的cycle base行为与事件信息之间的转换。
126.当model下层模块发生变化,即该模型的应用场景、工作模式变化时,会导致总线接口时序发生变化,此时总线请求处理模块中的事件转换逻辑需要相应修改。
127.通过配置总线接口数据位宽data_width的值,可以决定总线请求处理模块的总线接口在对缓存行进行序列化时需要经过的拍数(例如缓存行大小为64b,data_width=256b,则传输一笔缓存行需要两拍)。通过配置总线接口地址位宽addr_width的值,可以适配当前core会下发的读取/写入请求的地址空间。通过配置总线接口id位宽id_width的值,可以决定当前模式下缓存模型的总线接口可以处理的最大乱序能力。
128.其中,模式配置信息由全局变量字符串mode控制。
129.上述实施例提供的一种处理器核外缓存模型,通过请求接口模块接收读取请求和写入请求,通过读取处理模块、写入处理模块、命中检测模块、数据缓存模块和总线请求处理模块实现对读取请求和写入请求的处理,从而实现了缓存对处理器请求的处理功能。
130.其中,令请求接口模块根据模式配置信息修改接口时序、数据缓存模块根据模式配置信息修改容量、总线请求处理模块根据模式配置信息修改总线接口时序,即在更换应用场景、更换模式时,仅需通过模式配置信息修改便可实现与不同的上下级模块连接和数据传输,以及数据缓存模块容量的变化,从而使得本技术的模型可以作为任意级的缓存接入处理器中。
131.同时本技术通过请求接口模块将接收到的请求均转换为事件再向后传递,即在模型的应用场景不同、接收到的请求信息不同时,模型内部仍为事件传递逻辑,无需因上级模块的变化而更改模型内部各模块之间的数据处理逻辑;其次,通过本身不耗时的事件进行传递,可以控制的延时范围更广,有助于对处理器系统的快速设计与开发。
132.本技术可通用于多种缓存的应用场景,解决了对不同缓存一对一开发导致的花费大量人力与时间、模型不一致问题,减少了对多个缓存模型的维护和移植难度。
133.请参见图2,在一些实施例中,该模型还包括读取队列模块和写入队列模块;读取队列模块用于接收读取事件,写入队列模块用于接收写入事件。
134.读取队列模块还用于对各读取事件与写入队列模块中的各写入事件做冲突检测,将无冲突的读取事件发送至读取处理模块;写入队列模块还用于对各写入事件与读取队列模块中的各读取事件做冲突检测,将无冲突的写入事件发送至写入处理模块。
135.读取处理模块还用于在获取读取数据后,将其发送给读取队列模块。
136.其中,读取队列模块即load queue,写入队列模块即store queue,请求接口模块以transaction的形式将各个请求transaction打包传输给读取/写入队列模块。
137.读取队列模块会为每个收到的读取事件分配一个位置(entry),如果某个entry可以被下发(即没有与其它正在处理的读取事件存在地址冲突,也没有与其它正在处理的写
入事件存在地址冲突),那么会向读取处理模块发送读取事件。读取队列模块起到了暂存core的下发请求的作用。读取队列模块的设计难点是地址冲突的检测。
138.写入队列模块会为每个收到的写入事件分配一个位置,如果某个entry可以被下发(即没有与其它正在处理的写入事件存在地址冲突,也没有与其它正在处理的读取事件存在地址冲突),那么会向写入处理模块发送写入事件。写入队列模块起到了暂存core的下发请求的作用。写入队列模块的设计难点是地址冲突的检测。
139.具体地,读取/写入队列模块之间可以根据地址、访存类型、特殊标识符等做冲突检测(collision check,比如某个地址的读取事件即将被发送到读取处理模块时,发现有一个同地址的store操作正在处理)和依赖检测(dependency check,比如某个线程的barrier(内存屏障)store即将被发送到写入处理模块时,发现有同一个线程的普通store还未被发送到写入处理模块或已被发送到写入处理模块但是还未做完;或某个线程的store即将被发送到写入处理模块时,发现有同一个线程的barrier store还未做完),在冲突或依赖解决后,从读取/写入队列模块中轮询选出的transaction会传送到读取/写入处理模块。
140.读取/写入处理模块中的操作完成后,读取/写入队列模块中的transaction会被删除。
141.通过配置读取队列模块的entry数load_queue_depth的值,可以改变缓存模型的读取请求乱序处理能力,load_queue_depth越大,缓存模型同时可处理的对不同地址的读取请求越多。通过配置读取队列模块的transaction传递延迟load_queue_trans_delay的值,可改变资源竞争的剧烈程度(在实际缓存模型硬件设计时会存在bank conflict(存储体冲突)、address conflict(地址冲突)、arbitration conflict(仲裁资源冲突)等情况),load_queue_trans_delay越大,表明缓存模型的资源竞争越剧烈。
142.通过配置写入队列模块的entry数store_queue_depth的值,可以改变缓存模型的写入请求乱序处理能力,store_queue_depth越大,缓存模型同时可处理的对不同地址的写入请求越多。通过配置写入队列模块的transaction传递延迟store_queue_trans_delay的值,可以改变资源竞争的剧烈程度(这是因为在实际硬件设计时会存在bank conflict、address conflict、arbitration conflict等情况),store_queue_trans_delay越大,表明缓存模型的资源竞争越剧烈。
143.上述实施例保证了发送给读取/写入处理模块的各个请求事件是无冲突、无依赖的,避免了读取/写入处理模块因地址冲突等原因需要排队处理接收到的各请求事件的情况,从而避免了因请求事件冲突、排队处理造成的延时。
144.请参见图3、图4、图6和图7,在一些实施例中,命中检测模块和总线请求处理模块还用于在模式配置信息为无缓存信息时进入屏蔽状态。
145.读取处理模块用于在模式配置信息为无缓存信息时,获取数据缓存模块中的读取数据;写入处理模块用于在模式配置信息为无缓存信息时,根据写入事件更新数据缓存模块。
146.其中,当mode="ram_model",即无缓存信息时,模型工作在无缓存模式时,数据缓存模块变为直接映射的associative memory(关联数组),此时读取/写入处理模块会直接对associative memory中的关联数组进行操作,无需先访问命中检测模块查询缓存行命中
情况。当mode="cache_l2",即二级缓存信息时,模型工作在l2模式,会相应影响请求接口模块、总线请求处理模块和数据缓存模块。当mode="cache_l3"时模型工作在l3模式,会相应影响请求接口模块、总线请求处理模块和数据缓存模块。
147.具体地,在无缓存模式下,读取处理模块收到读取队列模块发来的读取事件后,会根据请求地址访问associative memory,获得该地址的值。在l2或l3模式下,读取处理模块收到读取队列模块发来的读取事件后,会根据请求地址的高位访问命中检测模块,获得该笔请求的缓存命中情况。如果缓存命中,则将命中的读取数据通过transaction的形式传递到读取队列模块中的entry中。如果未命中,则向总线请求处理模块发出读请求获取读取数据,读请求的transaction中会包括当前的请求地址、线程号、请求类型等。
148.上述实施例令本技术的缓存模型实现了无缓存模式下对读取请求和写入请求的处理。
149.请参见图3、图5、图6和图8,在一些实施例中,读取处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,若读取事件为命中,则获取数据缓存模块中的读取数据;若读取事件为未命中,则通过总线请求处理模块获取读取数据。
150.写入处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,若写入事件为命中,则根据写入事件更新数据缓存模块;若写入事件为未命中,则通过总线请求处理模块获取写入数据,并根据写入数据更新数据缓存模块。
151.在无缓存模式下,写入处理模块收到写入队列模块发来的写入事件后,无需访问命中检测模块获取写入命中结果,而是直接根据请求地址写入associative memory。
152.在l2或l3模式下,写入处理模块收到写入队列模块发来的写入事件后,会根据当前地址的高位访问命中检测模块,获得该笔请求的缓存命中情况。如果缓存命中,则写入事件会写入数据缓存模块。如果缓存未命中,则向总线发送读请求(如果为allocate l2/如果为store through l2)。如果为allocate l2,从总线收到写入数据以后会进行缓存数据的更新。
153.上述实施例令本技术的缓存模型实现了l2和l3模式下对读取请求和写入请求的处理。
154.请参见图6-图8,在一些实施例中,该模型还包括访存记录模块。
155.读取处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,在获取读取数据后根据读取数据更新访存记录模块;
156.写入处理模块还用于在模式配置信息为二级缓存信息或三级缓存信息时,在根据写入事件或写入数据更新数据缓存模块后,根据写入事件或写入数据更新访存记录模块。
157.其中,访存记录模块用于在模式配置信息为无缓存信息时进入屏蔽状态。
158.具体地,读取处理模块收到读取队列模块发来的读取事件后,获得该笔请求的缓存命中情况。不论是否命中,都需要在获取读取数据后更新访存记录模块,写入处理模块收到写入队列模块发来的写入事件后,不论其是否命中都会在更新数据缓存模块后更新访存记录模块。
159.其中,访存记录模块即为lru,用来存储缓存数据的n路组内最近访存记录,作为产生替换数据时的参考信息。访存记录模块会记录缓存地址上的所有相联组的相对访存时间先后关系。lru是存储,因此输入是新的某个index(缓存索引)上的n路组的lru值,输出是旧
的某个index上的n路组的lru值。访存记录模块的设计难点是n路组的plru的编码。
160.lru中存在缓存替换算法lru_mode,有plru算法(plru)、伪随机(random)、直接映射(direct)三种。plru算法会记录当前某个index中几路组之间的最近最少访问的相互关系,将最近最少访问的某一路作为替换对象。伪随机模式会随机选择一路作为替换对象。直接映射模式会根据index以上地址的最低位选择替换对象(例如地址ra[49:0],ra[15:6]作为index,8路组相联,直接映射时会根据当前请求的ra[18:16]选择替换对象)。
[0161]
上述实施例通过设置访存记录模块,通过其中记录的访存记录数据可以读取处理模块和写入处理模块快速准确地选择出最优的替换数据。
[0162]
请参见图6-图8,在一些实施例中,该模型还包括替换处理模块。
[0163]
读取处理模块或写入处理模块还用于在读取事件或写入事件未命中时,通过访存记录模块得到替换数据并发送给替换处理模块;替换处理模块用于将替换数据写出该模型。
[0164]
替换处理模块用于在模式配置信息为无缓存信息时进入屏蔽状态。
[0165]
其中,替换处理模块即castout unit,具体地,读取/写入处理模块也可以不要求获取替换数据,将从总线获得的数据选择一个未被分配的某一路组放入。
[0166]
在具体实施过程中,读取处理模块收到读取队列模块发来的读取事件后,会根据请求地址的高位访问命中检测模块,获得该笔请求的缓存命中情况。如果缓存未命中,则更新lru并向总线请求处理模块发出读请求,同时通过transaction告知替换处理模块向总线请求处理模块发送替换写请求,替换写请求中会包括被替换的缓存行的地址。被替换的缓存行即替换数据。
[0167]
上述实施例替换处理模块的设置实现了在请求未命中、获取新数据时的数据替换操作,避免了未被分配的缓存行被用完时,未命中后的缓存处理流程出错,同时通过访存记录模块确定替换数据保证了替换数据选择的最优。
[0168]
请参见图6-图8,在一些实施例中,替换处理模块还用于根据替换数据生成替换写请求并发送给总线请求处理模块,并在接收到总线应答时写出替换数据;总线请求处理模块还用于将替换写请求转换为总线写请求并发送给总线;以及将接收到的总线应答发送给替换处理模块。
[0169]
具体地,读取事件未命中后,读取处理模块会通过transaction通知替换处理模块向总线请求处理模块发送替换写请求,请求中会包括被替换的缓存行的地址。之后总线请求处理模块接收总线应答后发送给替换处理模块,替换处理模块收到总线应答后便将被替换的缓存行写出。
[0170]
从读取/写入处理模块中收到要产生victim(被替换出的缓存行,即替换数据)的信息以及victim的位置后,如果模型当前的模式为l2,则替换处理模块会产生向下一级缓存的替换写请求,将被替换出的数据写回到下一级缓存。如果模型当前的模式为l3,则会向ddr直接写回数据。如果当前运行模式为无缓存,不会产生外部可见的影响。
[0171]
上述实施例在产生替换数据后,通过总线发出总线写请求,在确定该替换数据可以被写出后产生总线应答,避免了访存记录模块产生的替换数据不合适的情况。
[0172]
请参见图6-图8,在一些实施例中,写入处理模块还用于在根据写入数据更新数据缓存模块后,根据写入数据更新命中检测模块;读取处理模块还用于在通过总线请求处理
模块获取读取数据后,根据读取数据更新数据缓存模块和命中检测模块。
[0173]
具体地,如果当前的运行模式为l2,则会在缓存未命中时发送下一级缓存需要的读请求以获取未命中的读取/写入数据,并通过总线请求处理模块收集总线中下一级缓存响应的读取/写入数据,将读取/写入数据更新到数据缓存模块,将读取/写入数据的当前地址高位和状态更新到命中检测模块,并更新当前的lru值。
[0174]
如果当前运行模式为l3,请求接口模块会将上一级cluster的请求转化为事件,发送给读取/写入队列模块,其余操作与l2模式相同。如果当前运行模式为无缓存,读取/写入处理模块会由内部产生load store response,并更新到数据缓存模块、命中检测模块和访存记录模块,内部产生load store response的过程和随机性可以由用户通过callback进行约束。
[0175]
上述实施例通过在从总线获取数据后,对命中检测模块的更新,保证了命中检测模块和数据缓存模块的实时对应,确保了后续相同请求的命中。
[0176]
请参见图6和图9,在一些实施例中,该模型还包括窥探处理模块和窥探队列模块。
[0177]
当模式配置信息为二级缓存信息或三级缓存信息时:总线请求处理模块还用于接收窥探请求,并将窥探请求转换为窥探事件发送给窥探队列模块。
[0178]
窥探队列模块用于将各窥探事件与各读取事件、各写入事件进行冲突检测,得到无冲突的窥探事件并将其发送给窥探处理模块。窥探处理模块用于通过命中检测模块获取窥探事件的命中结果,根据命中结果生成窥探应答并发送至总线请求处理模块。
[0179]
其中,窥探处理模块和窥探队列模块用于在模式配置信息为无缓存信息时进入屏蔽状态;窥探队列模块即snoop queue,窥探处理模块即snoop unit。当mode="ram_model",即无缓存信息时,模型工作在无缓存模式时,总线请求处理模块、替换处理模块、窥探处理模块、窥探队列模块、访存记录模块、命中检测模块及相关的数据流被全部屏蔽。
[0180]
具体地,窥探队列模块会收集从总线请求处理模块发送过来的窥探事件,如果当前轮询的窥探请求没有与正在处理的读取/写入/窥探事件冲突,那么会被发送到窥探处理模块。如果当前运行模式为l2模式,窥探处理模块收到窥探事件后会并更新命中检测模块和访存记录模块。
[0181]
如果当前运行模式为l3,窥探队列模块仅与ddr保持同步,不会收到snoop。如果当前运行模式为无缓存,窥探处理模块会从内部产生窥探请求,产生过程和随机性也可以由用户通过callback进行约束。窥探处理模块的操作完成后,窥探队列模块中的事件会被删除。窥探处理模块会转换窥探队列模块发来的事件并进行模型内部访问。
[0182]
进一步的,总线请求处理模块会收到窥探处理模块发出的窥探应答后发送给总线。
[0183]
通过配置窥探队列模块的transaction传递延迟snoop_queue_trans_delay的值,可以改变资源竞争的剧烈程度(因为在实际硬件设计时会存在bank conflict、address conflict、arbitration conflict等情况),snoop_queue_trans_delay越大,表明缓存模型中的资源竞争越剧烈。通过配置窥探处理模块的transaction传递延迟snoop_unit_trans_delay的值,可以改变缓存模型的窥探请求响应延时,snoop_queue_trans_delay越大,窥探请求响应延迟越大,可以反映出l2性能越低。
[0184]
在多个缓存模型的组合下,多个缓存模型通过总线(硬件设计的总线或总线验证
ip)互联时,需要通过缓存状态来维护一致性,常见的有基于mesi协议、moesi协议。
[0185]
当前模型基于ambachi协议进行设计,设计有以下状态:i(invalid)、ud(unique dirty)、uc(unique clean)、sd(shared dirty)、sc(shared clean)。
[0186]
load未命中时,缓存行会从invalid状态变为ud/uc/sd/sc状态,取决于总线的响应。
[0187]
load命中时,缓存行状态不会发生变化。
[0188]
store未命中时,缓存模型会从总线拿到最新的unique copy,即写入数据,在此基础上更新store的数据后,将缓存行状态变为ud。
[0189]
store命中时,如果缓存行状态为uc/ud,则不会产生总线请求,缓存行状态直接变为ud。如果缓存行状态为sc/sd,会产生总线请求将缓存行状态upgrade(升级/转变)为ud。
[0190]
snoop时,取决于总线发送过来的窥探请求的类型,会发生各种状态转换。该转换在总线请求处理模块中进行定义。
[0191]
上述实施例考虑到了多核处理器中,可能接收到的来自其他缓存的窥探请求,实现了在二级缓存和三级缓存的模式下对窥探请求的处理,令本技术能够应用于多核、多缓存的应用场景。
[0192]
请参见图6和图9,在一些实施例中,窥探处理模块还用于在窥探事件为数据窥探事件且窥探事件命中时,获取数据缓存模块中窥探事件对应的窥探数据;窥探处理模块生成的窥探应答中包括窥探数据。由于不会产生cache替换,窥探处理模块不会访问或更新lru。
[0193]
若窥探请求需要提供数据,则窥探处理模块会在访问命中检测模块且命中后访问数据缓存模块获取请求命中的窥探数据并产生窥探应答告知总线请求处理模块。
[0194]
上述实施例在窥探请求是需要数据的请求时,若其命中,则将其请求的数据一同发送给窥探请求方,实现了对数据请求类型的窥探请求的处理。
[0195]
在一些实施例中,读取处理模块、写入处理模块、命中检测模块、数据缓存模块、总线请求处理模块、读取队列模块、写入队列模块、访存记录模块、替换处理模块、窥探队列模块、窥探处理模块之间均采用事件信息的形式进行数据传输。
[0196]
通常情况下对缓存建模的需求是模型能反映尽可能广的性能指标并对这些指标动态可调(会做成统计分布的形式),以方便进行实际硬件架构调整。
[0197]
读取/写入/窥探队列/处理模块本身在处理事件时可以不消耗仿真时间,本模型可以通过调节缓存中的读取/写入/窥探队列模块、读取/写入/窥探处理模块中的transaction延时单元,来模拟实际缓存设计中的读取/写入/窥探的分发延时(即从读取/写入/窥探队列模块中分配一个entry,到这个entry从队列模块中发出到相应的处理模块的延时),读取/写入/窥探outstanding延时(即从读取/写入/窥探处理模块收到一笔处理请求,到这笔请求完成的延时)。
[0198]
模型本身都是“三明治”结构,即模型的两边(请求接口模块和总线请求处理模块)进行transaction和cycle accurate(周期精确)时序之间的转换,中间通过本身不耗时的transaction进行传递,可以控制的延时范围更广。另外,相对于直接用时序关系对中间的读取/写入队列模块和处理模块等结构进行建模,用transaction进行建模可以减少模拟时序冲突的复杂度,通过读取/写入队列模块和处理模块中可配置的延时来反映实际硬件设
计中存在的冲突延时。
[0199]
上述实施例令除了请求接口模块和总线请求处理模块这两个缓存模型用来对接外部上下层模块的结构,其他模块都是基于事件信息的形式进行数据的传输,使得本技术的缓存模型在不同模式下无需修改内部模块的数据处理逻辑,从而有利于降低模型复杂度。
[0200]
在一些实施例中,数据缓存模块包括缓存索引深度值、缓存行参数和缓存相关联度;缓存行参数和缓存索引深度、缓存组相关联度共同决定数据缓存模块的容量。
[0201]
具体地,通过配置缓存索引深度index_depth的值,可以决定当前缓存的总大小。直接影响当前模型中每一路组中数据缓存模块、命中检测模块的寻址深度,也影响当前模型中lru的寻址深度。通过配置缓存组相联度way的值,可以决定当前l3缓存的总大小和替换选择数。直接影响当前模型中数据缓存模块、命中检测模块的组数。
[0202]
在模型仿真不同的缓存行大小时可直接配置模型中的结构参数cl_size即可,通常默认为64,即64byte。修改cl_size后,l2和l3模式下数据缓存模块的大小会变化,数据缓存模块总大小为index_depth
×
way
×
缓存行大小。
[0203]
缓存行大小的修改只会影响数据缓存模块和总线请求处理模块,不会影响其它结构。数据缓存模块中存储的是一条完成缓存行的数据。
[0204]
总线请求处理模块需要根据当前的data_width和缓存行大小计算当前的一笔缓存行传输需要几拍才能完成。本技术的模型在设计时已经考虑了总线的数据位宽与缓存行大小的可调比例关系。组相联的修改可以直接通过修改参数way来实现。会影响数据缓存模块、命中检测模块的每个寻址index上的组数量,以及lru的存储内容(因为要计算每一路之间相互的最近最少访问关系,空间复杂度是o(log2(n)),需要更新plru算法的编码)。
[0205]
上述实施例通过模型中3个可调节的参数的设置,令本技术的模型可以支持不同的缓存行大小配置、不同的缓存组相联配置,增加了本技术的可应用场景、提高了适用性。
[0206]
请参见图10,本技术实施例提供了一种处理器核外缓存模拟方法,该方法包括:
[0207]
步骤s1,接收模式配置信息,并根据模式配置信息确定缓存数据的大小、请求接口时序和总线接口时序;根据请求接口时序接收读取请求和写入请求;
[0208]
步骤s2,将读取请求转换为读取事件,将写入请求转换为写入事件。
[0209]
步骤s3,基于模式配置信息和总线接口时序处理读取事件和写入事件。
[0210]
上述实施例提供的一种处理器核外缓存模拟方法,通过模式配置信息确定缓存数据的大小、请求接口时序和总线接口时序,实现了多种应用场景下对不同数据的接收、处理;其次,将接收到的读取请求和写入请求均转换为事件进行处理,实现了在请求的信息时序不同时,本技术的模拟方法中对事件的处理逻辑无需发生改变,且事件信息的传递本身不耗时,使得该方法可模拟的延时范围更广;本技术提供的方法可以通过更改模式配置信息模拟多种应用场景下的缓存功能,无需针对每一种缓存单独开发一套模拟方法,大大减少了设计人员花费的精力与时间。
[0211]
请参见图11和图12,在一些实施例中,上述基于模式配置信息和总线接口时序处理读取事件和写入事件,包括:在模式配置信息为无缓存信息时,根据读取事件获取缓存数据中的读取数据;根据写入事件更新缓存数据。
[0212]
具体地,即收到core的读取/写入请求并转换为读取/写入事件后,直接根据读取
事件的地址获取改地址对应的读取数据,或者更新写入事件的地址对应的缓存数据。
[0213]
上述实施例在无缓存信息时,直接执行读取/写入事件,无需对其进行命中检测,实现了对无缓存模式下的缓存功能的模拟。
[0214]
请参见图13和图14,在一些实施例中,上述基于模式配置信息和总线接口时序处理读取事件和写入事件,包括:在模式配置信息为二级缓存信息或三级缓存信息时:
[0215]
根据命中地址数据检测读取事件是否命中;若命中,则获取缓存数据中的读取数据;若未命中,则基于总线接口时序通过总线获取读取数据。
[0216]
根据命中地址数据检测写入事件是否命中。
[0217]
若命中,则根据写入事件更新缓存数据;若未命中,则基于总线接口时序获取写入数据,并根据写入数据更新缓存数据。其中,命中地址数据即命中检测模块directory中包括的数据。
[0218]
其中,基于总线接口时序获取写入数据,就是向总线发出读请求,以获取总线应答,总线应答中便包括未命中的读取数据或写入数据。
[0219]
上述实施例在二级/三级缓存信息时,在对读取/写入事件进行命中检测后,基于命中检测的结果执行读取/写入事件,实现了对二级/三级缓存模式下的缓存功能的模拟。
[0220]
请参见图13和图14,在一些实施例中,该方法还包括:
[0221]
在执行完步骤s2后,将各读取事件与各写入事件进行冲突检测,得到无冲突的读取事件和无冲突的写入事件;基于无冲突的读取事件和无冲突的写入事件执行步骤s3。
[0222]
上述实施例保证了执行命中检测的请求事件是无冲突、无依赖的,避免了因事件之间地址冲突等原因需要排队处理接收到的各请求事件的情况,从而避免了因冲突、排队造成的延时。
[0223]
请参见图13和图14,在一些实施例中,该方法还包括:
[0224]
在获取读取数据后,根据读取数据更新访存记录数据。
[0225]
在根据写入事件或写入数据更新缓存数据后,根据写入事件或写入数据更新访存记录数据。
[0226]
上述实施例通过访存记录数据可以在缓存未命中时快速准确地选择出最优的替换数据。
[0227]
请参见图13和图14,在一些实施例中,该方法还包括:在读取事件或写入事件未命中时,根据访存记录数据得到替换数据,并将替换数据写出。
[0228]
具体地,若要求产生替换的一路数据,则通过访存记录数据获取。
[0229]
上述实施例替换处理模块的设置实现了在请求未命中、获取新数据时的数据替换操作,避免了未被分配的缓存行被用完时,未命中后的缓存处理流程出错,同时根据访存记录数据确定替换数据保证了替换数据选择的最优。
[0230]
请参见图13和图14,在一些实施例中,该方法还包括:
[0231]
根据替换数据生成替换写请求,将替换写请求转换为总线写请求。
[0232]
在接收到总线应答后,将替换数据写出处理器核外缓存模型。
[0233]
其中,总线写请求是向总线发出的,总线应答也是从总线接收的。
[0234]
上述实施例在产生替换数据后,发出总线写请求,在确定该替换数据可以被写出后产生总线应答,避免了根据访存记录数据产生的替换数据不合适的情况。
[0235]
请参见图13和图14,在一些实施例中,该方法还包括:
[0236]
在根据写入数据更新缓存数据后,根据写入数据更新命中地址数据;在基于总线接口时序获取读取事件对应的读取数据后,根据读取数据更新缓存数据和命中地址数据。
[0237]
具体地,在未命中并向总线发出读请求后,收到总线应答的读取/写入数据,将读取数据发送至core,将读取数据或写入数据写入缓存数据,并更新命中地址数据。
[0238]
上述实施例通过在基于总线接口时序获取数据后,对命中检测模块的更新,保证了命中地址数据和缓存数据的实时对应,确保了后续相同请求的命中。
[0239]
在一些实施例中,该方法还包括:
[0240]
在模式配置信息为二级缓存信息或三级缓存信息时,接收窥探请求;将窥探请求转换为窥探事件,将各窥探事件与各读取事件、各写入事件进行冲突检测,得到无冲突的窥探事件。
[0241]
根据命中地址数据检测无冲突的窥探事件是否命中。
[0242]
根据窥探事件的命中结果生成窥探应答。其中,窥探应答也是发往总线的。
[0243]
上述实施例考虑到了可能接收到来自其他缓存的窥探请求的情况,实现了在二级缓存和三级缓存的模式下对窥探请求的处理,令该方法能够模拟多核、多缓存的应用场景。
[0244]
请参见图15,该方法还包括:若窥探事件为数据窥探事件,则在窥探事件命中后,获取缓存数据中窥探事件对应的窥探数据,并根据窥探数据和命中结果生成窥探应答。
[0245]
上述实施例在窥探请求是需要数据的请求时,若其命中,则将其请求的数据一同发送给窥探请求方,实现了对数据请求类型的窥探请求的处理。
[0246]
在一些实施例中,该方法还包括:通过调节缓存行参数、缓存索引深度和缓存组相关联度的大小来控制处理器核外缓存模型中缓存数据的大小。
[0247]
上述实施例通过调节3个参数,令该模拟方法可以模拟不同的缓存行大小配置、不同的缓存组相联配置下的缓存功能,提高了本技术的适用性。
[0248]
请参见图16和图17,以一个具体的例子来说明本技术中一种处理器核外缓存模型的实现。
[0249]
如图16所示,无缓存模式下,模型由请求接口模块、读取队列模块、写入队列模块、读取处理模块、写入处理模块、associative memory构成。图16中数据传输线标号的含义为:
[0250]
1.请求接口模块会收到core下发的读取或写入请求信息。
[0251]
2.请求接口模块会向core发送读取的数据或读取/写入的应答信号。
[0252]
3.请求接口模块会向读取队列模块发送读取transaction。
[0253]
4.请求接口模块会向写入队列模块发送写入transaction。
[0254]
5.读取队列模块与写入队列模块之间可以互相检查dependency(地址冲突)。
[0255]
6.读取队列模块会向读取处理模块发送读取transaction。
[0256]
7.写入队列模块会向写入处理模块发送写入transaction。
[0257]
8.读取处理模块会访问associative memory并获得对应地址的值(associative memory(直接映射的二维数组)可以被读取/写入处理模块直接访问,存储的是所有寻址空间上的值)。
[0258]
9.写入处理模块会访问associative memory并更新对应地址的值。
[0259]
10.读取处理模块将获得的值通过transaction传递到正在处理的读取队列模块entry。
[0260]
在无缓存模拟时,相当于整个模型抽象为cpu core看到的存储系统,考量的指标有:
[0261]
1.读取延时(read latency):从core发送一笔读取请求,到core收到这笔请求的数据的间隔时间,包括以下参数:
[0262]
a)读取统计采样数:仿真时间内(或指定的仿真时间段内),进行统计的读取次数。
[0263]
b)读取延时平均值:仿真时间内(或指定的仿真时间段内),所有读取延时的平均值。
[0264]
c)读取延时标准差:仿真时间内(或指定的仿真时间段内),读取延时的统计分布标准差。
[0265]
d)读取延时最小值:仿真时间内(或指定的仿真时间段内),读取延时的最小值。
[0266]
e)读取延时最大值:仿真时间内(或指定的仿真时间段内),读取延时的最大值。
[0267]
f)读取延时统计分布:等间隔分布进行统计,一般binning(统计合并)大小为10-20cycle。
[0268]
2.写入延时(write latency):从core发送一笔写入请求,到这笔写入请求写入对应地址的间隔时间,包括以下参数:
[0269]
a)写入统计采样数:仿真时间内(或指定的仿真时间段内),进行统计的写入次数。
[0270]
b)写入延时平均值:仿真时间内(或指定的仿真时间段内),所有写入延时的平均值。
[0271]
c)写入延时标准差:仿真时间内(或指定的仿真时间段内),写入延时的统计分布标准差。
[0272]
d)写入延时最小值:仿真时间内(或指定的仿真时间段内),写入延时的最小值。
[0273]
e)写入延时最大值:仿真时间内(或指定的仿真时间段内),写入延时的最大值。
[0274]
f)写入延时统计分布:等间隔分布进行统计,一般binning大小为10-20cycle。
[0275]
3.延时(latency):从core发送一笔请求,到这笔请求完成的间隔时间,包括以下参数:
[0276]
a)延时采样数:仿真时间内(或指定的仿真时间段内),进行统计的读写次数。
[0277]
b)延时平均值:仿真时间内(或指定的仿真时间段内),所有读写延时的平均值。
[0278]
c)延时标准差:仿真时间内(或指定的仿真时间段内),读写延时的统计分布标准差。
[0279]
d)延时最小值:仿真时间内(或指定的仿真时间段内),读写延时的最小值。
[0280]
e)延时最大值:仿真时间内(或指定的仿真时间段内),读写延时的最大值。
[0281]
4.读取带宽(read bandwidth):仿真时间内(或指定的仿真时间段内),每秒从存储系统读取的数据量(一般单位为mb/s)。
[0282]
5.写入带宽(write bandwidth):仿真时间内(或指定的仿真时间段内),每秒向存储系统写入的数据量(一般单位为mb/s)。
[0283]
如图17所示,l2/l3模式下模型由请求接口模块、读取队列模块、写入队列模块、读取处理模块、写入处理模块、替换处理模块、窥探处理模块、窥探队列模块、lru、命中检测模
块、数据缓存模块构成,l2模式下该模型的上层模块为core,下层模块为下一级缓存,即fabric,l3模式下该模型的上层模块为core和l2,即cluster,下层模块为ddr,但l3的模型内部结构与l2模式一致,只是请求接口模块与总线请求处理模块处理的接口时序不同。
[0284]
图17中传输线标号的含义为:
[0285]
1.请求接口模块会收到core下发的读取或写入请求信息。
[0286]
2.请求接口模块会向core发送读取的数据或读取/写入的应答信号。
[0287]
3.请求接口模块会向读取队列模块发送读取transaction。
[0288]
4.请求接口模块会向写入队列模块发送写入transaction。
[0289]
5.读取队列模块、写入队列模块、窥探队列模块之间可以互相检查dependency。
[0290]
6.读取队列模块会向读取处理模块发送读取transaction。
[0291]
7.写入队列模块会向写入处理模块发送写入transaction。
[0292]
8.读取处理模块会访问命中检测模块获取当前请求地址的读取命中结果。
[0293]
9.读取处理模块会访问访存记录模块获取当前请求地址发生替换时的替换数据并更新。
[0294]
10.写入处理模块会访问命中检测模块获取当前请求地址的写入命中结果。
[0295]
11.写入处理模块会访问访存记录模块获取当前请求地址发生替换时的替换数据并更新。
[0296]
12.读取处理模块会访问数据缓存模块获得命中的地址缓存的值。
[0297]
13.写入处理模块会访问数据缓存模块更新地址缓存的值。
[0298]
14.读取处理模块会向总线请求处理模块发送总线读请求并获得读取数据。
[0299]
15.写入处理模块会向总线请求处理模块发送总线读请求并获得写入数据。
[0300]
16.读取处理模块会向替换处理模块发送替换transaction。
[0301]
17.写入处理模块会向替换处理模块发送替换transaction。
[0302]
18.替换处理模块会向总线请求处理模块发送总线写请求并写出替换数据。
[0303]
19.总线请求处理模块收到读取/写入/替换/窥探处理模块发送的transaction后,转换成cycle accurate(周期精确)的接口时序。
[0304]
20.总线请求处理模块接收到总线或总线功能模型发送的cycle accurate接口时序。
[0305]
21.窥探队列模块会从总线请求处理模块接收到窥探transaction。
[0306]
22.窥探队列模块发送窥探transaction到窥探处理模块。
[0307]
23.窥探处理模块访问命中检测模块。
[0308]
24.窥探处理模块访问数据缓存模块获得命中的地址缓存的值。
[0309]
25.窥探处理模块向总线请求处理模块发送响应。
[0310]
26.读取处理模块将获得的值通过transaction传递到正在处理的读取队列模块entry。
[0311]
在l2/l3模拟时,相当于整个模型抽象为cpu core看到的核外第一级缓存,因此考量的指标除了包括无缓存模式下所包括的指标,还包括以下性能指标:
[0312]
a)缓存命中数:仿真时间内(或指定的仿真时间段内),l2/l3的缓存命中次数。
[0313]
b)缓存命中率:仿真时间内(或指定的仿真时间段内),l2/l3的缓存命中次数与统
计采样数之间的比值。
[0314]
c)缓存失效数:仿真时间内(或指定的仿真时间段内),l2/l3的缓存未命中次数。
[0315]
d)缓存失效率:仿真时间内(或指定的仿真时间段内),l2/l3的缓存未命中次数与统计采样数之间的比值。
[0316]
e)读写地址冲突数:仿真时间内(或指定的仿真时间段内),core下发的读操作与正在进行的写操作发生地址冲突的次数。
[0317]
f)读写地址冲突率:仿真时间内(或指定的仿真时间段内),core下发的读操作与正在进行的写操作发生地址冲突的次数与统计采样数之间的比值。
[0318]
g)写读地址冲突数:仿真时间内(或指定的仿真时间段内),core下发的写操作与正在进行的读操作发生地址冲突的次数。
[0319]
h)写读地址冲突率:仿真时间内(或指定的仿真时间段内),core下发的写操作与正在进行的读操作发生地址冲突的次数与统计采样数之间的比值。
[0320]
i)读地址冲突数:仿真时间内(或指定的仿真时间段内),core下发的读操作与正在进行的读操作发生地址冲突的次数。
[0321]
j)读地址冲突率:仿真时间内(或指定的仿真时间段内),core下发的读操作与正在进行的读操作发生地址冲突的次数与统计采样数之间的比值。
[0322]
k)写地址冲突数:仿真时间内(或指定的仿真时间段内),core下发的写操作与正在进行的写操作发生地址冲突的次数。
[0323]
l)写地址冲突率:仿真时间内(或指定的仿真时间段内),core下发的写操作与正在进行的写操作发生地址冲突的次数与统计采样数之间的比值。
[0324]
m)缓存状态升级率:缓存从共享状态变成独占状态的次数与统计采样数之间的比值。
[0325]
n)缓存状态降级率:缓存从独占状态变成共享状态的次数与统计采样数之间的比值。
[0326]
o)读取率:core的读取操作导致缓存向外发出读取操作的比例。
[0327]
p)写入率:core的写回操作实际导致缓存向外发出写回操作的比例。
[0328]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
技术特征:
1.一种处理器核外缓存模型,其特征在于,所述模型包括请求接口模块、读取处理模块、写入处理模块、命中检测模块、数据缓存模块和总线请求处理模块;所述请求接口模块用于根据请求接口时序接收读取请求和写入请求,将所述读取请求转换为读取事件发给所述读取处理模块,将所述写入请求转换为写入事件发给所述写入处理模块;所述请求接口模块还用于根据模式配置信息修改请求接口时序;所述数据缓存模块用于将所述读取事件对应的读取数据发送给所述读取处理模块;所述数据缓存模块还用于根据所述模式配置信息修改所述数据缓存模块的容量;所述读取处理模块用于通过所述命中检测模块获取所述读取事件的读取命中结果,并基于所述模式配置信息和所述读取命中结果获取所述读取数据;所述写入处理模块用于通过所述命中检测模块获取所述写入事件的写入命中结果,并基于所述模式配置信息和所述写入命中结果,根据所述写入事件或写入数据更新所述数据缓存模块;所述总线请求处理模块用于基于总线接口时序获取所述读取数据并发送至所述读取处理模块,基于所述总线接口时序获取所述写入数据并发送至所述写入处理模块;所述总线请求处理模块还用于根据所述模式配置信息修改所述总线接口时序。2.根据权利要求1所述的模型,其特征在于,所述模型还包括读取队列模块和写入队列模块;所述读取队列模块用于接收所述读取事件,所述写入队列模块用于接收所述写入事件;所述读取队列模块还用于对各所述读取事件与所述写入队列模块中的各所述写入事件做冲突检测,将无冲突的所述读取事件发送至所述读取处理模块;所述写入队列模块还用于对各所述写入事件与所述读取队列模块中的各所述读取事件做冲突检测,将无冲突的所述写入事件发送至所述写入处理模块;所述读取处理模块还用于在获取所述读取数据后,将其发送给所述读取队列模块。3.根据权利要求2所述的模型,其特征在于,所述命中检测模块和所述总线请求处理模块还用于在所述模式配置信息为无缓存信息时进入屏蔽状态;所述读取处理模块用于在所述模式配置信息为所述无缓存信息时,获取所述数据缓存模块中的所述读取数据;所述写入处理模块用于在所述模式配置信息为所述无缓存信息时,根据所述写入事件更新所述数据缓存模块。4.根据权利要求3所述的模型,其特征在于,所述读取处理模块还用于在所述模式配置信息为二级缓存信息或三级缓存信息时,若所述读取事件命中,则获取所述数据缓存模块中的所述读取数据;若所述读取事件未命中,则通过所述总线请求处理模块获取所述读取数据;所述写入处理模块还用于在所述模式配置信息为所述二级缓存信息或所述三级缓存信息时,若所述写入事件命中,则根据所述写入事件更新所述数据缓存模块;若所述写入事件未命中,则通过所述总线请求处理模块获取所述写入数据,并更新所述数据缓存模块。5.根据权利要求4所述的模型,其特征在于,所述模型还包括访存记录模块;所述读取处理模块还用于在所述模式配置信息为所述二级缓存信息或所述三级缓存信息时,在获取所述读取数据后根据所述读取数据更新所述访存记录模块;
所述写入处理模块还用于在所述模式配置信息为所述二级缓存信息或所述三级缓存信息时,在根据所述写入事件或所述写入数据更新所述数据缓存模块后,根据所述写入事件或所述写入数据更新所述访存记录模块。6.根据权利要求5所述的模型,其特征在于,所述模型还包括替换处理模块;所述读取处理模块或所述写入处理模块还用于在所述读取事件或所述写入事件未命中时,通过所述访存记录模块得到替换数据并发送给所述替换处理模块;所述替换处理模块用于将所述替换数据写出所述模型。7.根据权利要求6所述的模型,其特征在于,所述替换处理模块还用于根据所述替换数据生成替换写请求并发送给所述总线请求处理模块,并在接收到总线应答时写出所述替换数据;所述总线请求处理模块还用于将所述替换写请求转换为总线写请求并发送给总线;以及将接收到的所述总线应答发送给所述替换处理模块。8.根据权利要求4所述的模型,其特征在于,所述写入处理模块还用于在根据所述写入数据更新所述数据缓存模块后,根据所述写入数据更新所述命中检测模块;所述读取处理模块还用于在通过所述总线请求处理模块获取所述读取数据后,根据所述读取数据更新所述数据缓存模块和所述命中检测模块。9.根据权利要求7所述的模型,其特征在于,所述模型还包括窥探处理模块和窥探队列模块;当所述模式配置信息为二级缓存信息或三级缓存信息时:所述总线请求处理模块还用于接收窥探请求,并转换为窥探事件发送给所述窥探队列模块;所述窥探队列模块用于将各所述窥探事件与各所述读取事件、各所述写入事件进行冲突检测,得到无冲突的所述窥探事件并将其发送给所述窥探处理模块;所述窥探处理模块用于通过所述命中检测模块获取所述窥探事件的命中结果,根据所述命中结果生成窥探应答并发送至所述总线请求处理模块。10.根据权利要求9所述的模型,其特征在于,所述窥探处理模块还用于在所述窥探事件为数据窥探事件且所述窥探事件命中时,获取所述数据缓存模块中所述窥探事件对应的窥探数据;所述窥探处理模块生成的所述窥探应答中包括所述窥探数据。11.根据权利要求9所述的模型,其特征在于,所述读取处理模块、所述写入处理模块、所述命中检测模块、所述数据缓存模块、所述总线请求处理模块、所述读取队列模块、所述写入队列模块、所述访存记录模块、所述替换处理模块、所述窥探队列模块、所述窥探处理模块之间均采用事件信息的形式进行数据传输。12.根据权利要求1所述的模型,其特征在于,所述数据缓存模块包括缓存索引深度值、缓存行参数和缓存相关联度;所述缓存行参数和所述缓存索引深度、所述缓存组相关联度共同决定所述数据缓存模块的容量。13.一种处理器核外缓存模拟方法,其特征在于,所述方法包括:步骤s1,接收模式配置信息,并根据所述模式配置信息确定缓存数据的大小、请求接口时序和总线接口时序;根据所述请求接口时序接收读取请求和写入请求;步骤s2,将所述读取请求转换为读取事件,将所述写入请求转换为写入事件;步骤s3,基于所述模式配置信息和所述总线接口时序处理所述读取事件和所述写入事
件。14.根据权利要求13所述的方法,其特征在于,所述基于所述模式配置信息和所述总线接口时序处理所述读取事件和所述写入事件,包括:在所述模式配置信息为无缓存信息时,根据所述读取事件获取所述缓存数据中的读取数据;根据所述写入事件更新所述缓存数据。15.根据权利要求13所述的方法,其特征在于,所述基于所述模式配置信息和所述总线接口时序处理所述读取事件和所述写入事件,包括:在所述模式配置信息为二级缓存信息或三级缓存信息时:根据命中地址数据检测所述读取事件是否命中;若命中,则获取所述缓存数据中的读取数据;若未命中,则基于所述总线接口时序获取所述读取数据;根据所述命中地址数据检测所述写入事件是否命中;若命中,则根据所述写入事件更新所述缓存数据;若未命中,则基于所述总线接口时序获取写入数据,并根据所述写入数据更新所述缓存数据。16.根据权利要求13所述的方法,其特征在于,所述方法还包括:在执行完步骤s2后,将各所述读取事件与各所述写入事件进行冲突检测,得到无冲突的所述读取事件和无冲突的所述写入事件;基于无冲突的所述读取事件和无冲突的所述写入事件执行步骤s3。17.根据权利要求15所述的方法,其特征在于,所述方法还包括:在获取所述读取数据后,根据所述读取数据更新访存记录数据;在根据所述写入事件或所述写入数据更新所述缓存数据后,根据所述写入事件或所述写入数据更新所述访存记录数据。18.根据权利要求17所述的方法,其特征在于,所述方法还包括:在所述读取事件或所述写入事件未命中时,根据所述访存记录数据得到替换数据,并将所述替换数据写出。19.根据权利要求18所述的方法,其特征在于,所述方法还包括:根据所述替换数据生成替换写请求,将所述替换写请求转换为总线写请求;在接收到总线应答后,将所述替换数据写出。20.根据权利要求15所述的方法,其特征在于,所述方法还包括:在根据所述写入数据更新所述缓存数据后,根据所述写入数据更新所述命中地址数据;在基于所述总线接口时序获取所述读取事件对应的所述读取数据后,根据所述读取数据更新所述命中地址数据和所述缓存数据。21.根据权利要求15所述的方法,其特征在于,所述方法还包括:在所述模式配置信息为所述二级缓存信息或所述三级缓存信息时,接收窥探请求;将所述窥探请求转换为窥探事件,将各所述窥探事件与各所述读取事件、各所述写入事件进行冲突检测,得到无冲突的所述窥探事件;根据所述命中地址数据检测无冲突的所述窥探事件是否命中;根据所述窥探事件的命中结果生成窥探应答。22.根据权利要求21所述的方法,其特征在于,所述方法还包括:若所述窥探事件为数据窥探事件,则在所述窥探事件命中后,获取所述缓存数据中所
述窥探事件对应的窥探数据,并根据所述窥探数据和所述命中结果生成所述窥探应答。23.根据权利要求13所述的方法,其特征在于,所述方法还包括:通过调节缓存行参数、缓存索引深度和缓存组相关联度的大小来控制所述缓存数据的大小。
技术总结
本申请属于处理器技术领域,公开了一种处理器核外缓存模型及模拟方法,该模型包括:请求接口模块,用于将读取请求和写入请求分别转换为读取事件和写入事件以及根据模式配置信息修改请求接口时序;数据缓存模块,用于将读取数据发送给读取处理模块以及根据模式配置信息修改数据缓存模块的容量;读取处理模块,用于基于模式配置信息和命中检测模块的读取命中结果获取读取数据;写入处理模块,用于基于模式配置信息和写入命中结果,根据写入事件或写入数据更新数据缓存模块;总线请求处理模块,用于获取读取数据和写入数据和根据模式配置信息修改总线接口时序。本申请可通用于多种缓存的应用场景,减少对多个缓存模型的维护和移植难度。移植难度。移植难度。
技术研发人员:施葹 苟鹏飞 刘扬帆 王贺 徐越 陆泳
受保护的技术使用者:合芯科技(苏州)有限公司
技术研发日:2023.05.25
技术公布日:2023/8/23
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
