CN116685958A - 一种访问数据的方法和装置 - Google Patents
一种访问数据的方法和装置 Download PDFInfo
- Publication number
- CN116685958A CN116685958A CN202180086851.0A CN202180086851A CN116685958A CN 116685958 A CN116685958 A CN 116685958A CN 202180086851 A CN202180086851 A CN 202180086851A CN 116685958 A CN116685958 A CN 116685958A
- Authority
- CN
- China
- Prior art keywords
- node
- cache
- nodes
- data
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请实施例提供一种访问数据的方法和装置,涉及芯片技术领域,能够减少CPU完成原子运算的时延,降低多核CPU抢锁带来的原子操作的冲突率与系统开销,提升原子操作的吞吐量。其方法为:第一节点接收第一缓存层的多个缓存节点发送的多个第一读请求,多个第一读请求均用于请求第一地址的运算权限;第一节点用于管理所述多个缓存节点的一致性;按照多个缓存节点分别发送的第一个第一读请求的顺序确定多个缓存节点获取运算权限的顺序;获取到运算权限时,按照多个缓存节点获取运算权限的顺序,控制运算权限在多个缓存节点间转移。本申请实施例用于基于缓存一致性,在缓存中执行数据的读改写操作。
Description
本申请实施例涉及芯片技术领域,尤其涉及一种访问数据的方法和装置。
现代计算机系统和多核芯片在硬件上都支持共享内存(shared memory),即该共享内存可以被多个中央处理器(Central Processing Unit,CPU)访问,以作为软件进程间共享和传递数据的一个媒介,可以提高进程间的通信效率。为了保证多个CPU对共享内存的同一内存地址进行读改写操作后,软件最终能得到正确的执行结果,提出了各类存储一致性模型(memory consistency model),即多个CPU需遵从一定的访问顺序规则去读改写共享内存,可获得正确的执行结果,反之,则执行结果的正确性不受保证。由于不同的存储一致性模型所定义的读写规则不同,CPU会乱序执行没有依赖关系的指令以实现更多性能,多个线程间也允许交织运行以提高吞吐量,为了保证多线程交织运行过程中读改写操作的执行顺序,提出了同步机制(synchronizat ion)。在同步机制中,对一个共享变量进行读改写操作的原子访问行为是通过原子操作(atomic operation)完成的,对于实现一系列指令的原子访问行为是通过用锁(l ock)和临界区(critical section)的方式完成的。不论是原子操作还是锁和临界区,在硬件底层逻辑中,都是通过原子指令(atomic instruction)去完成对共享变量的读改写操作。
目前,计算机系统和多核芯片会在内存(memory)层级中增加高速缓冲存储器(cache),又称缓存,来减少访问内存的时延。通常,系统中会引入多层级的缓存,即缓存层级化(cache hierarchy)或者多层级缓存(multi-level cache)。为了保证同一时刻不同CPU访问同一缓存行(cache line)地址时读到的数据的正确性,多个CPU在同一时刻对同一个共享变量进行读改写操作时需要支持缓存一致性(cache coh erence)。该缓存一致性通常基于修改-独占-共享-无效(Modified-Exclusive-Share d-Invalid,MESI)一致性协议(coherence protocol)实现。在MESI一致性协议中,CPU对一个共享变量进行改写需要先获取该共享变量的独占(Exclusive,E)状态,也就是有该共享变量的物主权(ownership)改写的权限,即该共享变量所在的共享内存地址的运算权限,因此CPU通过原子指令完成对共享变量的读改写操作时也需要先获取该共享变量的E状态。但是,当多个CPU同时对同一个共享变量进行读改写时,就会出现E状态被多个CPU争抢导致E状态频繁迁移的情况,即物主权迁移(ownership migration)。而ownership migration会造成很大的系统开销(overhead),导致多核CPU执行原子指令吞吐量差。
发明内容
本申请实施例提供一种访问数据的方法和设备,可以在多层级缓存系统架构中,提高多核CPU执行原子操作的吞吐量。
为达到上述目的,本申请实施例采用如下技术方案:
第一方面,本申请实施例提供了一种访问数据的方法,该方法包括:第一节点接收第一缓存层的多个缓存节点发送的多个第一读请求,多个第一读请求均用于请求第一地址的运算权限;第一节点用于管理多个缓存节点的一致性;第一节点按照多个缓存节点分别发送的第一个第一读请求的顺序确定多个缓存节点获取运算权限的顺序;第一节点获取到运算权限时,按照多个缓存节点获取运算权限的顺序,控制运算权限在多个缓存节点间转移。
由此,当有多个CPU同时需要对同一地址进行读改写操作时,通过第一节点将改写该地址中数据的运算权限自下而上层级(第一节点接收到多个缓存节点的第一读请求,第一节点可以认为是第一缓存层的下一层级。)进行调度转移管理,使该运算权限在缓存节点间转移,从而可以在CPU核内部缓存层级进行近原子(near atomic)运算,减少CPU完成原子运算的时延。也可以避免现有技术中原子指令在公共交织节点排队造成入口队列拥塞,降低多核CPU抢锁带来的原子操作的冲突率与系统开销,提升原子操作的吞吐量。
在一种可能的设计中,第一节点获取到运算权限时,按照多个缓存节点分别发送的第一个第一读请求的顺序,控制运算权限在多个缓存节点间转移包括:第一节点获取到运算权限时,若第一缓存节点为多个缓存节点中第一个获取运算权限的节点,则第一节点向第一缓存节点发送运算权限;第一节点从第一缓存节点获取第一数据,第一数据为第一缓存节点对第一地址的运算结果,并向第二缓存节点发送第一数据和运算权限,第二缓存节点为多个缓存节点中第二个获取运算权限的节点。
由此,当第一缓存节点在得到对第一地址的运算权限时,可以在对第一缓存节点需要处理的第一读请求进行处理而不受其他缓存节点的干扰,其他缓存节点也不需要执行抢锁操作。当第一缓存节点对应的CPU在第一缓存节点执行第一地址的运算得到原酸结果时,可以将第一缓存节点对第一地址的运算结果和运算权限发送给第二缓存节点,以便第二缓存节点的CPU可以对第一地址再进行运算。这样,可以保证每个缓存节点获取到的数据都是对第一地址进行运算的最新的运算结果,用于保证缓存一致性。
在一种可能的设计中,第一节点从第一缓存节点获取第一数据包括:第一节点确定第一缓存节点获取运算权限的时间到达第一时间段时,从第一缓存节点获取第一数据;其中,第一时间段是第一节点根据第一节点所在的层级确定的。
由此,设置第一时间段可以保证每个缓存节点获取到运算权限后使用该运算权限能够处理多条第一读请求,避免出现运算权限被争抢导致频繁迁移的情况,同时也能够保证多个缓存节点对第一地址进行运算的公平性。
在一种可能的设计中,第一缓存层为一级L1缓存层,多个缓存节点分别对应多个中央处理器CPU的专有缓存;第一节点为二级L2缓存层的节点,第一节点为多个缓存节点对应的多个CPU的共享缓存;多个缓存节点和第一节点属于同一非一致内存访问NUMA域。这样,对于同一个NUMA域内的节点,第一节点决定运算权限在第一缓存层的多个缓存节点间的转移,可以保证该多个缓存节点的缓存一致性。
在一种可能的设计中,第一节点获取到运算权限包括:第一节点向第二节点发送第二读请求,第二读请求用于请求第一地址的运算权限;第二节点用于管理多个第一 节点的一致性,第二节点和第二节点管理的多个第一节点属于同一die;第一节点接收第二节点发送的第一读响应,第一读响应包括运算权限。这样,对于同一die内的节点,第二节点决定运算权限在多个第一节点间的转移,可以保证该多个第一节点的缓存一致性。
在一种可能的设计中,第二节点确定第一节点获取运算权限的时间到达第二时间段时,从第一节点获取第二数据,第二数据为第一节点得到的第一地址的最新运算结果,第二节点向第三节点发送第二数据和运算权限,第三节点为与第一节点在同一缓存层且属于同一die的节点。可以理解,第二节点是第一节点和第三节点的一致性节点。第一节点和第三节点不需要执行对第一地址运行运算的抢锁操作,由第一节点控制运算权限的转移。
在一种可能的设计中,第一缓存层为二级L2缓存层,多个缓存节点分别为多个CPU的共享缓存;第一节点为缓存的本地代理,用于对内存进行读写操作。例如,第一节点和第三节点为L2缓存层的L2_0节点和L2_1节点,第二节点为home agent。当home agent有对第一地址进行运算的运算权限时,可以控制运算权限在L2_0节点和L2_1节点间转移,保证L2缓存层的一致性。
第二方面,本申请实施例提供了一种通信装置,通信装置包括第一节点和第一缓存层的多个缓存节点,第一节点用于:接收多个缓存节点发送的多个第一读请求,多个第一读请求均用于请求第一地址的运算权限;第一节点用于管理多个缓存节点的一致性;按照多个缓存节点分别发送的第一个第一读请求的顺序确定多个缓存节点获取运算权限的顺序;获取到运算权限时,按照多个缓存节点获取运算权限的顺序,控制运算权限在多个缓存节点间转移。第二方面所达到的有益效果可以参见第一方面中有益效果。
在一种可能的设计中,第一节点具体用于:获取到运算权限时,若第一缓存节点为多个缓存节点中第一个获取运算权限的节点,则向第一缓存节点发送运算权限;从第一缓存节点获取第一数据,第一数据为第一缓存节点对第一地址的运算结果,并向第二缓存节点发送第一数据和运算权限,第二缓存节点为多个缓存节点中第二个获取运算权限的节点。
在一种可能的设计中,第一节点具体用于:确定第一缓存节点获取运算权限的时间到达第一时间段时,从第一缓存节点获取第一数据;其中,第一时间段是第一节点根据第一节点所在的层级确定的。
在一种可能的设计中,第一缓存层为一级L1缓存层,多个缓存节点分别对应多个中央处理器CPU的专有缓存;第一节点为二级L2缓存层的节点,第一节点为多个缓存节点对应的多个CPU的共享缓存;多个缓存节点和第一节点属于同一非一致内存访问NUMA域。
在一种可能的设计中,第一节点具体用于:向第二节点发送第二读请求,第二读请求用于请求第一地址的运算权限;第二节点用于管理多个第一节点的一致性,第二节点和第二节点管理的多个第一节点属于同一die;接收第二节点发送的第一读响应,第一读响应包括所述运算权限。
在一种可能的设计中,第二节点确定第一节点获取运算权限的时间到达第二时间 段时,从第一节点获取第二数据,第二数据为第一节点得到的第一地址的最新运算结果,第二节点向第三节点发送第二数据和运算权限,第三节点为与第一节点在同一缓存层且属于同一die的节点。
在一种可能的设计中,第一缓存层为二级L2缓存层,多个缓存节点分别为多个CPU的共享缓存;第一节点为缓存的本地代理,用于对内存进行读写操作。
第三方面,一种计算机可读存储介质,包括计算机指令,当计算机指令在通信装置上运行时,使得通信装置执行上述第一方面以及第一方面中的任一种可能的设计所述的方法。
第四方面,一种计算机程序产品,当计算机程序产品在计算机上运行时,使得通信装置执行上述第一方面以及第一方面中的任一种可能的设计所述的方法。
上述其他方面对应的有益效果,可以参见关于方法方面的有益效果的描述,此处不予赘述。
图1为现有技术中一种访问数据的方法示意图;
图2为本申请实施例提供的系统架构示意图;
图3为本申请实施例提供的通信装置的硬件结构示意图;
图4为本申请实施例提供的访问数据的方法的流程示意图;
图5为本申请实施例提供的访问数据的方法的流程示意图;
图6A为本申请实施例提供的通信装置的结构示意图;
图6B为本申请实施例提供的通信装置的结构示意图。
为了便于理解,示例性地给出了部分与本申请实施例相关概念的说明以供参考。如下所示:
原子指令:用于同步机制中对临界区的保护,完成对共享变量的读改写操作。
原子操作:指不可中断的一个或一系列操作。在单核CPU中,能够在一个指令中完成的操作可以看作为原子操作。原子操作不会被交错,一旦开始就运行到结束,不会切换到另一个线程。
锁:多线程访问共享内存,为了保证共享内存互斥访问,需要给内存加锁,拥有该共享内存锁的线程才能访问该共享内存。可以理解为,多个CPU发送访问同一地址的指令时,需要执行抢锁操作,抢到锁的CPU可以执行对该地址的运算操作。
临界区:共享内存无法同时被多个线程进行访问,当有线程进入临界区时,其他线程或进程必须等待。
MESI一致性协议:MESI中每个缓存行都有四个状态,分别是修改(Modify,M)状态、独占(Exclusive,E)状态、共享(Share,S)状态以及无效(Invalid,I)状态。
M状态是指该缓存行中的数据(即本申请中的变量)已经被修改,且该数据与主存中的数据不一致,以当前缓存行中的数据为准。该缓存行中的数据需要在未来的某个时间点(在允许其它CPU读取主存中相应数据之前)写回(write back)主存。当被写回主存之后,该缓存行的状态会变成E状态。
E状态是指该缓存行中的数据与主存中的数据一致,且该数据仅存在于该CPU的 缓存中,即本层级缓存对应的处理器核独占该数据,是未被修改过的(clean)。该状态可以在任何时刻当有其它CPU读取该缓存行时变成S状态,当有CPU修改该缓存行中数据时,该状态会变成M状态。
S状态是指该缓存行中的数据与主存中的数据一致,且该数据存在于多个缓存行中,即多个处理器核共享该数据。当有CPU修改该缓存行中数据时,其它CPU中该缓存行被作废,会变成无效I状态。
I状态是指缓存行中的数据为不可用的无效数据(可能有其它CPU修改了该缓存行)。
非一致内存访问(Non-Unified Memory Access,NUMA):一部分存储区域管理一部分地址,本申请实施例中,一个簇(cluster)可以理解为一个NUMA域。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
CPU在不同缓存层级完成原子指令的时延不同,可以称在CPU内部缓存完成的原子指令为近原子的原子指令(near atomic),称在SOC侧缓存完成的原子指令为远原子的原子指令(far atomic),根据对多层级缓存的定义,CPU内部缓存例如可以包括第一层级缓存(Level 1 Cache,L1 Cache)时,SoC侧缓存例如可以包括第二层级缓存(Level 2 Cache,L2 Cache)或包括L2 Cache和第三层级缓存(Level 3 Cache,L3 Cache);或者CPU内部缓存例如包括L1 Cache和L2 Cache时,SoC侧缓存例如可以包括L3 Cache。可以理解,CPU完成far atomic的时延会比完成near atomic的时延更长。目前,为了避免出现多核CPU对E状态争抢的情况,如图1所示,可以是将所有多核CPU发送的原子指令经过多层级缓存都汇聚到一个公共交织节点,由该公共交织节点向本地代理(home agent)申请获取各个CPU待改写的变量的E状态,然后在公共交织节点按照调度顺序依次执行多核CPU发送的原子指令。即多核CPU的原子指令都是在公共交织节点以far atomic完成的,因此存在较大的时延。并且,当系统中存在多个CPU同时访问同一内存地址的原子指令的时,即多个CPU需要同一个E状态时,会有大量原子指令汇聚在公共交织节点从而造成入口队列拥塞。由于公共交织节点的缓存(buffer)所能容纳的原子指令的数量有限,当公共交织节点的buffer所容纳的原子指令的数量达到上限时,其余的原子指令不能存入buffer,因此CPU就需要再次重发该原子指令,这会造成公共交织节点进行通道反压,使得该原子指令的吞吐量下降,运算速度变慢,进而影响系统性能。
原子指令又分为有条件的(conditional)原子指令和无条件的(non-conditional)原子指令。conditional原子指令在公共交织节点的memory进行原子运算之前需要先 进行条件判断,当判断有效时才进行原子运算,例如CAS算法中用的原子比较(atomic compare),只有当CPU发送的原子指令中的比较值(compare value)和从内存获取的内存值(memory value)相同(根据原子指令的地址读取的数据未被其他CPU修改)时,才进行原子运算。non-conditional原子指令是直接在公共交织节点的memory进行原子运算,无需先进行条件判断再执行原子运算,例如Atomic Add,Atomic Swap等指令。
在多核CPU在公共交织节点执行conditional原子指令的场景中,例如互斥锁(mutual exclusive lock)场景中,只有一个CPU能抢到锁,其余排队的原子指令实质上都是抢锁失败的。在这种场景下,这些排队的原子指令不仅会造成入口队列拥塞,而且由于抢锁失败,这些conditional原子指令在进行atomic compare时,大部分的原子指令都会比较失败从而不能完成原子运算。这些比较失败的原子指令不进行原子运算对系统运转不会造成影响,所以大部分比较失败的原子指令进行排队就是没有必要的,反而会导致系统整体吞吐量不高。
可以理解,这种导致系统整体吞吐量不高的问题在多核CPU跨NUMA域进行原子操作时尤为严重,由于维护缓存一致性会产生ownership migration的问题,在这种场景下,ownership migration所造成的系统开销很大,即多会发生跨NUMA域抢锁的事件。尤其是临界区工作量越小时,每个CPU抢到锁的时间较短,在短时间内进行原子运算后又会被其他CPU抢到锁,因此这种频繁的ownership migration所造成的系统开销就越大。此外,当涉及跨die(裸片)跨片访问时系统开销也尤为严重,最终导致的结果是在多核CPU同时执行原子操作时,吞吐量较低。当前已有的软件技术是通过在同一NUMA域内进行抢锁来实现锁跨NUMA域轮转,相当于在位于同一NUMA域内的多个CPU之间进行抢锁,一段时间后再将锁转移到下一个NUMA域内,使下一个NUMA域内的多个CPU进行抢锁,从而实现锁跨NUMA域轮转的效果,但这依旧存在多个CPU抢锁的情况,导致ownership migration频繁、造成很大的系统开销,吞吐量较低。
因此,本申请提出一种访问数据的方法,该方法可以应用于一种通信装置,本申请中的通信装置可以理解为芯片,例如消费类芯片、工业类芯片等所有通用芯片。考虑到现有技术中多核CPU执行原子操作时进行抢锁造成的吞吐量低的问题,本申请在多层级cache系统架构中,多核CPU同时对同一地址执行原子操作从而发生原子操作冲突的场景中,通过一致性管理节点自下而上层级进行E态调度转移管理,CPU获取E状态后在CPU核内部缓存层级进行near atomic运算,来减少CPU完成原子运算的时延,可以避免原子指令在公共交织节点排队造成入口队列拥塞,降低多核CPU抢锁带来的原子操作的冲突率与系统开销,提升原子操作的吞吐量。
如图2所示,本申请实施例可以应用于多层级cache系统架构中。cache是位于CPU与memory之间的临时存储器。通常,cache可以分为L1 Cache,L2 Cache,部分CPU还具有L3 Cache。当CPU要读取一个数据时,首先从L1 Cache中查找,如果没有查找到数据,再从L2 Cache中查找,如果继续未查找到数据,可以从L3 Cache或memory中查找。
图2所示为一个典型的多层级cache系统,共有2个cache层级,分别为L1 Cache和L2 Cache。L1_0、L1_1、L1_2和L1_3分别表示CPU0、CPU1、CPU2和CPU3的私有 的L1 Cache(private L1 Cache),L2_0表示cluster0内CPU可共享的L2 Cache(shared L2 Cache),每个cluster内的多个L1 Cache由同cluster内的下一层级L2 Cache管理一致性,即L1_0、L1_1、L1_2、L1_3和L2_0在同一个cluster0内,且L2_0管理L1_0、L1_1、L1_2和L1_3的一致性。每个cluster内的L2 Cache由同die内的下一级home agent管理一致性,例如L1_0、L1_1、L1_2、L1_3、L1_4、L1_5、L1_6、L1_7、L2_0、L2_1和home agent在同一个die内,且home agent管理L2_0、L2_1的一致性。因此对于cluster内的L1 Cache而言,它的一致性管理节点是同cluster内的L2 Cache,对于L2 Cache而言,它的一致性管理节点是同die内的home agent。
本申请实施例可以应用于通信装置,如图3所示,其示出了一种通信装置的硬件结构示意图,该通信装置可以包括本申请实施例中的芯片,图3中以芯片300示例的芯片。芯片300可包括处理器301、内存控制器(memory controller)302以及多级缓存303等。
可以理解的是,本申请实施例示意的结构并不构成对芯片300的具体限定。在本申请另一些实施例中,芯片300可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
其中,处理器301可以包括一个或多个处理单元。例如:处理器301可以包括图形处理器(graphics processing unit,GPU)、中央处理器(central processing unit,CPU)、和/或神经网络处理器(neural network processing unit,NPU)等。其中,不同的处理单元可以是独立的部件,也可以集成在一个或多个处理器中。在一些实施例中,芯片300也可以包括一个或多个处理器301,多个处理器可以理解为多核CPU。
处理器301可以包括多级缓存303的一部分,用于存储指令和数据。这里的多级缓存303的一部分可以理解为CPU内部缓存。在一些实施例中,CPU内部缓存可以为高速缓冲存储器,例如上述L1 cache。该L1 cache可以保存处理器301最近使用过或循环使用的指令或数据,如果CPU需要再次使用该指令或数据,可从L1 cache中直接调用,减少了CPU的等待时间,提高了系统的效率。在本申请实施例中,CPU内部缓存还可以理解为L1 Cache和L2 Cache。即L1 Cache和L2 Cache为CPU核内部缓存层级,可以用于CPU进行near atomic运算。其中,L1 Cache为CPU内部私有的缓存层级,L2 Cache为CPU内部共享的缓存层级。
处理器301可以理解为是芯片300的神经中枢和指挥中心。可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
内存控制器302用于管理内存中的数据读写操作,内存控制器302还可以包括本地代理(home agent),可以用于实现对内存的读写操作。本申请实施例中,home agent可以用于负责芯片300的L2 cache的缓存一致性管理。可以理解,home agent位于CPU核外部,可以用于CPU进行far atomic运算。本申请实施例中,home agent还可以为CPU提供访问内存地址时的E状态。
多级缓存303的其余部分可以理解为CPU外部缓存,即处于SoC上的缓存层级,例如L3 cache。
应用上述本申请提供的芯片,下面结合附图对本申请针对芯片所提出的访问数据 的方法中,在通信装置,例如芯片的多核CPU同时对同一内存地址执行原子操作的场景中,由一致性管理节点自下而上层级进行E状态调度管理的过程进行介绍。
如图4所示,本申请实施例提供一种访问数据的方法,以多层级Cache系统架构中有2个Cache层级(L1 Cache和L2 Cache)和1个home agent层级为例,其中,L1 Cache和L2 Cache为CPU核内部缓存层级,该方法包括:
步骤401、第一节点接收第一缓存层的多个缓存节点发送的多个第一读请求。
在一些实施例中,多个第一读请求均用于请求第一地址的运算权限(E状态),任一节点只有获取了该第一地址的运算权限才能够对该第一地址中的数据进行改写操作。可以理解,改写同一内存地址的数据所需要的运算权限相同,改写不同内存地址的数据所需要的运算权限状态不同。
本申请的第一地址被多个CPU访问,可以理解为第一地址被多个CPU执行读改写操作。
本申请实施例中,第一节点用于管理第一缓存层的多个缓存节点的一致性,即第一节点可以控制运算权限在第一缓存层的多个缓存节点之间转移,一段时间内只有一个CPU能够获取该第一地址的运算权限,即一段时间内只允许一个CPU对第一地址中的数据在第一缓存层的多个缓存节点上进行改写操作,从而保证多个缓存节点之间的缓存一致性。
示例性的,第一节点可以为home agent或L2 Cache。
当第一节点为home agent时,第一缓存层可以为L2 Cache,多个缓存节点可以分别对应图2中的L2_0和L2_1。在此场景下,步骤401可以理解为home agent接收多个L2 Cache发送的多个第一读请求。这种情况下,当多个L2 cache确定本地存储有第一地址的数据时,L2 cache向home agent发送的第一读请求用于请求对第一地址的运算权限,或者当L2 cache确定本地未存储第一地址的数据时,L2 cache向home agent发送的第一读请求用于请求第一地址的数据和对第一地址的运算权限。在L2 cache向home agent发送第一读请求之前,L2 cache还可能会接收到多个L1 cache发送的读请求,用于向L2 cache请求第一地址的数据和运算权限,之后L2 cache再向home agent发送第一读请求,以向home agent请求对第一地址的运算权限。应理解,L2_0或L2_1可以下发一个或多个读请求至home agent,均用于请求同一内存地址的运算权限。
当第一节点为L2 Cache时,第一缓存层为L1 Cache,以第一节点为图2中的L2_0为例,多个缓存节点可以包括图2中的L1_0、L1_1、L1_2和L1_3。在此场景下,步骤401可以理解为L2 Cache(即L2_0)接收多个L1 Cache(即L1_0、L1_1、L1_2和L1_3)发送的多个第一读请求。这种情况下,多个L1 cache确定本地未存储有第一地址的数据(L1 cache初始态为无效态),L1 cache向L2 cache发送的第一读请求用于请求第一地址的数据和对第一地址的运算权限。在L1 cache向L2 cache发送第一读请求之前,L1 cache还会接收到CPU发送的读请求,用于向L1 cache请求第一地址的数据和运算权限,之后L1 cache再向L2 cache发送第一读请求,以向L2 cache请求对第一地址的数据和运算权限。应理解,L1_0、L1_1、L1_2和L1_3可以下发一个或多个第一读请求至L2 Cache,均用于请求同一内存地址的数据和运算权限。
在一些实施例中,第一读请求还可以用于请求第一地址的数据以及运算权限。示例性的,当第一节点为home agent时,若L1 cache和L2 cache中未存储第一地址的数据,则home agent从L2 cache接收到的第一读请求用于同时请求第一地址的数据以及运算权限。若L2 cache中存储有第一地址的数据,则L2 cache可以不用再向home agent请求第一地址的数据,只请求第一地址的运算权限即可。
与第一节点为home agent时的区别在于,当第一节点为L2 Cache时,第一缓存层为L1 Cache,而L1 Cache的初始状态为I状态,可以理解为L1 Cache中的数据是无效的,不可用的。因此L1 Cache中的缓存节点可向L2 cache下发第一读请求,第一读请求均用于请求第一地址的数据以及运算权限。L2 cache接收到L1 Cache发送的第一读请求之后,再根据自身是否存储有第一地址的数据来判断向home agent发送的读请求为请求第一地址的数据以及运算权限的读请求还是只请求第一地址的运算权限即可。
步骤402、第一节点按照多个缓存节点分别发送的第一个第一读请求的顺序确定多个缓存节点获取运算权限的顺序。
其中,每个缓存节点可以向第一节点发送一个或多个第一读请求,按照多个缓存节点分别发送的第一个第一读请求的顺序确定多个缓存节点获取运算权限的顺序可以理解为,将多个缓存节点按照其发送第一个第一读请求的时间进行排队。
示例性的,当第一节点为L2 Cache时,以第一节点为图2中的L2_0为例,多个缓存节点可以分别对应图2中的L1_0、L1_1、L1_2和L1_3。假设L1_0先向L2_0发送了读请求1,之后L1_2向L2_0发送了读请求2,然后L1_0又向L2_0发送了读请求3,最后L1_1向L2_0发送了读请求4,则L1_0发送了两个读请求,L1_0按照发送第一个读请求的时间进行排队,即L1_0按照发送读请求1的时间进行排队。那么L2_0确定这3个缓存节点获取运算权限的顺序为L1_0-L1_2-L1_1。由于L1_3没有发送读请求,因此L1_3不在该顺序中。
同理,当第一节点为home agent时,home agent获取到运算权限时,按照L2 Cache的多个缓存节点分别发送的第一个第一读请求的顺序,确定L2 Cache的多个缓存节点获取所述运算权限的顺序。
步骤403、第一节点获取到运算权限时,按照多个缓存节点获取所述运算权限的顺序,控制运算权限在多个缓存节点间转移。
示例性的,当第一节点为L2 Cache时,L2 Cache在获取到运算权限时,会按照步骤402中确定的L1 Cache的多个缓存节点获取运算权限的顺序,控制运算权限在L1 Cache的多个缓存节点间进行转移。同理,当第一节点为home agent时,home agent在获取到运算权限时,会按照步骤402中确定的L2 Cache的多个缓存节点获取运算权限的顺序,控制运算权限在L2 Cache的多个缓存节点间进行转移。
在一些实施例中,第一节点(例如图2中的L2_0)获取到运算权限时,向第一缓存节点(例如图2中的L1_0)发送运算权限,第一缓存节点获取到运算权限之后,第一缓存节点对应的CPU使用该运算权限在第一缓存节点中进行运算。
其中,第一缓存节点可以理解为按照多个缓存节点分别发送的第一个第一读请求的顺序排列的第一个缓存节点,相当于多个缓存节点中第一个获取运算权限的节点。
示例性的,第一节点获取到运算权限时,向第一缓存节点发送运算权限,第一缓存节点会按其向第一节点发送的第一读请求的顺序对一个或多个第一读请求进行处理,对第一读请求进行处理可以理解为对第一地址中的数据进行改写操作,即完成原子运算。对第一地址中的数据完成改写操作后会产生新的第一地址中的数据,即第一缓存节点对第一地址的运算结果。
在一些实施例中,第一节点从第一缓存节点获取第一数据,并向第二缓存节点(例如图2中的L1_1)发送第一数据和运算权限。
其中,第一数据为第一缓存节点对第一地址的运算结果,该运算结果可以理解为是第一缓存节点处理了一个或多个第一读请求之后得到的最新运算结果。第二缓存节点为多个缓存节点中第二个获取运算权限的节点。
示例性的,第一节点从第一缓存节点处获取到第一缓存节点处理了一个或多个第一读请求后的最新运算结果,即第一数据,并向按照多个缓存节点分别发送的第一个第一读请求的顺序排列的第二个缓存节点发送第一数据和运算权限,即向第二缓存节点发送第一数据和运算权限。第二缓存节点获取到第一地址的最新运算结果和运算权限后,同样会按其向第一节点发送的第一读请求的顺序对一个或多个第一读请求进行处理,对第一地址的最新运算结果进行改写操作,更新第一地址的最新运算结果。
在一些实施例中,第一节点确定第一缓存节点获取运算权限的时间到达第一时间段时,从第一缓存节点获取第一数据。
示例性的,当第一缓存节点获取到运算权限的时间到达第一时间段时,即第一缓存节点获取到运算权限的时间到达时间限制时,第一节点就会从第一缓存节点获取第一缓存节点对第一地址的数据进行改写操作完成后的最新运算结果,即第一数据,并向第二缓存节点发送第一数据和运算权限,以实现运算权限转移。
设置第一时间段的目的是为了让运算权限转移到任一缓存节点处时可以多停留一段时间,以便于该缓存节点能够在获得运算权限后处理多条第一读请求,而不是只处理完一条第一读请求后就将运算权限转移出去,从而避免了运算权限不停地在该缓存节点处频繁迁移的情况。同时,设置第一时间段也是为了使每个发送第一读请求的缓存节点都能够获取到运算权限,保证缓存节点之间的公平性,因此需要对每个缓存节点获取到运算权限的时间进行限制。
由于不同层级所管理的一致性范围不同,即所管理的CPU个数不同,例如图2所示的L2_0和L2_1分别管理4个CPU的一致性,而home agent管理L2_0和L2_1的一致性,包含8个CPU,因此运算权限在home agent处的延时(delay)需要大于运算权限在L2_0或L2_1处的delay,即运算权限在home agent处的停留时间需要大于运算权限在L2_0或L2_1处的停留时间,才能够保证L2 Cache获取到运算权限后进行正常运算。相当于做到按需delay,如果统一按照CPU最多的数量去delay则会损耗系统的动态性能。
因此,第一时间段可以是第一节点根据第一节点所在的层级确定的。
也可以理解为第一节点根据自身包含的CPU个数确定出要将运算权限在每个缓存节点中停留的时间。还可以理解为第一节点根据自身所在的层级以及上游发送第一读请求的缓存节点的个数共同自适应确定出要将运算权限在每个缓存节点中停留的时间。
示例性的,当第一节点为home agent时,以图2为例,home agent可以根据自身所在的层级,即包含8个CPU,确定出控制运算权限在L2_0和L2_1中停留的时间,以保证运算权限在home agent处的停留时间内能够公平的处理这8个CPU下发的读请求。home agent还可以根据自身所在的层级,即包含8个CPU,以及上游发送第一读请求的缓存节点的个数,即L1 Cache中下发读请求的CPU个数,例如图2中示出了8个L1,即8个CPU,共同自适应确定出要将运算权限在L2_0和L2_1中停留的时间,以保证运算权限在home agent处的停留时间内能够公平的处理L1 Cache中下发读请求的多个CPU下发的读请求。
下面具体以第一节点为多个缓存节点对应的多个CPU的共享缓存,多个缓存节点分别对应多个CPU的专有缓存为例进行说明。可以理解为第一节点为二级L2缓存层(L2Cache)的节点,第一缓存层为一级L1缓存层(L1 Cache)。
其中,多个缓存节点和第一节点属于同一非一致内存访问NUMA域。也可以理解为多个缓存节点和第一节点属于同一cluster。
示例性的,以图2为例,第一节点为L2_0时,多个缓存节点分别为L1_0、L1_1、L1_2和L1_3,那么L1_0、L1_1、L1_2、L1_3和L2_0属于同一cluster0。第一节点为L2_1时,多个缓存节点分别为L1_4、L1_5、L1_6和L1_7,那么L1_4、L1_5、L1_6、L1_7和L2_1属于同一cluster1。
在一些实施例中,第一节点(例如L2_0)在接收到第一缓存层的多个缓存节点的第一读请求时,第一节点向第二节点(例如home agent)发送第二读请求,第一节点接收第二节点发送的第一读响应,第一读响应包括运算权限。
其中,第二节点用于管理多个第一节点的一致性,第二节点和第二节点管理的多个第一节点属于同一die。第二节点可以为home agent时,可以理解为home agent用于管理多个L2 Cache的一致性,以图2为例,home agent、L2_0、L2_1、L1_0、L1_1、L1_2、L1_3、L1_4、L1_5、L1_6和L1_7属于同一die。
第二读请求用于请求第一地址的运算权限,第二读请求可以理解为L2 Cache向home agent发送的读请求,当L2 Cache中有第一地址的数据时,第二读请求用于请求第一地址的运算权限,当L2 Cache中没有第一地址的数据时,第二读请求还可以用于请求第一地址的数据和运算权限。
示例性的,以图2为例,L2_0向home agent发送第二读请求,用于请求第一地址的运算权限,该第一地址是L1 Cache向L2 Cache发送读请求时所请求的地址。可以理解为L1 Cache向L2 Cache发送用于请求第一地址的运算权限的第一读请求,L2Cache收到该第一读请求之后,又向home agent发送用于请求第一地址的运算权限的第二读请求。home agent收到L2 Cache发送的第二读请求之后,向L2 Cache发送第一读响应,即发送第一地址的运算权限。
在一些实施例中,第二节点确定第一节点获取运算权限的时间到达第二时间段时,从第一节点获取第二数据,第二节点向第三节点(例如L2_1)发送第二数据和运算权限。
其中,第二数据为第一节点得到的第一地址的最新运算结果。由于L2 Cache会控制运算权限转移到多个L1 Cache,每个L1 Cache使用运算权限处理一个或多个第一 读请求时都会更新第一地址中的数据,因此第二数据可以理解为L2 Cache控制运算权限在多个L1 Cache中转移结束后,从运算权限转移的最后一个L1 Cache处获取的第一地址的最新运算结果。
第三节点为与第一节点在同一缓存层且属于同一die的节点,以图2为例,当第一节点为L2_0时,第三节点可以为L2_1。
示例性的,home agent确定L2_0获取运算权限的时间到达第二时间段时,从L2_0获取第一地址的最新运算结果,向L2_1发送该第一地址的最新运算结果以及运算权限。
在一些实施例中,第一缓存层的多个缓存节点发送的第一读请求可以直接在第一节点处进行运算。
示例性的,home agent将运算权限发送到L2 Cache处,L1 Cache向L2 Cache发送的第一读请求可以直接在该L2 Cache处进行运算。
不论是在L1 Cache处还是L2 Cache处对第一地址的数据进行运算,都属于near atomic运算,其运算的时延远小于far atomic运算的时延。
如图5所示,为本申请实施例提供的一种访问数据的方法的流程图。当L1 Cache向L2 Cache发送第一读请求(图5中以rd示例),用于请求第一地址的数据和运算权限(图5中以E示例)时,L2 Cache按照多个L1 Cache分别发送的第一个第一读请求的顺序确定多个L1 Cache获取运算权限的顺序。L2 Cache中若是没有第一地址的数据和运算权限,则L2 Cache向home agent发送第二读请求(图5中以Rd示例),用于请求该第一地址的数据和运算权限,home agent按照多个L2 Cache分别发送的第一个第二读请求的顺序确定多个L2 Cache获取运算权限的顺序。
home agent获取到第一地址的数据和运算权限后,将第一地址的数据和运算权限发送给第一个获取运算权限的L2 Cache(假设为L2_0)。L2_0接收到第一地址的数据和运算权限后,将第一地址的数据和运算权限发送给第一个获取运算权限的L1 Cache(假设为L1_0),并确定L1_0获取运算权限的时间到达第一时间段时,从L1_0获取第一地址的最新运算结果。之后L2_0向第二个获取运算权限的L1 Cache(假设为L1_1)发送第一地址的最新运算结果和运算权限,使L1_1对第一地址的最新运算结果进行改写操作。以此类推,当最后一个获取运算权限的L1 Cache(假设为L1_3)对第一地址的最新运算结果完成改写操作后,由于L2_0不再控制运算权限进行转移,因此L1_3将其对第一地址的最新运算结果和运算权限反馈(图5中以反馈ACK示例)到L2_0。此时,home agent确定L2_0获取运算权限的时间到达第二时间段,home agent从L2_0获取第一地址的最新运算结果,向第二个获取运算权限的L2 Cache(假设为L2_1)发送第一地址的最新运算结果和运算权限,使L2_1对第一地址的最新运算结果进行改写操作。以此类推,当最后一个获取运算权限的L2 Cache(假设为L2_1)对第一地址的最新运算结果完成改写操作后,由于home agent不再控制运算权限进行转移,因此L2_1将其对第一地址的最新运算结果和运算权限反馈到home agent。home agent将最终接收到的第一地址的最新运算结果存入共享内存,完成一次运算权限调度的过程。
由此,本申请实施例提供的一种访问数据的方法,通过一致性管理节点自下而上层级进行E态调度转移管理,按照不同层级的需求为不同层级设置不同的处理时间, 控制E状态在NUMA域内停留更长的时间以完成更多的原子指令,且CPU获取E状态后在CPU核内部缓存层级进行near atomic运算,来减少CPU完成原子运算的时延,可以避免原子指令在公共交织节点排队造成入口队列拥塞,降低原子操作的冲突率与系统开销,提升原子操作的吞吐量。
图6A示出了一种芯片结构的示意图。该芯片包括多核CPU,多核CPU的专用缓存节点、共享缓存节点和第二节点。多核CPU例如包括图6A中的CPU0、CPU1、CPU2、CPU3、CPU4、CPU5、CPU6和CPU7;多核CPU的专用缓存节点例如包括图6A中的缓存节点0、缓存节点1、缓存节点2、缓存节点3、缓存节点4、缓存节点5、缓存节点6、缓存节点7。第一节点为缓存节点0、缓存节点1、缓存节点2、缓存节点3的一致性管理节点,并且组成簇0。第三节点为缓存节点4、缓存节点5、缓存节点6、缓存节点7的一致性管理节点,并且组成簇1。第二节点和第三节点属于同一die,第二节点为第二节点和第三节点的一致性节点。
图6A示出的芯片中,第一节点可以理解为L2 Cache,多个缓存节点可以理解为L1 Cache,此时,第二节点可以理解为home agent,第三节点为与第一节点位于同一缓存层级的另一个L2 Cache,每个缓存节点对应一个CPU,该缓存节点为该CPU的专用缓存。图6A中的第一节点可以用于执行上述步骤401、步骤402和步骤403中,缓存节点0-缓存节点7处于L1缓存层,第一节点和第三节点处于L2缓存层,第二节点为home agent时的相关方法步骤等,和/或用于本文所描述的技术的其他过程。
图6B示出了另一种芯片结构的示意图。该芯片包括多核CPU,多核CPU的专用缓存节点、共享缓存节点和第二节点。多核CPU例如包括图6B中的CPU0、CPU1、CPU2、CPU3、CPU4、CPU5、CPU6和CPU7;多核CPU的专用缓存节点例如包括图6B中的L1_0、L1_1、L1_2、L1_3、L1_4、L1_5、L1_6以及L1_7。缓存节点0为L1_0、L1_1、L1_2、L1_3的一致性节点,并且组成簇0;缓存节点1为L1_4、L1_5、L1_6以及L1_7的一致性节点,并且组成簇1。第一节点为缓存节点0、缓存节点1的一致性节点。
图6B示出的芯片中,第一节点可以理解为home agent,多个缓存节点可以理解为L2 Cache,每个缓存节点还用于控制多个CPU的专用缓存L1 Cache。图6B中的第一节点可以用于执行上述步骤401、步骤402和步骤403中第一节点为home agent,缓存节点0和1为L2 Cache时的方法步骤等,和/或用于本文所描述的技术的其他过程。本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序代码,当处理器执行该计算机程序代码时,通信装置执行上述实施例中访问数据的方法。
本申请的实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中通信装置执行的访问数据的方法。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过 其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (15)
- 一种访问数据的方法,其特征在于,所述方法包括:第一节点接收第一缓存层的多个缓存节点发送的多个第一读请求,所述多个第一读请求均用于请求第一地址的运算权限;所述第一节点用于管理所述多个缓存节点的一致性;所述第一节点按照所述多个缓存节点分别发送的第一个第一读请求的顺序确定所述多个缓存节点获取所述运算权限的顺序;所述第一节点获取到所述运算权限时,按照所述多个缓存节点获取所述运算权限的顺序,控制所述运算权限在所述多个缓存节点间转移。
- 根据权利要求1所述的方法,其特征在于,所述第一节点获取到所述运算权限时,按照所述多个缓存节点分别发送的第一个第一读请求的顺序,控制所述运算权限在所述多个缓存节点间转移包括:所述第一节点获取到所述运算权限时,若第一缓存节点为所述多个缓存节点中第一个获取所述运算权限的节点,则所述第一节点向所述第一缓存节点发送所述运算权限;所述第一节点从所述第一缓存节点获取第一数据,所述第一数据为所述第一缓存节点对所述第一地址的运算结果,并向第二缓存节点发送所述第一数据和所述运算权限,所述第二缓存节点为所述多个缓存节点中第二个获取所述运算权限的节点。
- 根据权利要求2所述的方法,其特征在于,所述第一节点从所述第一缓存节点获取所述第一数据包括:所述第一节点确定所述第一缓存节点获取所述运算权限的时间到达第一时间段时,从所述第一缓存节点获取所述第一数据;其中,所述第一时间段是所述第一节点根据所述第一节点所在的层级确定的。
- 根据权利要求1-3任一项所述的方法,其特征在于,所述第一缓存层为一级L1缓存层,所述多个缓存节点分别对应多个中央处理器CPU的专有缓存;所述第一节点为二级L2缓存层的节点,所述第一节点为所述多个缓存节点对应的多个CPU的共享缓存;所述多个缓存节点和所述第一节点属于同一非一致内存访问NUMA域。
- 根据权利要求4所述的方法,其特征在于,所述第一节点获取到所述运算权限包括:所述第一节点向第二节点发送第二读请求,所述第二读请求用于请求所述第一地址的所述运算权限;所述第二节点用于管理多个第一节点的一致性,所述第二节点和所述第二节点管理的所述多个第一节点属于同一die;所述第一节点接收所述第二节点发送的第一读响应,所述第一读响应包括所述运算权限。
- 根据权利要求5所述的方法,其特征在于,所述方法还包括:所述第二节点确定所述第一节点获取所述运算权限的时间到达第二时间段时,从所述第一节点获取第二数据,所述第二数据为所述第一节点得到的所述第一地址的最新运算结果,所述第二节点向第三节点发送所述第二数据和所述运算权限,所述第三 节点为与所述第一节点在同一缓存层且属于同一die的节点。
- 根据权利要求1-3任一项所述的方法,其特征在于,所述第一缓存层为二级L2缓存层,所述多个缓存节点分别为多个CPU的共享缓存;所述第一节点为缓存的本地代理,用于对内存进行读写操作。
- 一种通信装置,其特征在于,所述通信装置包括第一节点和第一缓存层的多个缓存节点,所述第一节点用于:接收所述多个缓存节点发送的多个第一读请求,所述多个第一读请求均用于请求第一地址的运算权限;所述第一节点用于管理所述多个缓存节点的一致性;按照所述多个缓存节点分别发送的第一个第一读请求的顺序确定所述多个缓存节点获取所述运算权限的顺序;获取到所述运算权限时,按照所述多个缓存节点获取所述运算权限的顺序,控制所述运算权限在所述多个缓存节点间转移。
- 根据权利要求8所述的通信装置,其特征在于,所述第一节点具体用于:获取到所述运算权限时,若第一缓存节点为所述多个缓存节点中第一个获取所述运算权限的节点,则向所述第一缓存节点发送所述运算权限;从所述第一缓存节点获取第一数据,所述第一数据为所述第一缓存节点对所述第一地址的运算结果,并向第二缓存节点发送所述第一数据和所述运算权限,所述第二缓存节点为所述多个缓存节点中第二个获取所述运算权限的节点。
- 根据权利要求9所述的通信装置,其特征在于,所述第一节点具体用于:确定所述第一缓存节点获取所述运算权限的时间到达第一时间段时,从所述第一缓存节点获取所述第一数据;其中,所述第一时间段是所述第一节点根据所述第一节点所在的层级确定的。
- 根据权利要求8-10任一项所述的通信装置,其特征在于,所述第一缓存层为一级L1缓存层,所述多个缓存节点分别对应多个中央处理器CPU的专有缓存;所述第一节点为二级L2缓存层的节点,所述第一节点为所述多个缓存节点对应的多个CPU的共享缓存;所述多个缓存节点和所述第一节点属于同一非一致内存访问NUMA域。
- 根据权利要求11所述的通信装置,其特征在于,所述第一节点具体用于:向第二节点发送第二读请求,所述第二读请求用于请求所述第一地址的所述运算权限;所述第二节点用于管理多个第一节点的一致性,所述第二节点和所述第二节点管理的所述多个第一节点属于同一die;接收所述第二节点发送的第一读响应,所述第一读响应包括所述运算权限。
- 根据权利要求12所述的通信装置,其特征在于,所述第二节点确定所述第一节点获取所述运算权限的时间到达第二时间段时,从所述第一节点获取第二数据,所述第二数据为所述第一节点得到的所述第一地址的最新运算结果,所述第二节点向第三节点发送所述第二数据和所述运算权限,所述第三节点为与所述第一节点在同一缓存层且属于同一die的节点。
- 根据权利要求8-10任一项所述的通信装置,其特征在于,所述第一缓存层为二级L2缓存层,所述多个缓存节点分别为多个CPU的共享缓存;所述第一节点为缓存的本地代理,用于对内存进行读写操作。
- 一种计算机可读存储介质,其特征在于,包括计算机指令,当计算机指令在通信装置上运行时,使得通信装置执行上述权利要求1-7中的任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/096550 WO2022246769A1 (zh) | 2021-05-27 | 2021-05-27 | 一种访问数据的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116685958A true CN116685958A (zh) | 2023-09-01 |
Family
ID=84229452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180086851.0A Pending CN116685958A (zh) | 2021-05-27 | 2021-05-27 | 一种访问数据的方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116685958A (zh) |
WO (1) | WO2022246769A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030041215A1 (en) * | 2001-08-27 | 2003-02-27 | George Robert T. | Method and apparatus for the utilization of distributed caches |
US7716428B2 (en) * | 2006-02-28 | 2010-05-11 | International Business Machines Corporation | Data processing system, cache system and method for reducing imprecise invalid coherency states |
CN102819420B (zh) * | 2012-07-31 | 2015-05-27 | 中国人民解放军国防科学技术大学 | 基于命令取消的高速缓存流水线锁步并发执行方法 |
US10866902B2 (en) * | 2016-12-28 | 2020-12-15 | Intel Corporation | Memory aware reordered source |
-
2021
- 2021-05-27 CN CN202180086851.0A patent/CN116685958A/zh active Pending
- 2021-05-27 WO PCT/CN2021/096550 patent/WO2022246769A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022246769A1 (zh) | 2022-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3871305B2 (ja) | マルチプロセッサ・システムにおけるメモリ・アクセスの動的直列化 | |
US5829052A (en) | Method and apparatus for managing memory accesses in a multiple multiprocessor cluster system | |
JP3974597B2 (ja) | 非対称型異種マルチプロセッサ環境でアトミック更新プリミティブを提供するための方法 | |
US5692149A (en) | Block replacement method in cache only memory architecture multiprocessor | |
US6625698B2 (en) | Method and apparatus for controlling memory storage locks based on cache line ownership | |
US5261106A (en) | Semaphore bypass | |
US9619303B2 (en) | Prioritized conflict handling in a system | |
JPH05127995A (ja) | ローカルキヤツシユに共通のページ間の一貫性を確保する方法 | |
JPH02141845A (ja) | マルチプロセッサシステムにおいて中央処理ユニットにより主メモリからデータブロックを読み取る方法 | |
US10162757B2 (en) | Proactive cache coherence | |
US10929293B2 (en) | Atomic operations for fabric shared memories | |
JPWO2010097925A1 (ja) | 情報処理装置 | |
JP2008503821A (ja) | 小容量キャッシュシステムにおけるアトミック予約ライン上のライトバックを無効化する方法およびシステム | |
US7689993B2 (en) | Assigning tasks to processors based at least on resident set sizes of the tasks | |
CN107168680B (zh) | 具有局限于中间高速缓存级别的局部范围的原子指令 | |
KR101695845B1 (ko) | 캐시 일관성 유지 장치 및 방법, 이를 이용하는 멀티프로세서 장치 | |
CN112100093B (zh) | 保持多处理器共享内存数据一致性的方法和多处理器系统 | |
US20140289481A1 (en) | Operation processing apparatus, information processing apparatus and method of controlling information processing apparatus | |
JP2829115B2 (ja) | ファイル共用方法 | |
JP3814521B2 (ja) | データ処理方法および装置 | |
CN116685958A (zh) | 一种访问数据的方法和装置 | |
JPH06309231A (ja) | キャッシュメモリ制御方法 | |
US11880304B2 (en) | Cache management using cache scope designation | |
CN117472804B (zh) | 访存失效队列处理方法、装置及电子设备 | |
JPH03230238A (ja) | キャッシュメモリ制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |