处理节点、计算机系统及事务冲突检测方法与流程

文档序号:11590075阅读:286来源:国知局

本发明涉及计算机技术领域,尤其涉及一种处理节点、计算机系统及事务冲突检测方法。



背景技术:

事务内存是计算机体系结构中的一种并行程序设计方式,用于实现多进程共享的数据的一致性。事务是来自于数据库管理系统(databasemanagesystem,dbms)中的事务(transaction)概念。一个事务是一个指令系列,包括对存储的读操作和写操作。在数据库管理系统中,事务必须满足原子性、一致性、隔离性和持久性。原子性指的是事务中的动作要么全部执行,要么一个都不执行。一致性指的是在任何时刻,数据库必须处于一致性状态,即必须满足某些预先设定的条件。隔离性是指一个事务不能看见其他未提交事务所涉及到的内部对象的状态。持久性是指一个已提交的事务对数据库系统的改变必须是永久的。事务内存的关键就是提供一个具有原子性、一致性和隔离性的临界区域操作,使得多个进程不通过锁也能安全访问共享数据。事务内存目前有两种实现方式,基于软件的软件事务内存(softwaretransactionalmemory,stm)和基于硬件的硬件事务内存(hardwaretransactionalmemory,htm)。

现有技术中的硬件事务内存基本都是在cpu的第一级、第二级或第三级缓存(cache)上来实现,例如,通过在第一级缓存(l1cache)中增加专用的缓存机制来实现事务的冲突检测和事务的回滚机制。具体的,在进程访问过程中,通过跟踪事务在执行过程中所有读过或写过的缓存行(cacheline),以确定某个cacheline是否正在被另一个进程操作,当检测到该进程的事务与其他进程的事务冲突时,该事务需要终止执行。其中,cacheline用于指示一段连续的地址,也可以将cacheline称为一个数据块。在有些计算机系统中,cacheline的大 小为64字节(byte)。由于这种事务内存的实现方式会对所有操作的cacheline进行跟踪检测,从而会浪费大量的系统功耗,且检测粒度较粗,容易形成误检。



技术实现要素:

本申请中提供的一种处理节点、计算机系统及事务冲突检测方法,能够在节省系统资源的基础上提高地址冲突检测的效率,并节省系统功耗。

第一方面,本申请提供一种处理节点,该处理节点包括处理单元和事务缓存,所述事务缓存通过第一接口与该处理单元相连。当该处理单元获取事务中的操作指令并判断该操作指令为访问共享数据的事务的指令时,该处理单元根据所述操作指令访问所述事务缓存。其中,该操作指令中携带有目的地址,该事务缓存用于缓存该处理节点正在处理的事务的共享数据,共享数据为所述处理节点与其他处理节点都能够访问的数据。若该事务缓存确定该目的地址未命中所述事务缓存中的缓存行cacheline,则该事务缓存向其他处理节点中的事务缓存发送该目的地址,并接收其他处理节点中的事务缓存返回的被该目的地址命中的cacheline的状态信息。所述被所述目的地址命中的cacheline中缓存有所述共享数据,所述状态信息用于表示所述共享数据在所述其他处理节点的事务缓存中的访问状态。进而,该事务缓存根据其接收的状态信息确定所述操作指令是否与所述其他处理节点正在执行的操作指令相冲突。

在本申请提供的处理节点中,提供了专用于缓存当前事务要访问的共享数据的事务缓存,从而对不是访问共享数据的操作指令无需执行事务冲突检测,节省了系统处理操作指令中的系统功耗。并且,相对于现有的缓存来说,事务缓存存储的数据较少,在冲突检测过程中,需要遍历的数据就比较少,从而能够提高检测效率。

在一种可能的实现方式中,该处理节点还包括通用缓存,所述通用缓存通过第二接口与所述处理单元相连,所述第一接口与所述第二接口为不同的通信接口,所述通用缓存用于缓存所述处理节点正在处理的除事务的共享数据之外的数据。根据这种方式,当该处理节点中的处理单元接收的操作指令不是事务中访问共享数据的操作指令时,该处理单元访问该通用缓存。由于通用缓存中缓存的是除事务的共享数据之外的数据,因此通用缓存无需执行事务的冲突检测,从 而能够提高系统的处理效率。

在又一种可能的实现方式中,当所述事务缓存接收到的状态信息为指示修改状态的状态信息时,该事务缓存确定所述操作指令与所述其他处理节点正在执行的操作指令相冲突。其中,所述修改状态用于表示所述共享数据正在被所述其他处理节点修改。

在又一种可能的实现方式中,当所述操作指令为读操作指令,且所述状态信息为指示共享状态的状态信息时,该事务缓存确定所述操作指令与所述其他处理节点正在执行的操作指令不冲突。其中,所述共享状态用于表示所述共享数据与内存中的数据一致。

在又一种可能的实现方式中,当所述操作指令为写操作指令,且所述状态信息为指示为共享状态的状态信息时,该事务缓存确定所述操作指令与所述其他处理节点正在执行的操作指令冲突。其中,所述共享状态用于表示所述共享数据与内存中的数据一致。

结合上述任意一种可能的实现方式,在又一种可能的实现方式中,事务缓存中的cacheline的大小为一个字word。在本申请提供的处理节点中,由于事务缓存的cacheline设置的较小,冲突检测的粒度也比较小,从而使得本申请提供的处理节点在实现事务冲突检测的过程中检测的精确性更高,更有利于系统性能的提升。

结合上述任意一种可能的实现方式,在又一种可能的实现方式中,事务缓存中的每个cacheline均包括如下信息:数据data、状态status以及访问所述cacheline的其他处理节点的指针信息。从而处理节点能够根据cacheline中记录的状态信息向其他事务缓存返回cacheline的状态。并且,能够根据访问某个cacheline的其他处理节点的指针信息获得不同的处理节点访问该cacheline的先后顺序。

结合上述任意一种可能的实现方式,在又一种可能的实现方式中,处理单元可以根据该操作指令中指令标识位来判断获取的操作指令是否为访问共享数据的事务的指令。

在又一种可能的实现方式中,处理单元可以根据该操作指令中的目的地址以及存储共享数据的地址的列表来判断该操作指令是否为访问共享数据 的事务中的操作指令。

在又一种可能的实现方式中,在该事务缓存向其他处理节点中的事务缓存发送该目的地址之后,若其他处理节点中的某个处理节点未缓存有所述目的地址的数据,则该处理节点可以不向所述事务缓存返回响应消息,从而能够节省节点间的信息传输量。

第二方面,本申请提供了一种处理节点。该处理单元和事务缓存,所述事务缓存通过第一接口与所述处理单元相连。当该处理单元获取事务中的操作指令并判断该操作指令为访问共享数据的事务的指令时,该处理单元根据所述操作指令访问所述事务缓存。其中,该操作指令中携带有目的地址,该事务缓存用于缓存该处理节点正在处理的事务的共享数据,共享数据为所述处理节点与其他处理节点都能够访问的数据。若该事务缓存确定该目的地址命中所述事务缓存中的缓存行cacheline且所述操作操作指令为写操作指令,则该事务缓存进一步确定所述操作指令命中的cacheline的状态。若所述操作指令命中的cacheline的状态为共享状态,且所述处理节点为第一个访问所述共享数据的处理节点,则所述事务缓存根据所述操作指令将待写入数据写入所述cacheline中。

在本申请提供的处理节点中,提供了专用于缓存当前事务要访问的共享数据的事务缓存,从而对不是访问共享数据的操作指令无需执行事务冲突检测,节省了系统处理操作指令中的系统功耗。并且,相对于现有的缓存来说,事务缓存存储的数据较少,在冲突检测过程中,需要遍历的数据就比较少,从而能够提高检测效率。进一步的,在本申请提供的处理节点中,在操作指令中的目的地址命中该事务缓存中的cacheline且该操作指令为写操作指令的情况下,能够根据访问该cacheline的多个处理节点的访问顺序来确定该处理节点执行该操作指令是否会与其他正在访问该cacheline的处理节点产生冲突,从而能够保证数据的一致性。并且,根据这种方式,能够保证计算机系统中访问相同共享数据的不同处理节点中运行的事务之间的处理顺序,使得各个处理节点的访问能够按照访问顺序正常进行,避免因为后访问该共享数据的处理节点对该共享数据的修改导致先访问该共享数据的处理节点无法正常处理事务。

在一种可能的实现方式中,该事务缓存具体用于根据所述cacheline的访问链表确定所述处理节点为第一个访问所述cacheline的处理节点,其中, 所述访问链表用于指示多个处理节点读取所述共享数据的先后顺序。

在又一种可能的实现方式中,事务缓存中的每个cacheline均包括如下信息:数据data、状态status以及访问所述cacheline的其他处理节点的指针信息。能够根据访问某个cacheline的其他处理节点的指针信息获得该cacheline的访问链表,确定不同的处理节点访问该cacheline的先后顺序。具体的,能够根据访问链表确定不同的处理节点读取该cacheline的共享数据的先后顺序。

在一种可能的实现方式中,该处理节点还包括通用缓存。所述通用缓存通过第二接口与所述处理单元相连。所述第一接口与所述第二接口为不同的通信接口。所述通用缓存用于缓存所述处理节点正在处理的除事务的共享数据之外的数据。

结合第二方面以及第二方面的任意一种可能的实现方式,在又一种可能的实现方式中,所述事务缓存中的cacheline的大小为一个字word。在本申请提供的处理节点中,由于事务缓存的cacheline设置的较小,冲突检测的粒度也比较小,从而使得本申请提供的处理节点在实现事务冲突检测的过程中检测的精确性更高,更有利于系统性能的提升。

结合上述任意一种可能的实现方式,在又一种可能的实现方式中,处理单元可以根据该操作指令中指令标识位来判断获取的操作指令是否为访问共享数据的事务的指令。

在又一种可能的实现方式中,处理单元可以根据该操作指令中的目的地址以及存储共享数据的地址的列表来判断该操作指令是否为访问共享数据的事务中的操作指令。

第三方面,本申请提供了一种计算机系统,该计算机系统包括至少两个上述第一方面及第一方面的任意一种可能的实现方式中的任意一种处理节点。

第四方面,本申请提供了一种计算机系统,该计算机系统包括至少两个上述第二方面及第二方面的任意一种可能的实现方式中的任意一种处理节点。

第五方面,本申请提供了一种应用于计算机系统中的事务冲突检测方法,该方法由上述第一方面提供的处理节点中的事务缓存执行,并能够实现上述如第 一方面提供的处理节点中的事务缓存实现的功能。

第六方面,本申请提供了又一种应用于计算机系统中的事务冲突检测方法,该方法由上述第二方面提供的处理节点中的事务缓存执行,并能够实现上述如第二方面提供的处理节点中的事务缓存实现的功能。

第七方面,本申请提供了一种事务冲突检测装置。该装置应用于包含有多个处理节点的多核计算机系统中。该装置包括用于实现上述第五方面中所述的方法的模块。

第八方面,本申请提供了一种事务冲突检测装置。该装置应用于包含有多个处理节点的多核计算机系统中。该装置包括用于实现上述第六方面中所述的方法的模块。

第九方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述第五方面中所述的方法。

第十方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述第六方面中所述的方法。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例。

图1为本发明实施例提供的一种计算机系统结构示意图;

图2为本发明实施例提供的一种种操作指令处理流程图;

图3为本发明实施例提供的一种事务冲突检测方法的信令图;

图4为本发明实施例提供的一种事务冲突检测方法的流程图;

图5为本发明实施例提供的一种缓存行的状态示意图;

图6为本发明实施例提供的一种缓存行的结构示意图;

图7为本发明实施例提供的一种事务冲突检测装置的结构示意图;

图8为本发明实施例提供的又一种事务冲突检测装置的结构示意图;

图9为本发明实施例提供的又一种事务冲突检测装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。

图1为本发明实施例提供的一种计算机系统结构示意图。如图1所示,计算机系统100包括多个处理节点。如图1所示,所述多个处理节点可以包括如图1中的第一处理节点105、第二处理节点205以及第n处理节点305。可以理解的是,图1仅仅是以n个处理器节点为图示,其中n为不小于3的自然数。实际应用中,计算机系统100还可以包括两个处理节点。处理节点之间,比如第一处理节点105、第二处理节点205以及第n处理节点305之间通过片上互连130相连。所有的处理器节点通过片上互连总线130与内存125连接。其中,片上互连130可以包括片上网络、系统总线等。每一个处理节点均包括中央处理单元(centralprocessingunit,cpu)、通用缓存(normalcache)和事务缓存(transactionalcache)。例如,第一处理节点105包括第一中央处理单元110、第一通用缓存115以及第一事务缓存120,第二处理节点205包括第二中央处理单元210、第二通用缓存215以及第二事务缓存220。其中,在本发明实施例中,通用缓存可简称为ncache,事务缓存又可简称为tcache。如图1所示,为了描述清楚,下面以第一处理节点105为例具体介绍各个处理器节点的内部结构。

第一cpu110是第一处理节点105的运算核心(core)和控制核心(controlunit)。第一cpu110可以是一块集成电路。第一cpu110能够实现对内存125、第一通用缓存115、第一事务缓存120及磁盘的访问。可以理解的是,在本发明实施例中,第一cpu110仅仅是第一处理节点105中的处理单元的一个示例。除了第一cpu110外,处理单元还可以是指处理器核(core)或其他特定集成电路(applicationspecificintegratedcircuit,asic),或者是被配置成实施本发明实施例的一个或多个集成电路。

本领域技术人员知道,缓存是计算机系统中位于cpu与内存之间的临时存储器。通常,缓存均由静态ram(sram)组成。由于缓存的速率较快,因此缓 存用于与cpu进行高速数据交换。在缓存中的数据是内存中的一部分。当cpu访问数据时,cpu会先在缓存中查找,当缓存中没有cpu所需的数据时,cpu才访问内存,从而加快了cpu的访问速率。具体的,缓存包括控制器件以及存储介质,缓存中的控制器件可以根据cpu的操作指令向cpu返回其存储介质中缓存的数据。缓存中的控制器件还可以根据cpu的写操作指令将待写入的数据缓存于缓存的存储介质中。

在本发明实施例中,每个处理器节点中的缓存包括通用缓存和事务缓存。例如,第一处理器节点105中的缓存可以包括第一通用缓存115和第一事务缓存120。其中,第一通用缓存(normalcache)115和第一事务缓存120可以是现有的处理器中的一级缓存(l1cache)、二级缓存(l2cache)或三级缓存(l3cache)。第一事务缓存120也可以由sram和专用控制逻辑组成。第一通用缓存115和第一事务缓存120之间相互独立。第一通用缓存115和第一事务缓存120分别通过独立的存储器接口与第一cpu110相连。在本发明实施例中,第一通用缓存115和第一事务缓存120均为一级缓存。这两个缓存(包括通用缓存115和事务缓存120)与内存125之间还可以包括二级缓存或三级缓存。第一事务缓存120用于处理事务中访问共享数据的操作指令。第一通用缓存115用于处理除共享数据之外的其他非共享数据的访问操作指令。例如,第一通用缓存115可以处理非事务操作,也可以处理事务中非共享数据的访问操作。第一事务缓存120用于缓存可供多个进程访问的共享数据,第一通用缓存115用于缓存除共享数据之外的其他数据。第一事务缓存120没有独立的地址空间,第一事务缓存120中的数据的地址通过映射内存125的地址获得。对于任意一个共享数据,其在第一事务缓存120中的地址与其在内存125中的地址相同。

可以理解的是,实际应用中,并不对第一事务缓存120以及第一通用缓存115在物理形态上是否完全隔离进行限定,只要第一事务缓存120和第一通用缓存115是通过不同的数据通道与第一cpu110进行连接及通信即可。例如,在一种可能的实现方式中,第一事务缓存120和第一通用缓存115可以在物理上独立的两个实体,且分别通过独立的接口与第一cpu110进行连接及通信。在又一种可能的实现方式中,第一事务缓存120和第一通用缓存115可以是同一个缓存中的两个不同的存储空间,这两个不同的存储空间分别通过不同的接口与第 一cpu110通信。在又一种可能的实现方式中,第一事务缓存120和第一通用缓存115可以是同一个缓存中的两个不同的存储空间,且这两个不同的存储空间通过分时复用一个物理接口实现两个数据通道与第一cpu110进行通信。

内存125又可称为主存,是第一cpu110能直接寻址的存储空间。内存125主要用来存储程序和数据。在本发明实施例中,内存125可以是dram,也可以是相变存储器(phasechangememory,pcm)、阻变存储器(resistiverandomaccessmemory,rram)、磁性存储器(magneticrandomaccessmemory,mram)或铁电式存储器(ferroelectricrandomaccessmemory,fram)等存储级内存。在本发明实施例中,不对内存125的具体类型进行限制。

本领域技术人员可以知道,第一cpu110执行的指令可以有很多类型。例如可以是访问数据的指令,也可以是调用程序的指令等等。事务是一个指令系列,包括对存储的读操作指令和/或写操作指令。可以理解的是,这里的存储包括内存及外存(例如磁盘)。在现有技术中,由于只有一个缓存,因此,所有指令均是通过访问同一个缓存来处理。而在本发明实施例中,如图1所示,计算机系统100与现有的计算机系统架构不同,在本发明实施例提供的计算机系统100中,将缓存划分为通用第一缓存115和第一事务缓存120,且第一通用缓存115和第一事务缓存120分别通过不同的独立存储器接口与第一cpu110通信。因此,在本发明实施例中,第一cpu110需要通过访问不同的缓存来处理不同的指令。下面将结合图2对图1提供的计算机系统100处理操作指令的流程做一个简要的介绍。

图2为本发明实施例提供的一种操作指令处理流程图。为了描述方便,下面将以第一处理节点105为例进行介绍。可以理解的是,其他处理节点与第一处理节点105在操作指令执行过程中的处理流程类似。

如图2所示,在第一处理节点中的第一cpu110获取操作指令(参见步骤202)之后,在步骤204中,第一cpu110判断所述操作指令是否为事务的操作指令。具体的,在本发明实施例中,第一cpu110可以通过第一pcu110的事务寄存器的值来判断其接收的操作指令是否为事务的操作指令。本领域技术人员可以知道,在cpu中可以设置有一个事务寄存器,该事务寄存器用于指示cpu处理的指令是否为事务的指令。当事务开始时,cpu可以将该事务寄存器 的值置为“1”,用于标识cpu进入处理事务的阶段,cpu处理的指令为事务的操作指令;当事务结束时,cpu可以将该事务寄存器的值设置为“0”,用于表示cpu结束当前事务的处理。可以理解的是,“1”或“0”仅仅是本发明实施例中列举的事务标识位的值,实际应用中,还可以用其他值来标识事务的开始和事务的结束。在本发明实施例中,当第一cpu110获取操作指令后,第一cpu110可以根据事务寄存器判断当前获取的操作指令是否为事务中的操作指令,如果事务寄存器的值显示第一cpu110当前处于事务处理的阶段,则第一cpu110确定获取的操作指令为事务的操作指令。其中,事务的操作指令可以包括读操作指令和写操作指令。例如,第一cpu110获取的操作指令可以是如图3中所示的操作指令302。

在第一cpu110判断所述操作指令302为事务的操作指令的情况下,第一cpu110可以进一步的判断所述操作指令302是否为访问共享数据的指令(参见步骤206)。在本发明实施例中,共享数据是指多个进程或线程能够共同访问的数据。在本发明实施例中,也可以将共享数据称为关键变量。在本发明实施例中,事务缓存120仅用于缓存事务执行过程中需要访问的共享数据。当所述操作指令302为访问共享数据的指令时,第一cpu110会根据操作指令302访问所述第一处理节点105中的第一事务缓存120。当所述操作指令302为非事务的操作指令时,第一cpu110会根据所述操作指令302访问第一处理节点105中的第一通用缓存115(参见步骤208)。具体的,第一cpu110能够根据所述操作指令302中指令标识位来判断所述操作指令302是否为访问共享数据的操作指令。其中,所述指令标识位用于指示所述操作指令的指令类型。实际应用中,可以通过设置指令标识位的值来标识操作指令的指令类型。本领域人员可以知道,操作指令通常有32bit,其中的5bit为指令标识位,用于标识指令类型。例如,当指令标识位的值为“00000”时,用于指示该指令为普通的读写指令,例如,load指令或store指令。在这种情况下,第一cpu110确定该操作指令302不是事务中访问共享数据的操作指令。当指令标识位的值为“00001”时,用于指示该指令为事务中访问共享数据的指令,例如,tran_load指令或tran_store指令。在这种情况下,第一cpu110确定该操作指令302为事务中访问共享数据的操作指令。

实际应用中,第一cpu110也可以直接根据操作指令中的指令标识位来 判断获取的操作指令是否为事务中访问共享数据的操作指令。例如,当第一cpu110获取的操作指令中的指令标识位的值指示所述操作指令为tran_load或tran_store的指令时,第一cpu110确定该操作指令302为事务中访问共享数据的操作指令。当第一cpu110获取的操作指令中的指令标识位的值指示所述操作指令不是tran_load或tran_store的指令时,第一cpu110确定该操作指令302不是事务中访问共享数据的操作指令。实际应用中,在又一情形下,第一cpu110还可以根据操作指令302中的目的地址以及存储共享数据的地址的列表来判断操作指令302是否为访问共享数据的事务中的操作指令。

当第一cpu110确定该操作指令302为事务中访问共享数据的操作指令时,第一cpu110会根据操作指令302访问第一事务缓存120。在第一cpu110根据操作指令302访问第一事务缓存120的过程中,第一cpu110会进一步判断第一事务缓存120是否已经被开启(如步骤212所示)。在本发明实施例中,第一事务缓存120在硬件上有个使能标志位,例如:“0”和“1”。其中,0用于表示所述第一事务缓存120处于关闭状态,“1”用于表示第一事务缓存120处于开启状态。第一事务缓存120可以在第一cpu110执行事务过程中需要访问共享数据时开启。本领域技术人员知道,事务包含了一系列有序的指令。在本发明实施例中,在第一cpu110执行事务的过程中,执行第一条访问共享数据的操作指令时,第一cpu110会打开所述第一事务缓存120。在该事务的所有指令已经执行完后,第一cpu110可以关闭所述第一事务缓存120。在本发明实施例中,在步骤212中,如果第一事务缓存120已经开启,则第一cpu110可以根据所述操作指令直接访问第一事务缓存120(如步骤216所示)。如果第一事务缓存120尚未开启,则说明所述待执行的操作指令302是所述事务执行过程中访问共享数据的第一条操作指令。在这种情况下,如步骤214所示,第一cpu110需要开启第一事务缓存120。当第一事务缓存120开启之后,第一cpu110可以根据所述操作指令302访问第一事务缓存120(如步骤216所示)。

本领域技术人员知道,为了保护数据的一致性,事务必须满足一致性的要求,因此,在第一处理节点105执行事务的过程中,需要通过冲突检测机制来确定第一处理节点105正在执行的事务是否与其他处理节点正在执行的事务相冲突。具体的,如图2所示,在第一cpu110根据所述操作指令302访问第一 事务缓存120的过程中(参见步骤216),需要进一步判断是否产生事务冲突。当产生事务冲突时,该操作指令执行失败,第一事务缓存120会向第一cpu110返回用于指示指令执行失败的响应消息,并将第一事务缓存120中暂存的与该操作指令相关的数据无效,关闭第一事务缓存120。第一cpu110在接收到指令执行失败的响应消息后,可以回滚到所述事务的开始位置重新执行所述事务。当没有事务冲突时,第一cpu110可以根据所述操作指令302正常访问第一事务缓存120。例如,第一事务缓存120可以向第一cpu110返回读取的数据,或者根据所述操作指令在第一事务缓存中存储待写入的数据。

在本发明实施例中,为了解决共享存储多处理芯片上的并发性问题,采用了专用的第一事务缓存120来实现事务的一致性。下面将结合图3和图4详细介绍本发明实施例提供的计算机系统100的事务处理机制。图3为本发明实施例提供的一种事务冲突检测方法的信令图。图4为本发明实施例提供的一种事务冲突检测方法的流程图。为了图示清楚,图3仅对在处理访问共享数据的事务的操作指令过程中涉及的器件和器件之间的信令进行了图示。为了描述方便,本发明实施例以第一处理节点105为例进行描述。本发明实施例提供的一种事务冲突检测方法具体可以由第一处理节点105中的第一事务缓存120来执行。如图4所示,该方法可以包括如下步骤。

在步骤400中,第一事务缓存120接收第一cpu110发送的操作指令304。所述操作指令304中携带有目的地址306,其中,所述目的地址306为操作指令304待操作的内存中的地址。本领域技术人员知道,cpu和缓存之间是通过硬件控制信号的方式来传输操作指令的。例如,cpu发送的硬件信号可以包括:32bit地址信号、32bit数据信号、1bit读写控制信号以及1bit选中信号。在本发明实施例中,第一cpu110在执行事务中访问共享数据的操作指令302(例如trans_load)时,可以将1bit选中信号置1,表示要使用第一事务缓存120。并将1bit的读写信号置0,表示当前是读操作。并且,第一cpu110可以将目标地址放到32bit地址信号上。通过这种方式,第一事务缓存120就可以接收到第一cpu110发送的操作指令304。需要说明的是,在本发明实施例中,第一cpu110获取的操作指令302可以是软件层面的操作指令。第一cpu110根据操作指令302访问第一事务缓存120的过程中,第一cpu110向第一事务缓存120发送的操 作指令304是通过硬件发送的一种控制信号,可以理解操作指令304是操作指令302的硬件形式的表达。因此,在本发明实施例中,可以将操作指令302和操作指令304理解是对同一个指令的不同形式的表达。

在步骤405中,第一事务缓存120判断所述操作指令304中的目的地址306是否命中第一事务缓存120中的缓存行cacheline。实际应用中,当第一事务缓存120的cacheline中缓存有所述目的地址306的数据时,第一事务缓存120确定所述操作指令304命中第一事务缓存120中的缓存行cacheline。换一种表达方式,在本发明实施例中,目的地址306命中cacheline是指所述被命中的cacheline中缓存有目的地址306中的数据,且缓存的数据为有效数据。其中,所述第一事务缓存120用于缓存所述第一处理节点当前执行的事务中访问的共享数据,所述共享数据为所述第一处理节点105与其他处理节点都能够访问的数据,所述其他处理节点可以包括图1中所示的第二处理节点205至第n处理节点中的至少一个处理节点。在本发明实施例中,第一事务缓存120中缓存的数据的地址为该数据在内存中的内存地址。当所述操作指令304命中第一事务缓存120中的缓存行cacheline时,说明所述操作指令要访问的共享数据已暂存在第一事务缓存中,第一处理节点的当前进程处理过该共享数据,该方法进入步骤425。当所述目的地址306未命中第一事务缓存120中的缓存行cacheline时,该方法进入步骤410。

在步骤410中,第一事务缓存120向其他事务缓存发送所述目的地址306。在本发明实施例中,为了防止所述第一处理节点105处理的事务与其他处理节点处理的事务因同时访问所述目的地址306造成事务冲突,第一事务缓存120可以主动向其他处理节点中的事务缓存广播所述目的地址306。具体的,第一事务缓存120可以通过各处理节点间的片上互连130向其他处理节点中的事务缓存发送所述目的地址306。例如,如图3所示,在一种情形下,第一事务缓存120可以通过广播的方式向计算机系统100中除第一处理节点105之外的其他所有处理节点广播所述目的地址306。在另一种情形下,第一事务缓存120可以通过片上互连130向第二处理节点205中的第二事务缓存220以及第n处理节点305中的第n事务缓存320发送所述目的地址306。

在步骤415中,第一事务缓存120接收其他事务缓存返回的所述目的地 址306命中的缓存行cacheline的状态信息。其中,所述其他事务缓存返回的状态信息分别用于表示所述目的地址306命中的缓存行cacheline在所述其他处理节点中的事务缓存中的状态。本领域技术人员可以知道,cpu访问缓存时通常是以缓存行cacheline为访问单位进行访问,并且是以cacheline为粒度进行冲突检测,只要具有互斥关系的操作指令中操作地址命中同一cacheline即认为事务冲突。本领域人员知道,不同处理节点执行的写指令是具有互斥关系的操作指令,不同处理节点执行的写指令和读指令也是具有互斥关系的操作指令,不同处理节点执行的读指令和读指令不是具有互斥关系的操作指令。通常,缓存中的一个cacheline的大小为64字节(byte),因此,这种事务冲突检测方式会因为检测粒度太粗导致误检。在本发明实施例中,第一cpu110访问第一事务缓存120时仍然是以cacheline为粒度进行访问的。然而,为了提高检测效率,在本发明实施例中,第一事务缓存120专门用于缓存第一处理节点105处理的事务中访问的共享数据,与现有的cache中缓存的数据量相比,第一事务缓存120中缓存的数据量较小,在冲突检测过程中,需要遍历的数据就比较少,从而检测的效率更高。并且,在本发明实施例中,为了提高冲突检测的精确性,可以将每个cacheline设置得更小。例如,可以设置一个字(word)为一个cacheline,从而能够实现以word为粒度进行事务冲突检测。其中,一个word通常为4个字节byte,当然,不同的系统定义的word的长度也不完全相同。可以理解的是,以一个字为粒度实现冲突检测,仅仅是一种为提高检测的精确性的一种方式,实际应用中,还可以几个字为一个cacheline。在本发明实施例中不对每个cacheline的具体大小进行限定,只要比现有技术的cacheline小即可。优选的,可以根据第一事务缓存120与第一cpu110的数据位宽来确定第一事务缓存120中的cacheline的大小。例如,若第一cpu110的数据位宽为32bit,第一事务缓存120的数据位宽为40bit(其中,32bit为数据位宽,8bit为状态位),则可以将第一事务缓存120中的cacheline设置为40bit。

如图3所示,在本步骤中,当第一事务缓存120向其他处理节点中的事务缓存广播目的地址306后,若第二处理节点205中缓存有目的地址306的数据,第二处理节点205中的第二事务缓存220会向第一事务缓存120返回所述目的地址对应的cacheline在所述第二事务缓存220中的状态信息(如图3中的第一状 态信息308)。类似的,若所述第n处理节点305中缓存有所述目的地址的数据,第n处理节点305中的第n事务缓存320会向第一事务缓存120返回所述目的地址对应的cacheline在所述第n事务缓存320中的状态信息(如图3中的第二状态信息312)。其中第一状态信息308和第二状态信息312均可以是下述的无效状态、修改状态或共享状态。可以理解的是,实际应用中,若某个处理节点中未缓存有所述目的地址的数据,则该处理节点可以不向所述第一事务缓存120返回响应消息,从而能够节省节点间的信息传输量。

在本发明实施例中,为了检测事务冲突,每一个事务缓存中的cacheline均包含有状态信息。所述状态信息用于表示该cacheline缓存的共享数据在所述事务缓存中的访问状态。图5为本发明实施例提供的一种缓存行的状态示意图。如图5所示,事务缓存中的每个缓存行(cacheline)可以有如下三种状态:无效状态(i)、修改状态(m)和共享状态(s)。无效状态用于表示该cacheline对应的内存地址的数据不在事务缓存中或者该cacheline中缓存的数据为无效数据。修改状态用于表示该cacheline的数据正在被本地的处理单元修改。其中,在本发明实施例中,本地的处理单元是指与该事务缓存属于同一处理节点的处理单元。换一种表达方式,修改状态用于表示该cacheline的数据正在被本处理节点修改。共享状态用于表示该cacheline的数据与内存中的数据一致。如图5所示,在初始状态下,事务缓存中的所有cacheline均处于无效状态。当本地的处理单元对某个cacheline执行读操作时,则将该cacheline的状态修改为共享状态。当本地的处理单元对事务缓存中的某个cacheline执行写操作时,该cacheline的状态被更新为修改状态。当cacheline处于共享状态时,本地处理单元的读操作不会改变该cacheline的状态,该cacheline将仍然保持共享状态。而当cacheline处于共享状态时,若本地的处理单元对处于共享状态的cacheline的写操作,则该cacheline将由共享状态更新为修改状态。当cacheline处于修改状态时,无论本地的处理单元对该cacheline进行读操作或写操作,该cacheline将仍然保持修改状态。

为了清楚的描述本发明技术方案,下面将对本发明实施例提供的事务缓存中的cacheline的数据结构进行描述。图6为本发明实施例提供的一种缓存行cacheline的结构示意图。如图6所示,在如图1所示的每个处理节点中的事务 缓存中的每个cacheline均包括如下信息:数据data、状态status以及访问所述cacheline的其他处理节点的指针信息。“data”字段用于表示该cacheline的内容,具体的,“data”字段用于表示事务执行过程中访问的内存地址中的共享数据。“status”字段用于表示该cacheline的状态,其中,cacheline的状态包括前述的无效状态、修改状态或共享状态。访问所述cacheline中的共享数据的其他处理节点的指针信息可以通过“ahead”和“next”这两个字段来表示,其中,“ahead”字段用于指示在本处理节点之前访问所述cacheline中的共享数据的其他处理节点的信息;“next”字段用于指示在本处理节点之后访问所述cacheline中的共享数据的其他处理节点的信息。在本发明实施例中,可以根据“ahead”字段以及“next”字段获得访问链表,其中,所述访问链表用于指示不同的处理节点访问同一共享数据的先后顺序。具体的,由于读指令之间不存在互斥关系,因此,在本发明实施中,所述访问链表具体用于指示不同的处理节点读取同一共享数据的先后顺序。

例如,如图6所示,第一处理节点p1中的一个cacheline中的数据为a数据,其状态为共享s状态,“ahead”字段为空,“next”字段指向第二处理节点p2。第二处理节点p2中的一个cacheline中的数据也为a数据,其状态为共享s状态,“ahead”字段指向第一处理节点p1,“next”字段指向第三处理节点p3。第三处理节点p3中的一个cacheline中的数据也为a数据,其状态为也共享s状态,“ahead”字段指向第一处理节点p2,“next”字段为空。因此,从图6可以获知第一处理节点p1、第二处理节点p2和第三处理节点p3当前处理的事务均访问了a数据。并且根据各cacheline的“ahead”字段和“next”字段能够获得a数据的访问链表,根据a数据的访问链表可以得出访问a数据的三个处理节点的先后顺序依次为p0->p1->p2。由此可以得出p0为正在访问a数据的处理节点中第一个访问a数据的处理节点。可以理解的是,本发明实施例中,由于对同一个共享数据执行读操作和写操作存在冲突,多个处理节点可以同时读取同一个共享数据,但不会存在多个处理节点在访问同一个共享数据时既存在读操作也存在写操作的情况,因此,本发明实施例中的访问链表实际上用于表示多个处理节点对同一个共享数据执行读操作的先后顺序。每一个共享数据都可以有一个访问链表。

在本发明实施例中,当其他事务缓存接收到所述第一事务缓存120发送 的目的地址后,其他事务缓存可以查找其是否缓存有目的地址的共享数据。为了描述方便,在本发明实施例中以第二处理节点205中的第二事务缓存220为所述其他事务缓存中的一个事务缓存为例进行描述。当第二事务缓存220接收到所述第一事务缓存120发送的目的地址306后,第二事务缓存220可以查找其是否缓存有所述目的地址306的共享数据。在一种情形下,若第二事务缓存220中没有查找到目的地址306的数据,则说明第二处理节点205在当前进程中未访问所述目的地址306的数据,在这种情况下,第二事务缓存220可以不响应所述第一事务缓存120。在另一种情形下,若第二事务缓存220中查找到所述目的地址306的数据,则说明第二处理节点205在当前进程中访问过所述目的地址的数据。在这种情况下,第二事务缓存220则需要进一步将所述目的地址306命中的cacheline在所述第二缓存220中的状态返回给第一事务缓存120。具体的,第二事务缓存220可以根据所述目的地址命中的cacheline的中的“status”字段确定所述目的地址命中的cacheline在所述第二事务缓存中的状态,并向所述第一事务缓存120返回所述目的地址对应的cacheline在所述第二事务缓存220中的状态。如前所述,该cacheline在所述第二事务缓存中的状态可以为无效状态、修改状态或共享状态。

实际应用中,其他事务缓存可以只在查找到与所述目的地址对应的cacheline的情况下,才向所述第一事务缓存120返回所述目的地址对应的cacheline的状态信息。可以理解的是,可以有多个其他事务缓存向所述第一事务缓存120返回所述目的地址对应的cacheline的状态信息。若某个事务缓存未查找到与所述第一地址对应的cacheline,则在一种情形下,该事务缓存可以不响应所述第一事务缓存120。在另一种情形下,该事务缓存可以向所述第一事务缓存120返回用于指示“无效”状态的响应消息。

在步骤420中,第一事务缓存120根据所述其他处理节点中的事务缓存返回的状态信息确定所述操作指令是否与所述其他处理节点正在执行的操作指令相冲突。可以理解的是,第一事务缓存120向其他处理节点中的事务缓存发送所述目的地址后,若在预设的时间内,第一事务缓存120未收到其他事务缓存返回的所述目的地址306对应的cacheline的状态信息,则所述第一事务缓存120确定所述操作指令未与其他处理节点正在执行的操作指令相冲突。若在预设的时 间内,第一事务缓存120接收到其他事务缓存返回的所述目的地址对应的cacheline的状态信息,则第一事务缓存120需要根据其接收的至少一个状态信息来判断所述操作指令是否与其他处理节点正在执行的操作指令相冲突。例如,如图3所示,第一事务缓存120可以根据第二事务缓存220返回的第一状态信息308来确定操作指令304是否与第二处理节点正在执行的操作指令相冲突。类似的,第一事务缓存120也可以根据第n事务缓存320返回的第二状态信息312来确定操作指令304是否与第n处理节点305正在执行的操作指令相冲突。

具体的,当第一事务缓存120接收到的状态信息均为指示“无效”状态的状态信息时,则所述第一事务缓存120确定所述操作指令304未与其他处理节点正在执行的操作指令相冲突。当第一事务缓存120接收到的状态信息中有指示为“修改”状态的状态信息时,则所述第一事务缓存120确定所述操作指令304与其他处理节点正在执行的操作指令相冲突。当所述第一事务缓存120接收到的状态信息中只有指示为无效状态和共享状态的状态信息时,若所述操作指令为读操作指令,则所述第一事务缓存120确定所述操作指令304与其他处理节点正在执行的操作指令不冲突。若所述操作指令为写操作指令,则所述第一事务缓存120确定所述操作指令304与其他处理节点正在执行的操作指令冲突。

当第一事务缓存120根据所述其他处理节点中的事务缓存返回的状态信息确定所述操作指令与所述其他处理节点正在执行的操作指令相冲突时,该方法进入步骤440。当第一事务缓存120根据所述其他处理节点中的事务缓存返回的状态信息确定所述操作指令未与所述其他处理节点正在执行的操作指令相冲突时,该方法进入步骤445。

在步骤440中,第一事务缓存120向第一cpu110返回失败响应消息。其中,所述失败响应消息用于指示所述操作指令执行失败。在步骤445中,第一事务缓存120执行所述操作指令。当所述操作指令为读操作指令时,第一事务缓存120根据所述读操作指令中的目的地址从内存130中读取数据,并向第一cpu110返回根据所述目的地址从内存130中读取数据。具体的,第一事务缓存120可以根据所述目的地址向内存130发送读取指令,将从内存130中读取的数据存储于一个cacheline中,将该数据返回给第一cpu110,并将该cacheline的状态设置为“共享”状态。当所述操作指令304为写操作指令时,所述写操作指令304 中携带有待写入的数据,则第一事务缓存120可以将待写入的数据存储于所述第一事务缓存120中。具体的,第一事务缓存120可以根据目的地址306在第一事务缓存120中找到对应的cacheline,并将根据将所述数据存储于与目的地址306对应的cacheline中,并将该cacheline的状态更新为“修改”状态。

若在步骤405中,第一事务缓存120判断所述操作指令命中第一事务缓存120中的缓存行cacheline时,则该方法进入步骤425。在步骤425中,第一事务缓存120判断所述操作指令是否为写操作指令,当所述操作指令为写操作指令时,所述方法进入步骤430。当所述操作指令不是写操作指令而是读操作指令时,所述方法进入步骤445。在步骤445中,第一事务缓存120根据所述操作指令中的目的地址从内存130中读取数据,并将读取的数据返回给第一cpu110。

在步骤430中,第一事务缓存120判断所述操作指令命中的cacheline的状态是否为修改状态。其中,所述修改状态用于表示第一事务缓存120在所述事务的执行过程中对所述cacheline的数据执行了写操作。具体的,当第一事务缓存120判断所述操作指令命中第一事务缓存120中的cacheline且该操作指令为写操作指令时,第一事务缓存120可以获取所述操作指令命中的cacheline的状态。若该操作指令命中的cacheline的状态为修改状态,则该方法进入步骤445,第一事务缓存120执行所述操作指令,对所述操作指令命中的cacheline执行写操作,并保持所述cacheline的状态为修改状态。若该cacheline的状态不是“修改”状态而是“共享”状态,则该方法进入步骤435。其中,该cacheline的状态为共享状态说明第一事务缓存120在所述事务执行过程中对所述cacheline的共享数据执行了读操作。

在步骤435中,第一事务缓存120会进一步根据访问链表确定所述第一处理节点105是否为当前访问所述共享数据的处理节点中第一个访问所述共享数据的处理节点。可以理解的是,由于在本发明实施例中,cacheline用于缓存被访问的共享数据,访问链表是根据cacheline中的“ahead”字段以及“next”字段获得的,其中,所述访问链表用于指示不同的处理节点访问所述共享数据的先后顺序。因此,若该cacheline中的“ahead”字段为空,或者,第一处理节点105为所述共享数据的访问链表的头节点,则确认第一处理节点105为正在访问该共享数据的处理节点中第一个访问该共享数据的处理节点。当第一事务缓存120 确认第一处理节点105为当前访问该共享数据的处理节点中的第一个访问该共享数据的处理节点时,则该方法进入步骤445,第一事务缓存120执行所述操作指令。具体的,第一事务缓存120需要将所述操作指令命中的cacheline的状态修改为“修改”状态,通知缓存有所述共享数据的其他处理节点中止处理当前事务,并将所述操作指令中携带的数据写入所述目的地址对应的cacheline中。当第一事务缓存120确认第一处理节点105不是当前访问该共享数据的处理节点中的第一个访问该共享数据的处理节点时,则该方法进入步骤440,第一事务缓存120向第一cpu110返回所述操作指令执行失败的响应消息。根据这种方式,能够保证计算机系统中访问相同共享数据的不同处理节点中运行的事务之间的处理顺序,使得各个处理节点的访问能够按照访问顺序正常进行,避免因为后访问该共享数据的处理节点对该共享数据的修改导致先访问该共享数据的处理节点无法正常处理事务。

例如,若操作指令304为写操作指令,且操作指令304命中了第一事务缓存120,说明第一处理节点105的当前进程访问过所述操作指令304中的目的地址306的共享数据,若在第一操作指令304命中cacheline的状态为共享状态,说明第一处理节点105当前正在执行的进程读取过所述cacheline中的共享数据。则在第一处理节点105需要根据操作指令304改写所述cacheline中的共享数据时,第一事务缓存120需要先根据所述共享数据的访问链表判断第一处理节点105是否为正在访问所述共享数据的处理节点中的第一个处理节点。如果第一处理节点105为正在访问所述共享数据的处理节点中的第一个处理节点,则说明第一处理节点105有权优先处理目的地址306中的所述共享数据。在这种情况下,第一处理节点105可以将操作指令304命中的cacheline的状态由“共享”状态修改为“修改”状态,并向其他处理节点发送通知消息,该通知消息用于通知缓存有目的地址306对应的共享数据的处理节点中止当前的业务,并根据操作指令304将待写入数据写入操作指令304命中的cacheline中。根据这种方式,即使第一处理节点105修改目的地址306中的所述共享数据也不会导致其他处理节点读取的数据出现错误,导致数据的不一致。

本发明实施例提供的冲突检测方法,由于在处理节点中提供了专用于缓存当前事务要访问的共享数据的事务缓存,从而对不是访问共享数据的操作指令 无需执行事务冲突检测,节省了系统处理操作指令中的系统功耗。并且,相对于现有的缓存来说,事务缓存存储的数据较少,在冲突检测过程中,需要遍历的数据就比较少,从而能够提高检测效率。并且,在本发明实施例中,事务缓存的cacheline设置的较小,冲突检测的粒度也比较小,从而使得本发明实施例提供的计算机系统在实现事务冲突检测的过程中检测的精确性更高,更利于计算机系统性能的提升。

进一步的,在本发明实施例中,事务缓存能够主动向其他事务缓存广播其正在处理的操作指令中的目的地址,并根据其他事务缓存返回的所述目的地址对应的cacheline的状态判断是否发生事务冲突。从而,其他处理节点无需通过监听地址总线的来判断其正在执行的事务是否会发生事务冲突,减少了监听无用地址的功耗,更有利于提升系统性能。

图7为本发明实施例提供的一种事务冲突检测装置结构示意图。如图7所示,该装置可以应用于包含有多个处理节点的多核计算机系统中,例如,该装置可以应用于如图1所示的计算机系统中。所述多核计算机系统中的每个处理节点均包括处理单元、通用缓存和事务缓存。处理单元可以是cpu或处理器核(core)等具有计算能力和控制能力的器件。事务缓存用于缓存正在处理的事务的共享数据,所述共享数据为所述多个处理节点中的至少两个处理节点都能够访问的数据。同一个处理节点中的通用缓存和事务缓存分别通过不同的数据通道与处理单元通信。具体的,本发明实施例提供的事务冲突检测装置可以应用于每个处理节点中的事务缓存中,为了描述方便,本发明实施例以事务冲突检测装置70应用于图1中的第一事务缓存120中为例进行描述。如图7所示,所述事务冲突检测装置70可以包括下述模块。

接收模块700,用于接收第一处理单元发送的操作指令,其中,所述操作指令中携带有目的地址,所述目的地址为所述操作指令待访问的内存中的地址;

判断模块705,用于确定所述目的地址未命中所述第一事务缓存中的缓存行cacheline,其中,所述第一事务缓存用于缓存所述第一处理节点正在处理的事务的共享数据,所述共享数据为所述第一处理节点与所述第二处理节点都能够访问的数据;

发送模块710,用于向所述第二处理节点中的事务缓存发送所述目的地 址;

所述接收模块700还用于接收所述第二处理节点中的事务缓存返回的所述目的地址命中的cacheline的状态信息,其中,所述被所述目的地址命中的cacheline中缓存有所述共享数据,所述状态信息用于表示所述共享数据在所述第二处理节点的事务缓存中的访问状态;

冲突确定模块715,用于根据所述状态信息确定所述操作指令是否与第二处理节点正在执行的操作指令相冲突。

在本发明实施例中,所述第一事务缓存中可以包括多个cacheline,且每个cacheline的大小可以设置为一个字(word)。

在一种情形下,当所述第一事务缓存接收到的状态信息为指示修改状态的状态信息时,所述冲突确定模块715具体用于确定所述操作指令与所述第二处理节点正在执行的操作指令相冲突,其中,所述修改状态用于表示所述共享数据正在被所述第二处理节点修改。

在又一种情形下,当所述操作指令为读操作指令,且所述状态信息为指示共享状态的状态信息时,所述冲突确定模块715具体用于确定所述操作指令与所述第二处理节点正在执行的操作指令不冲突,其中,所述共享状态用于表示所述共享数据与内存中的数据一致。

在又一种情形下,当所述操作指令为写操作指令,且所述状态信息为指示为共享状态的状态信息时,所述冲突确定模块715具体用于确定所述操作指令与所述第二处理节点正在执行的操作指令冲突,其中,所述共享状态用于表示所述共享数据与内存中的数据一致。

图8为本发明实施例提供的又一种事务冲突检测装置80的结构示意图。如图8所示,该装置可以应用于包含有多个处理节点的多核计算机系统中,例如,该装置可以应用于如图1所示的计算机系统中。所述多核计算机系统中的每个处理节点均包括处理单元、通用缓存和事务缓存。处理单元可以是cpu或处理器核(core)等具有计算能力和控制能力的器件。事务缓存用于缓存处理单元正在处理的事务的共享数据,所述共享数据为所述多个处理节点中的至少两个处理节点都能够访问的数据。同一个处理节点中的通用缓存和事务缓存分别通过不同的数据通道与处理单元通信。具体的,本发明实施例提供的事务冲突检测装置80 可以应用于每个处理节点中的事务缓存中,为了描述方便,本发明实施例以事务冲突检测装置80应用于图1中的第一事务缓存120中为例进行描述。如图8所示,所述事务冲突检测装置80可以包括下述模块。

接收模块700,用于接收第一处理单元发送的操作指令,其中,所述操作指令中携带有目的地址,其中,所述目的地址为所述操作指令待访问的内存中的地址;

判断模块705,用于确定所述目的地址命中所述第一事务缓存中的缓存行cacheline,其中,被命中的所述cacheline中缓存有所述共享数据;

类型确定模块720,用于确定所述操作指令为写操作指令;

状态确定模块725,用于确定所述操作指令命中的cacheline的状态为共享状态,所述共享状态用于表示所述共享数据与内存中的数据一致;

访问顺序确定模块730,用于确定所述第一处理节点为第一个访问所述共享数据的处理节点;

存储模块735,用于根据所述操作指令将待写入数据写入所述cacheline中。

在本发明实施例中,所述第一事务缓存中可以包括多个cacheline,且每个cacheline的大小可以设置为一个字(word)。

具体的,所述访问顺序确定模块730具体可以根据所述cacheline的访问链表确定所述处理节点为第一个访问所述cacheline的处理节点,其中,所述访问链表用于指示多个处理节点读取所述共享数据的先后顺序。

需要说明的是,实际应用中个,图7和图8所示的各个功能模块可以位于同一个事务冲突检测装置中,具体如图9所示。图9为本发明实施例提供的另一种事务冲突检测装置的结构示意图。在图9所示的事务冲突检测装置90中,在一种情形下,判断模块705可以用于确定所述目的地址未命中所述第一事务缓存中的缓存行cacheline,在另一种情形下,判断模块705也可以用于确定所述目的地址命中所述第一事务缓存中的缓存行cacheline,其中,被命中的所述cacheline中缓存有所述共享数据。图9中其他模块的描述可以分别参考图7和图8中对各个模块的具体描述,在此不再赘述。

本发明实施例所提供的事务冲突检测装置70-90可以执行图4所述实施 例所描述的冲突检测方法,各个模块功能的详细描述可参见前述实施例中的描述,在此不再赘述。

本发明实施例还提供一种数据处理的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:u盘、移动硬盘、磁碟、光盘、随机存储器(random-accessmemory,ram)、固态硬盘(solidstatedisk,ssd)或者其他非易失性存储器(non-volatilememory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。

需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1