发明内容
本申请提供了一种混合缓存粒度下的请求处理方法、设备及存储介质,能够确保不同级缓存之间数据传输的一致性,实现了处理器芯粒内部缓存粒度不同、或处理器芯粒和总线芯粒的缓存粒度不同时,处理器芯粒与总线芯粒之间的互联。
第一方面,本申请实施例提供了一种混合缓存粒度下的请求处理方法,该方法应用于处理器,处理器中的二级缓存和一级缓存位于处理器芯粒,三级缓存位于总线芯粒;该方法包括:
获取一级缓存的一级缓存粒度和三级缓存的三级缓存粒度;
根据一级缓存粒度和三级缓存粒度确定缓存工作模式;
接收请求信息,并基于缓存工作模式处理请求信息。
进一步的,二级缓存的缓存粒度为第一数值;
请求信息包括读取请求、写入请求、窥探请求和自旋锁请求。
上述实施例说明了本申请可以在芯粒的混合缓存粒度下处理多种请求信息,令本申请不仅可以适用于单核或多核处理器,间接提高了本申请的适用性。
进一步的,第一数值为64字节,当一级缓存粒度为128字节、三级缓存粒度为64字节时,缓存工作模式为第一工作模式;上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行两次命中检测,并根据读取请求和两个读取命中结果向处理器芯粒中的处理器核发送128字节的读取数据;
根据写入请求在二级缓存中进行两次命中检测,并根据写入请求和两个写入命中结果更新二级缓存中64字节或128字节的缓存数据;
根据窥探请求在二级缓存中进行一次命中检测,并根据窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的128字节的地址。
上述实施例令本申请实现了当一级缓存粒度为128字节,三级缓存粒度为64字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
进一步的,第一数值为64字节,当一级缓存粒度为128字节、三级缓存粒度为128字节时,缓存工作模式为第二工作模式;上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行两次命中检测,并根据读取请求和两个读取命中结果向处理器芯粒中的处理器核发送128字节的读取数据;
根据写入请求在二级缓存中进行两次命中检测,并根据写入请求和两个写入命中结果更新二级缓存中2个64字节的缓存数据;
根据窥探请求在二级缓存中进行两次命中检测,并根据两个窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的128字节的地址。
上述实施例令本申请实现了当一级缓存粒度和三级缓存粒度均为128字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
进一步的,第一数值为64字节,当一级缓存粒度为64字节、三级缓存粒度为64字节时,缓存工作模式为第三工作模式;上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行一次命中检测,并根据读取请求和读取命中结果向处理器芯粒中的处理器核发送64字节的读取数据;
根据写入请求在二级缓存中进行一次命中检测,并根据写入请求和写入命中结果更新二级缓存中64字节的缓存数据;
根据窥探请求在二级缓存中进行一次命中检测,并根据窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的64字节的地址。
上述实施例令本申请实现了当一级缓存粒度和三级缓存粒度均为64字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
进一步的,第一数值为64字节,当一级缓存粒度为64字节、三级缓存粒度为128字节时,缓存工作模式为第四工作模式;上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行一次命中检测,并根据读取请求和读取命中结果向处理器芯粒中的处理器核发送64字节的读取数据;
根据写入请求在二级缓存中进行一次命中检测,并根据写入请求和写入命中结果更新二级缓存中64字节的缓存数据;
根据窥探请求在二级缓存中进行两次命中检测,并根据两个窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的128字节的地址。
上述实施例令本申请实现了当一级缓存粒度为64字节,三级缓存粒度为128字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
进一步的,上述基于工作模式处理请求信息,包括:
若读取请求或写入请求未命中,则通过总线获取未命中的请求数据;若未命中的请求数据为64字节,则根据地址偏移计算得到的总线数据中64字节的请求数据。
上述实施例解决了当三级缓存粒度为128B、未命中数据为64B时,传输到二级缓存中的数据和请求数据的大小不一致的情况,通过地址偏移得到128B中真正需要的64B,确保了多级缓存中数据传输的正确性、一致性。
进一步的,上述基于工作模式处理请求信息,包括:
当读取请求或写入请求未命中,并在二级缓存中产生替换数据时,在将替换数据发送到三级缓存之前,将替换数据标记上字节使能。
上述实施例通过字节使能用来标记哪些byte有效,解决了替换数据的大小和三级缓存粒度不同时,传输到三级缓存后无效的问题。
进一步的,该方法还包括:
检测一级缓存中是否存在替换数据;若存在,则无效一级缓存中替换数据所在的缓存行。
上述实施例在二级缓存产生替换数据时,同时检测一级缓存中该替换数据的存在,保证了与一级缓存之间数据的一致性。
进一步的,该方法还包括:
若窥探请求为无效请求,则检测无效请求对应的数据在一级缓存中是否存在;
若存在,则无效一级缓存中无效请求对应的数据所在的缓存行。
上述实施例通过在无效数据的时候同步无效掉一级缓存中可能存在的数据,保证了与一级缓存之间数据的一致性;同时考虑到了一级缓存粒度和二级缓存的缓存粒度可能不相同的情况,直接请求无效数据所在的缓存行,确保一级缓存的数据一定能够被无效。
进一步的,该方法还包括:
在记录自旋锁请求的地址后,若二级缓存接收到无效请求或产生替换数据,则检测无效请求对应的数据地址或替换数据的地址与自旋锁请求的地址是否一致;
若一致,则自旋锁请求失效,抢锁失败。
上述实施例通过将二级缓存中替换数据和无效数据的地址与记录的自旋锁地址进行对比,实现了对自旋锁请求的实时监测,避免了处理器核一直等待的情况,实现了二级缓存与处理器核之间数据的一致性,即发生自旋锁请求失效,则立即通知抢锁失败。
第二方面,本申请实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时执行如上述任一实施例的一种混合缓存粒度下的请求处理方法的步骤。
第三方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一实施例的一种混合缓存粒度下的请求处理方法的步骤。
综上,与现有技术相比,本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例提供的一种混合缓存粒度下的请求处理方法,通过设置多种缓存工作模式,当处理器芯粒和总线芯粒连接时,获取处理器芯粒中一级缓存的一级缓存粒度和总线芯粒中三级缓存的缓存粒度,从而确定当前的缓存工作模式,基于缓存工作模式来处理接收到的请求信息,确保不同级缓存之间数据传输的一致性,实现了处理器芯粒内部缓存粒度不同、或处理器芯粒和总线芯粒的缓存粒度不同时,处理器芯粒与总线芯粒之间的互联。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参见图1,本申请实施例提供了一种混合缓存粒度下的请求处理方法,该方法应用于处理器,处理器中的二级缓存和一级缓存位于处理器芯粒,三级缓存位于总线芯粒;该方法包括:
步骤S1,获取一级缓存的一级缓存粒度和三级缓存的三级缓存粒度。
步骤S2,根据一级缓存粒度和三级缓存粒度确定缓存工作模式。
步骤S3,接收请求信息,并基于缓存工作模式处理请求信息。
其中,一级缓存为L1缓存,二级缓存为L2缓存,三级缓存为L3缓存;处理器的Core和L1、L2一起位于处理器芯粒上,L3和总线位于总线芯粒上。
具体地,处理器芯粒上的L2与总线芯粒上的L3握手,握手后确认L1和L3的缓存粒度,根据L1和L3的缓存粒度确定缓存工作模式。
不同的缓存工作模式对请求信息的处理是不同的,在芯粒握手并确定缓存工作模式后,处理器便基于确定下来的环村工作模式处理接收到的请求信息。
上述实施例中提供的一种混合缓存粒度下的请求处理方法,通过设置多种缓存工作模式,当处理器芯粒和总线芯粒连接时,获取处理器芯粒中一级缓存的一级缓存粒度和总线芯粒中三级缓存的缓存粒度,从而确定当前的缓存工作模式,基于缓存工作模式来处理接收到的请求信息,确保不同级缓存之间数据传输的一致性,实现了处理器芯粒内部缓存粒度不同、或处理器芯粒和总线芯粒的缓存粒度不同时,处理器芯粒与总线芯粒之间的互联。
在一些实施例中,二级缓存的缓存粒度为第一数值。
请求信息包括读取请求、写入请求、窥探请求和自旋锁请求。
具体地,中间级的缓存优选为一级缓存粒度和三级缓存粒度中的最小值,即L2最优为64B,此时能够连接上下为128B/64B的L1/L3缓存,共4种缓存粒度配置,如果L2的缓存粒度为128B,那么会无法处理缓存粒度配置为L1=L3=64B的情况。
上述实施例说明了本申请可以在芯粒的混合缓存粒度下处理多种请求信息,令本申请不仅可以适用于单核或多核处理器,间接提高了本申请的适用性。
在一些实施例中,第一数值为64字节,当一级缓存粒度为128字节、三级缓存粒度为64字节时,缓存工作模式为第一工作模式。
请参见图2、图4、图6和图7,上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行两次命中检测,并根据读取请求和两个读取命中结果向处理器芯粒中的处理器核发送128字节的读取数据。
根据写入请求在二级缓存中进行两次命中检测,并根据写入请求和两个写入命中结果更新二级缓存中64字节或128字节的缓存数据。
具体地,因为L2=64B,L1=128B,所以64B的L2请求读取或写入的数据为128B,要分别检测请求的128B中的2个64B数据是否全部命中:
若全部命中,则将命中的2×64B的数据发送至Core,或更新L2中2×64B的缓存数据。
若仅命中了其中一个64B,则通过L3从总线中获取另一个未命中的64B的数据;在更新L2中的Tag RAM和Data RAM后,将命中和未命中的共2×64B的数据发送至Core,或者在L2中写入未命中的64B的数据。
若全部未命中,则通过L3从总线获取未命中的2×64B的数据,在更新L2中的TagRAM和Data RAM后,将未命中的2×64B的数据进行合并后发送至Core,或者将未命中的2×64B的数据进行合并后写入L2中。
根据窥探请求在二级缓存中进行一次命中检测,并根据窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的128字节的地址。
具体地,因为L3=L2=64B,所以仅访问一次L2的Tag RAM并进行可能的更新,其中访问一次L2的Tag RAM即为进行一次命中检测;是否要进行更新具体由窥探请求的请求内容来决定;若窥探请求命中且窥探请求需要请求数据,则将命中的数据一起放入窥探应答中发回总线,若命中但不请求数据或未命中,则直接发送窥探应答。
上述实施例令本申请实现了当一级缓存粒度为128字节,三级缓存粒度为64字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
在一些实施例中,第一数值为64字节,当一级缓存粒度为128字节、三级缓存粒度为128字节时,缓存工作模式为第二工作模式。
请参见图2、图4、图6和图7,上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行两次命中检测,并根据读取请求和两个读取命中结果向处理器芯粒中的处理器核发送128字节的读取数据。
根据写入请求在二级缓存中进行两次命中检测,并根据写入请求和两个写入命中结果更新二级缓存中2个64字节的缓存数据。具体地,因为L2=64B,L1=128B,所以L2请求读取或写入的数据为128B,要分别检测请求的128B中的2个64B数据是否全部命中:
若全部命中,则将命中的2×64B的数据发送至Core,或更新L2中2×64B的缓存数据。
若仅命中了其中一个64B,则通过L3从总线中获取128B总线数据,并获取其中包括的64B未命中的数据;在更新L2中的Tag RAM和Data RAM后,将命中和未命中的共2×64B的数据发送至Core,或者将2×64B的总线数据写入L2中。
若全部未命中,则通过L3从总线获取未命中的128B的数据,在更新L2的Tag RAM和Data RAM后,将未命中的2×64B的数据发给Core,或将未命中的2×64B的数据写入L2。
根据窥探请求在二级缓存中进行两次命中检测,并根据两个窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的128字节的地址。
具体地,因为L3=128B,所以需访问两次L2的Tag RAM并进行可能的更新,是否更新具体由窥探请求的请求内容来决定;若窥探请求命中且需要请求数据,则将命中的数据一起放入窥探应答中发回总线,若两次访问全部未命中,则直接发送窥探应答。
上述实施例令本申请实现了当一级缓存粒度和三级缓存粒度均为128字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
在一些实施例中,第一数值为64字节,当一级缓存粒度为64字节、三级缓存粒度为64字节时,缓存工作模式为第三工作模式。
请参见图3、图5、图6和图7,上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行一次命中检测,并根据读取请求和读取命中结果向处理器芯粒中的处理器核发送64字节的读取数据。
根据写入请求在二级缓存中进行一次命中检测,并根据写入请求和写入命中结果更新二级缓存中64字节的缓存数据。具体地,因为L1=L2=64B,即L2请求读取或写入的数据为64B,因此仅针对其请求的数据读取一次L2 Tag RAM、进行一次命中检测即可:
若命中,则将命中的64B的数据发送至Core,或者更新L2中64B的缓存数据。
若未命中,则通过L3从总线获取未命中的64B的数据,在根据未命中的数据更新L2的Tag RAM和Data RAM后,将未命中的64B数据发给Core,或将未命中的64B数据写入L2。
根据窥探请求在二级缓存中进行一次命中检测,并根据窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的64字节的地址。
具体地,因为L3=L2=64B,所以仅访问一次L2的Tag RAM并进行可能的更新,是否更新具体由窥探请求的请求内容来决定;若窥探请求命中且窥探请求需要请求数据,则将命中的数据一起放入窥探应答中发回总线,若命中但不请求数据或未命中,则直接发送窥探应答。
上述实施例令本申请实现了当一级缓存粒度和三级缓存粒度均为64字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
在一些实施例中,第一数值为64字节,当一级缓存粒度为64字节、三级缓存粒度为128字节时,缓存工作模式为第四工作模式。
请参见图3、图5、图6和图7,上述基于缓存工作模式处理请求信息,包括:
根据读取请求在二级缓存中进行一次命中检测,并根据读取请求和读取命中结果向处理器芯粒中的处理器核发送64字节的读取数据。
根据写入请求在二级缓存中进行一次命中检测,并根据写入请求和写入命中结果更新二级缓存中64字节的缓存数据。具体地,因为L1=L2=64B,即L2请求读取或写入的数据为64B,因此仅针对其请求的数据读取一次L2 Tag RAM、进行一次命中检测即可:
若命中,则将命中的64B的数据发送至Core,或者更新L2中64B的缓存数据。
若未命中,则通过L3从总线中获取128B总线数据,并获取其中包括的64B未命中的数据;在更新L2中的Tag RAM和Data RAM后,将未命中的64B的数据发送至Core,或者将未命中的64B的数据写入L2中。
根据窥探请求在二级缓存中进行两次命中检测,并根据两个窥探命中结果向总线发送窥探应答;根据自旋锁请求记录自旋锁请求的128字节的地址。
具体地,因为L3=128B,所以需访问两次L2的Tag RAM并进行可能的更新,是否更新具体由窥探请求的请求内容来决定;若窥探请求命中且需要请求数据,则将命中的数据一起放入窥探应答中发回总线,若两次访问全部未命中,则直接发送窥探应答。
上述实施例令本申请实现了当一级缓存粒度为64字节,三级缓存粒度为128字节的缓存配置下的请求信息的处理,保证了在该缓存粒度的配置下,不同级缓存之间数据传输的一致性,从而使得该缓存粒度的配置下的处理器芯粒和总线芯粒能够互联。
请参见图2-图5,在一些实施例中,上述基于工作模式处理请求信息,包括:
若读取请求或写入请求未命中,则通过总线获取未命中的请求数据;若未命中的请求数据为64字节,则根据地址偏移计算得到的总线数据中64字节的请求数据。
具体地,若L3=128B,但L2中有64B的数据未命中,则通过L3获取到的最新的总线数据为128B,需要根据地址偏移计算128B总线数据中实际需要的64B数据,并将这64B的数据发送至Core或写入L2中。
上述实施例解决了当三级缓存粒度为128B、未命中数据为64B时,传输到二级缓存中的数据和请求数据的大小不一致的情况,通过地址偏移得到128B中真正需要的64B,确保了多级缓存中数据传输的正确性、一致性。
请参见图2-图5,在一些实施例中,上述基于工作模式处理请求信息,包括:
当读取请求或写入请求未命中,并在二级缓存中产生替换数据时,在将替换数据发送到三级缓存之前,将替换数据标记上字节使能。
具体地,当L3=128B时,L2发送给L3的每一笔替换数据都为64B大小,和L3的缓存粒度不相同,因此替换数据需要标记Byte Enable。
若L2要传输2笔64B的替换数据,且2笔替换数据的tag相同,则可以合并为1笔传输。
上述实施例通过字节使能用来标记哪些byte有效,解决了替换数据的大小和三级缓存粒度不同时,传输到三级缓存后无效的问题。
请参见图2-图5,在一些实施例中,该方法还包括:
检测一级缓存中是否存在替换数据;若存在,则无效一级缓存中替换数据所在的缓存行。
具体地,当L2中产生替换数据时,同步检测L1中是否存在该替换数据,若L1中存在,则向L1中发送snoop请求来无效掉L1中存在的替换数据。
上述实施例在二级缓存产生替换数据时,同时检测一级缓存中该替换数据的存在,保证了与一级缓存之间数据的一致性。
请参见图6,在一些实施例中,该方法还包括:
若窥探请求为无效请求,则检测无效请求对应的数据在一级缓存中是否存在;
若存在,则无效一级缓存中无效请求对应的数据所在的缓存行。
具体地,若L2接收到的snoop请求的内容是要无效掉L2中的一部分数据,则会同时检测L1中是否有这个被无效的数据存在,若有,则无效掉该数据所在的整个缓存行。
在具体实施过程中,L2=64B且L1中存在L2被无效的64B数据,若L1=64B,则直接无效L1中该数据所在的64B;若L1=128B,则直接无效掉该64B数据所在的整个128B缓存行。
上述实施例通过在无效数据的时候同步无效掉一级缓存中可能存在的数据,保证了与一级缓存之间数据的一致性;同时考虑到了一级缓存粒度和二级缓存的缓存粒度可能不相同的情况,直接请求无效数据所在的缓存行,确保一级缓存的数据一定能够被无效。
请参见图7,在一些实施例中,该方法还包括:
在记录自旋锁请求的地址后,若二级缓存接收到无效请求或产生替换数据,则检测无效请求对应的数据地址或替换数据的地址与自旋锁请求的地址是否一致。
若一致,则自旋锁请求失效,抢锁失败。
具体地,在L2记录自旋锁地址后,若L2被其他缓存的snoop请求无效掉所存储的自旋锁地址,或者L2中因处理读取请求或写入请求未命中而产生替换数据,把自旋锁的地址作为替换数据写出去,都会导致自旋锁失效,抢锁失败。
其中,当L1缓存粒度为64B,L3的缓存粒度为64B,即自旋锁请求的地址为64B,无效请求对应的数据地址也为64B时,则直接判断两个64B的地址是否一致。
当L1缓存粒度为64B,L3的缓存粒度为128B时,即无效请求的数据地址为128B,则判断无效请求的数据128B的地址和自旋锁请求的地址高位(最低位忽略)是否一致。当L1=64B时,若L2中发生替换,则判断替换数据的64B地址和64B自旋锁请求的地址是否一致。
当L1缓存粒度为128B,L3的缓存粒度为128B,即自旋锁请求的地址为128B时,则判断自旋锁128B的地址高位和无效请求的数据地址是否一致。
当L1缓存粒度为128B,L3的缓存粒度为64B时,即无效请求的数据地址为64B,则判断无效请求数据的地址高位(最低位忽略)和自旋锁请求128B的地址是否一致。当L1=128B时,若L2中发生替换,则判断替换数据的地址高位和128B自旋锁请求的地址是否一致。
若在抢锁成功之前没有发生地址一致的情况,则Core可以顺利获得被自旋锁保护的资源。
上述实施例通过将二级缓存中替换数据和无效数据的地址与记录的自旋锁地址进行对比,实现了对自旋锁请求的实时监测,避免了处理器核一直等待的情况,实现了二级缓存与处理器核之间数据的一致性,即发生自旋锁请求失效,则立即通知抢锁失败。
以一个具体的例子说明本申请的一种混合缓存粒度下的请求处理方法实现过程:
本申请可以实现不同缓存粒度的cache hierarchy互联,包括cacheline sizescale down、same cacheline size、和cache line size scale up。由于L2和L1在同一个芯粒上,以L2 cache(inclusive with L1,即L1的缓存内容包含于L2)为参考,L2的cacheline size可以为min(L1,L3)=64B。
请参见图8,互联配置1-cacheline scale down。Core L1缓存为128B cachelinesize,总线L3缓存为64B cacheline size。
互联配置2-cacheline same 128B。Core L1缓存与总线L3缓存均为128Bcacheline size。
互联配置3-cacheline same 64B。Core L1缓存与总线L3缓存均为64B cachelinesize。
互联配置4-cacheline scale up。Core L1缓存为64B cacheline size,总线L3缓存为128Bcacheline size。
在本申请中,cache是指实际存储某个地址数据的存储单元(array),dir是指存储某个地址的cacheline的状态和高位地址(tag)的存储单元(array)。
在上电复位后,CPU chiplet上的L2首先会与Fabric chiplet进行握手,确认互相的cacheline size。cacheline size在运行时不会改变。
互联配置1:128B cacheline size的Core发生store时,L2中granule为64B,因此store操作会对应更新64B或128B的data;Core发生load时,L2需要对应传输给Core 2x64B的data,此时如果L2 miss,可能最多在fabric上产生两笔snoop请求;L2发生victim cast-out(cache替换)时,由于fabric cacheline size为64B,因此最多可能会产生两次cast-out(也有可能只产生一次,如果某一个64B在L2中已经命中);fabric发起snoop操作,比如snoop invalidate时,一次snoop请求影响64B。Core发起128B spinlock(自旋锁)时,L2中的64B snoop操作会影响128B的spinlock。
配置2:128B cacheline size的Core发生store时,L2中granule为64B,因此store操作会对应更新2x64B的data;Core发生load时,对应更新2x64B的data,一次在fabric上产生一次request/snoop;L2发生victim cast-out时,由于fabric cacheline size为128B,因此cast-out时需要额外标记byte enables,用于标记哪些byte有效,数据在L3的cache中进行合并,状态在L3的dir中进行合并。Fabric发起snoop操作时,一次snoop影响128B。Core发起128B spinlock时,L2中的128Bsnoop会一一对应Core的spinlock地址。
配置3:64B cacheline size的Core发生store时,L2中granule为64B,因此store操作会对应更新1x64B的data;Core发生load时,对应更新1x64B的data,一次在fabric上产生一次request/snoop;L2发生victim cast-out时,由于fabric cacheline size为一致的64B,因此可以直接写出。fabric发起snoop操作,比如snoop invalidate时,一次snoop影响64B。Core发起64Bspinlock时,L2中的64B会一一对应core的spinlock地址。
配置4:64B cacheline size的Core发生store时,L2中granule为64B,因此store操作会对应更新1x64B的data;core发生load时,对应更新1x64B的data,一次在fabric上产生一次request,但是会额外标记critical hexword,这样fabric会传输需要的64B。fabric发起snoop操作,比如snoop invalidate时,一次snoop影响128B。Core发起64B spinlock时,L2中的128snoop会根据critical hexword(64B的偏移地址)匹配spinlock地址。
本申请可以解决不同cacheline size(缓存粒度)的处理器芯粒和总线芯粒互联问题,能让各个芯粒可以互相复用,比如64B cacheline size的CPU chiplet,可以与64B或128B cacheline size的fabric chiplet互联;128B cacheline size的CPU chiplet,也可以与64B或128B cacheline size的fabric chiplet互联。而且在互联时无需重新设计CPUchiplet或fabric chiplet。根据芯粒间传输包的field中关于cacheline size的大小,处理器芯粒与总线芯粒可以自行进行适配。
本申请实施例提供了一种计算机设备,该计算机设备可以包括通过***总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。处计算机程序被处理器执行时,使得处理器执行如上述任一实施例的一种混合缓存粒度下的请求处理方法的步骤。
本实施例提供的计算机设备的工作过程、工作细节和技术效果,可以参见上文中关于一种混合缓存粒度下的请求处理方法的实施例,于此不再赘述。
本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一实施例的一种混合缓存粒度下的请求处理方法的步骤。其中,所述计算机可读存储介质是指存储数据的载体,可以但不限于包括软盘、光盘、硬盘、闪存、优盘和/或记忆棒(Memory Stick)等,所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。
本实施例提供的计算机可读存储介质的工作过程、工作细节和技术效果,可以参见上文中关于一种混合缓存粒度下的请求处理方法的实施例,于此不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。