CN105094993B - 一种多核处理器、数据同步的方法及装置 - Google Patents
一种多核处理器、数据同步的方法及装置 Download PDFInfo
- Publication number
- CN105094993B CN105094993B CN201510507602.0A CN201510507602A CN105094993B CN 105094993 B CN105094993 B CN 105094993B CN 201510507602 A CN201510507602 A CN 201510507602A CN 105094993 B CN105094993 B CN 105094993B
- Authority
- CN
- China
- Prior art keywords
- lock
- mark
- physical locks
- virtual
- locks
- 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.)
- Active
Links
Landscapes
- Multi Processors (AREA)
Abstract
本发明公开了一种多核处理器,包括:物理锁装置和集成在每个处理器核上的虚拟锁指令执行装置,物理锁装置分别与每个虚拟锁指令执行装置连接,物理锁装置包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,虚拟锁的标识为数据对象的一个存储地址,且虚拟锁的标识的数量大于物理锁的标识的数量;虚拟锁指令执行装置用于根据目的虚拟锁的标识映射出目的物理锁的标识,物理锁装置用于根据目的物理锁的标识,从多个物理锁中确定目的物理锁;对目的物理锁执行锁操作类型标识对应的锁操作,得到针对目标物理锁的锁操作结果。本发明实施例提供的多核处理器,可以解决线程间的对数据对象的访问冲突问题,又避免了物理锁的内存开销。
Description
技术领域
本发明涉及处理器技术领域,具体涉及一种多核处理器、数据同步的方法及装置。
背景技术
处理器的发展趋势是在片上集成越来越多的核,多核共享存储的多线程并行模式为大规模细粒度并行提供了机会,大规模细粒度并行就是不同线程可以并行访问不同的数据对象。
细粒度并行的关键技术是细粒度数据的同步机制。在共享存储多线程模式下,多个线程可能对同一数据对象进行操作,导致线程间对该数据对象的访问存在冲突,因而需要协调多个线程对该数据对象的访问,也就是需要对该数据对象的访问次序进行同步。通常的细粒度数据同步技术是为每个存在访问竞争的数据对象分配一把物理锁,线程对该数据对象操作之前必须先获取该物理锁,操作完成后再释放该物理锁。
现有技术中这种避免数据同步冲突的方法,需要为每个存在访问竞争的数据对象分配物理锁和对应的内存空间。由于每个数据对象都可能存在访问竞争,为每个数据对象都设置一把物理锁,就会导致很大的内存开销。
发明内容
为了解决现有技术中数据同步时为每个存在访问竞争的数据对象显式分配物理锁而引起很大的内存开销的技术问题,本发明实施例提供一种多核处理器、数据同步的方法及装置。可以一定程度上解决线程间的对数据对象的访问冲突问题,又减少了物理锁的内存开销。
本发明第一方面提供一种多核处理器,包括:物理锁装置和集成在每个处理器核上的虚拟锁指令执行装置,所述物理锁装置分别与每个所述虚拟锁指令执行装置连接,所述物理锁装置包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,所述虚拟锁的标识为所述数据对象的一个存储地址,且所述虚拟锁的标识的数量大于所述物理锁的标识的数量;
所述虚拟锁指令执行装置用于:
接收虚拟锁指令,所述虚拟锁指令用于指示执行从虚拟锁的标识到物理锁的标识的映射操作,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识;
根据所述目的虚拟锁的标识映射出目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识;
所述物理锁装置用于:
根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁;
对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目标物理锁的锁操作结果。
结合第一方面,在第一种可能的实现方式中,所述锁操作请求还包括所述虚拟锁指令执行装置所属的处理器核的标识;
所述物理锁装置,还用于根据所述处理器核的标识向所述虚拟锁指令执行装置返回所述锁操作结果。
结合第一方面第一种可能的实现方式,在第二种可能的实现方式中,所述虚拟锁指令执行装置包括虚拟锁的标识寄存器和映射处理模块,所述物理锁装置包括缓冲队列存储模块和物理锁操作模块;其中,
所述虚拟锁的标识寄存器,用于存储所述目的虚拟锁的标识,所述目的虚拟锁的标识包括所述目的虚拟锁的标识对应的数据对象的一个地址;
所述映射处理模块,用于根据所述虚拟锁的标识寄存器中存储的所述虚拟锁的标识,以及虚拟锁的标识与物理锁的标识的映射关系,映射出与所述虚拟锁的标识对应的目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括锁操作类型标识、所述目的物理锁的标识和所述虚拟锁指令执行装置所属的处理器核的标识;
所述缓冲队列存储模块,用于缓存所述锁操作请求;
所述物理锁操作模块用于:
从所述缓冲队列存储模块中读取排在所述缓冲队列最前面的锁操作请求;
根据所述锁操作请求中的目的物理锁的标识确定所述目的物理锁,对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果;
根据所述处理器核的标识向所述虚拟锁指令执行装置返回所述锁操作结果。
结合第一方面第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述虚拟锁指令执行装置还包括:虚拟锁返回结果寄存器;
所述物理锁操作模块,具体用于返回所述锁操作结果给所述虚拟锁指令执行装置中的虚拟锁返回结果寄存器;
所述虚拟锁返回结果寄存器,用于存储接收到的所述锁操作结果。
结合第一方面第一种、第二种或第三种可能的实现方式,在第四种可能的实现方式中,
所述物理锁操作模块具体用于:
当所述锁操作类型标识为加锁的标识vltrylock时,确定所述目的物理锁的状态;
当所述目的物理锁处于空闲状态时,获取所述目的物理锁,将所述目的物理锁的状态修改到被占用状态,并向所述虚拟锁指令执行装置返回表示获取锁成功的锁操作结果;
当所述目的物理锁处于被占用状态时,向所述虚拟锁指令执行装置返回表示获取锁失败的锁操作结果。
结合第一方面第一种、第二种或第三种可能的实现方式,在第五种可能的实现方式中,
所述物理锁操作模块具体用于:
当所述锁操作类型标识为解锁的标识vlunlock时,对所述目的物理锁进行解锁操作,并将所述目的物理锁的状态修改到空闲状态,得到表示解锁成功的锁操作结果;
当所述锁操作类型标识为重置目的虚拟锁的标识vlreset时,对所述目的物理锁进行重置操作,将所述目的物理锁的状态修改到空闲状态,得到表示重置目的物理锁成功或失败的锁操作结果。
本发明第二方面提供一种数据同步的方法,所述方法应用于多核处理器,所述多核处理器包括物理锁装置和多个处理器核,每个所述处理器核均包括一虚拟锁指令执行装置,所述物理锁装置分别与所述虚拟锁指令执行装置连接,所述物理锁装置包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,所述虚拟锁的标识为所述数据对象的一个存储地址,且所述虚拟锁的标识的数量大于所述物理锁的标识的数量,所述方法包括:
所述虚拟锁指令执行装置接收虚拟锁指令,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识,所述目的虚拟锁的标识为待同步数据对象的一个地址;
所述虚拟锁指令执行装置根据所述目的虚拟锁的标识映射出目的物理锁的标识,向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识;
所述物理锁装置根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁;
所述物理锁装置对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,所述锁操作的结果用于所述待同步数据对象的同步操作。
结合第二方面,在第一种可能的实现方式中,所述锁操作请求还包括所述虚拟锁指令执行装置所属的处理器核的标识,所述方法还包括:
所述物理锁装置根据所述处理器核的标识向所述虚拟锁指令执行装置返回所述锁操作结果;
所述虚拟锁指令执行装置接收所述物理锁装置返回的所述锁操作结果,并存储所述锁操作结果。
结合第二方面第一种可能的实现方式,在第二种可能的实现方式中,所述虚拟锁指令执行装置接收虚拟锁指令之后,所述方法还包括:
所述虚拟锁指令执行装置存储所述目的虚拟锁的标识,所述目的虚拟锁的标识包括所述目的虚拟锁的标识对应的数据对象的一个地址;
所述虚拟锁指令执行装置根据所述目的虚拟锁的标识映射出目的物理锁的标识,向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识,包括:
所述虚拟锁指令执行装置根据存储的所述虚拟锁的标识,以及虚拟锁的标识与物理锁的标识的映射关系,映射出与所述虚拟锁的标识对应的目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括锁操作类型标识、所述目的物理锁的标识和所述虚拟锁指令执行装置所属的处理器核的标识。
结合第二方面、第二方面第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述物理锁装置根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁之前,所述方法还包括:
所述物理锁装置按照缓冲队列的方式缓存接收的所述锁操作请求;
从缓存的所述锁操作请求中读取排在所述缓冲队列最前面的锁操作请求。
结合第二方面、第二方面第一种、第二种或第三种可能的实现方式,在第四种可能的实现方式中,所述对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,包括:
当所述锁操作类型标识为加锁的标识vltrylock时,确定所述目的物理锁的状态;
当所述目的物理锁处于空闲状态时,获取所述目的物理锁,将所述目的物理锁的状态修改到被占用状态,得到表示获取锁成功的锁操作结果;
当所述目的物理锁处于被占用状态时,得到表示获取锁失败的锁操作结果。
结合第二方面、第二方面第一种、第二种或第三种可能的实现方式,在第五种可能的实现方式中,所述对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,包括:
当所述锁操作类型标识为解锁的标识vlunlock时,对所述目的物理锁进行解锁操作,并将所述目的物理锁的状态修改到空闲状态,得到表示解锁成功的锁操作结果;
当所述锁操作类型标识为重置目的虚拟锁的标识vlreset时,对所述目的物理锁进行重置操作,将所述目的物理锁的状态修改到空闲状态,得到表示重置目的物理锁成功或失败的锁操作结果;
当所述锁操作类型标识为重置全部虚拟锁的标识vlresetall时,对所述多个物理锁进行重置操作,将所述多个物理锁的状态都修改到空闲状态,得到表示重置全部锁成功的锁操作结果。
与现有技术中针对每个数据对象都要分配一把物理锁,导致物理锁占用大量的内存空间相比,本发明实施例提供的多核处理器,通过硬件来实现物理锁,通过虚拟锁的标识与物理锁的标识之间的映射来保证对数据对象的同步,每个数据对象的虚拟锁的标识为该数据对象的在内存中的一个地址,因此虚拟锁的标识没有占用额外的内存,而且,一个物理锁的标识可以对应多个虚拟锁的标识,虚拟锁的标识的数量远远小于物理锁的标识的数量,因此,只需要较少的硬件开销就可以解决线程间的对数据对象的访问冲突问题,又减少了物理锁的内存开销。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明一个实施例提供的多核处理器的结构示意图;
图2是本发明另一实施例提供的多核处理器的结构示意图;
图3是本发明实施例中锁虚拟化机制的原理图;
图4是本发明实施例中线程数与物理锁的数量关系示意图;
图5是本发明实施例中vLock指令执行装置和pLock装置内部结构以及指令执行流程的示意图;
图6是本发明实施例中针对任意内存空间内地址进行数据同步的底层操作流程;
图7是本发明实施例提供的数据同步的方法的一实施例示意图;
图8是本发明实施例中数据同步的装置的一实施例示意图;
图9是本发明实施例中数据同步的装置的另一实施例示意图;
图10是本发明实施例中数据同步的装置的另一实施例示意图。
具体实施方式
本发明实施例提供一种多核处理器、数据同步的方法及装置。可以一定程度上解决线程间的对数据对象的访问冲突问题,又减少了物理锁的内存开销。本发明
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
下面通过具体实施例,分别进行详细的说明。
图1为本发明实施例中多核处理器的一结构示意图。如图1所示,本发明实施例提供一种多核处理器。所述处理器可以是多核或众核处理器。
如图1所示,所述多核处理器包括物理锁(pLock)装置110和多个处理器核,每个处理器核中包括一个vLock指令执行装置120,所述pLock装置110分别与每个vLock指令执行装置120连接。所述物理锁装置110包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,所述虚拟锁的标识为所述数据对象的一个存储地址,且所述虚拟锁的标识的数量大于所述物理锁的标识的数量;通常是虚拟锁的数量远远大于所述物理锁的数量;
所述虚拟锁指令执行装置120,用于:
接收虚拟锁指令,所述虚拟锁指令用于指示执行从虚拟锁的标识到物理锁的标识的映射操作,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识;
根据所述目的虚拟锁的标识映射出目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识;
所述物理锁装置110,用于:
根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁;
对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果。
本发明实施例中的数据对象通常为细粒度数据对象。
本发明实施例中的接收虚拟锁指令的虚拟锁指令执行装置可以是任意一个虚拟锁指令执行装置120,针对上述过程的描述也可以理解为:
假设处理器有N个处理器核,N为正整数,所述N个vLock指令执行装置120包括:设置在第i个处理器核中的第i个vLock指令执行装置120,i为小于或等于N的正整数;也就是说,通过将i取为不同的值,第i个vLock指令执行装置120可以是所述N个vLock指令执行装置120中的任一个。
所述第i个vLock指令执行装置120,用于接收虚拟锁指令,所述虚拟锁指令用于指示执行虚拟锁的标识(vLock IDentity,vID)到物理锁的标识(pLock IDentity,pID)的映射操作,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识,目的vID可以是所述该第i个vLock指令执行装置准备同步的数据的首地址,也就是其准备同步的数据对象的首地址,将所述目的vID映射为目的pID,向所述物理锁装置110发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的pID;
所述pLock装置110,用于接收所述锁操作请求,根据所述锁操作类型标识对所述目的pID对应的物理锁(pLock)进行相应的锁操作,得到锁操作的结果。
锁操作请求中还可以携带所述第i个核的标识,当携带所述第i个核的标识时,所述pLock装置110向所述第i个vLock指令执行装置120返回锁操作的结果。
请参考图2,本发明实施例中,所述vLock指令执行装置120具体可以包括:虚拟锁的标识(vLock IDentity,vID)寄存器,虚拟锁返回结果(vLock Ret,vRet)寄存器,以及,映射处理模块;所述pLock装置110具体可以包括:缓冲队列存储模块,pLock操作模块,以及pLock向量存储模块。其中,映射处理模块和pLock操作模块都通过硬件实现,具体可以逻辑电路,pLock向量存储模块中存储有多个物理锁,物理锁可以是通过逻辑电路来实现。
其中,上述各个功能模块的功能如下:
所述vID寄存器,用于存储所述细粒度数据的虚拟锁的标识vID;
所述映射处理模块,用于根据所述虚拟锁的标识寄存器中存储的所述细粒度数据的虚拟锁的标识,以及虚拟锁的标识与物理锁的标识的映射关系,映射出与所述虚拟锁对应的目的物理锁的标识,并向所述物理锁装置发送针对所述目的物理锁的锁操作请求,所述锁操作请求包括锁操作类型标识、所述目的物理锁的标识和所述虚拟锁指令执行装置所属的处理器核的标识;
所述缓冲队列存储模块用于缓存接收到的锁操作请求;
所述pLock操作模块,用于从所述缓冲队列存储模块中提取当前的锁操作请求,也就是排在缓冲队列最前面的锁操作请求,根据所述锁操作类型标识对所述pID对应的pLock进行相应的锁操作。
进一步的,所述pLock操作模块,还可用于返回操作结果给所述第i个vLock指令执行装置中的vRet寄存器;
所述vRet寄存器,用于存储接收到的锁操作结果。
值得说明的是,所述vID可以由用户软件(用户函数)写入所述vID寄存器,锁操作类型标识可以由用户软件下发给核中的vLock指令执行装置中的映射处理模块,锁操作类型标识可以是通过所述vLock指令下发,用户软件还可以从vRet寄存器读取vLock指令的操作结果。
由上可见,本发明实施例提供的多核处理器:
通过将虚拟锁的标识vID映射为物理锁的标识pID,进而对pID对应的物理锁进行锁操作,虚拟锁可以是数据对象内存空间的地址,所以不需要为虚拟锁实际分配内存空间,不会因此产生内存开销;而且一个物理锁的标识可以对应多个虚拟锁的标识,物理锁的标识的数量远远小于虚拟锁的标识的数量,因此用少量的硬件物理锁开销就可以解决线程间的对数据对象的访问冲突问题,又避免了物理锁的内存开销。
另外,本发明实施例提供的多核处理器不改变现有的处理器核微体系结构,只增量式地在处理器中添加少量硬件电路,就可以实现细粒度数据同步;
而且,本发明技术方案由在多核处理器中增加硬件电路实现,独立于多核处理器的其它部分,与多核处理器的原有功能互不影响。
下面,对本发明技术方案作进一步详细描述。
本发明技术方案包括锁虚拟化机制、指令集扩展和硬件实现三部分,下面分别叙述。
锁虚拟化机制:
如图3所示,是本发明实施例中锁虚拟化机制的原理图。逻辑上,任意大小的虚拟锁(vLock)的标识,都可以通过一个哈希(Hash)函数(如模余运算)映射到固定大小的物理锁(pLock)的标识。
本发明实施例中,采用虚拟锁(vLock)机制,为每个存在访问竞争的数据对象分配一个vLock,但无需为vLock实际分配内存空间。本发明实施例中,可以用不同的虚拟锁的标识(vLock IDentity,vID)来表示不同的vLock。本发明实施例中,可采用数据对象的首地址作为对应于该数据对象的虚拟锁的标识vID,数据对象首地址通常是64位无符号整数。
本发明实施例中,另外提供物理锁(pLock)向量。pLock向量可以包括多个pLock,每个pLock可占用1比特(bit)存储空间,其中,所述pLock的值为0时表示锁未被占用,为1时表示锁已被占用,或者,所述pLock的值为1时表示锁未被占用,为0时表示锁已被占用。当然,也可以用其他方式来表示物理锁的使用状态。本发明实施例中,可以用不同的物理锁的标识(pLock IDentity,pID)来表示不同的pLock。
本实施例中,可以利用Hash函数对vID进行计算,以得到的值作为pID,从而将每个vLock映射到固定大小的pLock向量中的某个pLock。这样,就可以将针对虚拟锁的锁操作转化为针对物理锁的锁操作。换句话说,对第i个虚拟锁vLock[i]的操作会被设映射到第j个物理锁pLock[j],j=hash(i),i和j均为正整数。
本发明实施例中,物理锁的个数可以远远小于虚拟锁的个数。可以证明:如果对虚拟锁的请求是随机的,那么对物理锁的请求也是随机的;并发请求物理锁的冲突率与虚拟锁的个数无关,而只与线程个数和物理锁的个数有关。实际上,对于给定的线程数,只需要固定个数的物理锁,就可以将冲突率降到1%以下,具体的数量关系如图4所示。据此,当处理器中核的个数不大于16时,可以取物理锁向量长度为8191(即,8191个物理锁);当核的个数不大于32个时,可以取物理锁向量长度为16383(即,16383个物理锁)。由上可见,在对数据对象随机访问的模式下,只需要很小的物理锁硬件开销,就可以支持对整个地址空间的细粒度互斥操作。
指令集扩展(vLock指令):
本发明实施例中,添加四条新的vLock指令和两个专用寄存器,四条新的vLock指令也就是新增四个锁操作类型标识,具体见表格1。vLock指令执行前,需要先将虚拟锁的标识vID写入vID寄存器,vID为64位无符号整数,64位地址空间的每个字节都可以拥有一个虚拟锁;vLock指令执行完后,操作结果会返回到vRet寄存器;用户可以通过读vRet寄存器判断操作是否有效。所有vLock指令均为原子指令,原子指令是指,在指令执行过程中会阻塞该处理器核且禁止操作系统对该处理器核进行上下文切换。
由表1可见,本发明实施例中,所述vLock指令包括:加锁指令vltrylock,解锁指令vlunlock,重置指令vlreset,以及,全部重置指令vlresetall。上述多个vLock指令具体为锁编程接口指令,支持通用的锁编程接口。
指令 | vID寄存器 | vRet寄存器 | 指令功能 |
vltrylock | 64位无符号整数 | 0:成功;1:失败 | 对vID加锁 |
vlunlock | 64位无符号整数 | N/A(总是成功) | 对vID解锁 |
vlreset | 64位无符号整数 | 0:成功;1:失败 | 重置vID锁 |
vlresetall | N/A(作用于所有锁) | N/A(总是成功) | 重置所有锁 |
实际上,vLock指令的表示形式为锁操作类型标识+目的虚拟锁的标识,例如:“vltrylock A”表示对标识为A的虚拟锁执行从虚拟锁的标识到物理锁的标识的映射,对映射得到的物理锁的标识对应的物理锁执行加锁操作。vltrylock可以用来表示锁操作类型标识。
vltrylock以目的vID(64位无符号整数)为参数,用于对目的vID对应的目的pID所对应的目的物理锁加锁;vltrylock要求在执行完毕后返回操作结果,操作结果用1个bit表示,例如,当值为0时表示获取锁成功的锁操作结果,当值为1时表示获取锁失败的锁操作结果,或者,当值为1时表示获取锁成功的锁操作结果,当值为0时表示获取锁失败的锁操作结果。
vlunlock以vID为参数,用于对vID解锁,该操作总是成功,执行完毕后无需返回操作结果。
vlreset以目的vID为参数,用于重置目的vID对应的目的pID对应的目的物理锁,虽然在用户层面上没有物理锁的概念,面向用户只有虚拟锁,但vlreset指令传递到虚拟锁指令执行装置和物理锁装置后会自动查询到对应的目的物理锁,对目的物理锁进行重置。vlreset指令不是强制执行指令,例如:如果目的物理锁正在被某个进程使用时,可以不强制重置,所以处理器核要求在执行完毕后返回操作结果,操作结果用1个bit表示,例如,当值为0时表示重置目的物理锁成功,当值为1时表示重置目的物理锁失败,或者,当值为1时表示重置目的物理锁成功,当值为0时表示重置目的物理锁失败。
Vlresetall指令是一个特殊的指令,是在出现死锁时的处理指令,Vlresetall表示重置所有虚拟锁,在该指令传递到虚拟锁指令执行装置和物理锁装置后就会将虚拟锁对应到物理锁,也就是重置所有物理锁,因整个虚拟锁空间与整个物理锁向量是全映射的,所以在接收Vlresetall指令后,可以通过虚拟锁空间直接映射出物理锁向量中的所有物理锁,再对所有物理锁进行重置,也可以不进行映射,直接对物理锁向量中的所有物理锁进行重置。
vlresetall在用户层面表示重置所有虚拟锁,在硬件层面表示重置所有物理锁,该指令通常在死锁的情况下使用,所以是强制执行指令,所以该操作总是成功,执行完毕后无需返回操作结果。
本发明实施例中,通过专门的vLock指令,为用户提供简单高效的编程接口,屏蔽了所有底层硬件细节。
硬件实现:
本发明实施例中,多核处理器包括多个处理器核,每个处理器核中设置有一个vLock指令执行装置,在多个核之外还设置一个pLock装置。处理器中的所有核共享该pLock装置。各个vLock指令执行装置可以通过硬布线与pLock装置连接。
如图5所示,是vLock指令执行装置和pLock装置内部结构以及指令执行流程的示意图。vLock指令执行装置具体包括:vID寄存器,vRet寄存器,以及,映射处理模块;pLock装置具体包括:缓冲队列存储模块,pLock操作模块,以及pLock向量存储模块。
vLock指令执行装置用于将vID转换成pID,并向pLock装置发出锁操作请求,该锁操作请求可以包括三元组(op,pID,coreID),最后将pLock装置返回的操作结果保存到vRet寄存器,其中op表示锁操作类型标识,pID表示目的物理锁的标识,coreID表示vLock指令执行装置所属处理器核的标识。
pLock装置中,缓冲队列存储模块缓冲从处理器核发来的锁操作请求,vlunlock指令操作优先级最高,其他三个指令操作优先级相同且按照先进先出(FIFO)顺序插入;缓冲队列存储模块支持并发请求。pLock操作模块从缓冲队列存储模块提取三元组,对物理锁向量中pID号物理锁进行操作;并在需要返回操作结果时,返回表示成功或失败的锁操作结果给CoreID表示的处理器核中的vLock指令执行装置。物理锁向量中,每个物理锁为1bit,物理锁的值表示锁状态,可用0表示未锁(unlocked),1表示已锁(locked)。如前文所述,物理锁的个数由处理器核数决定;例如:对于16核处理器,物理锁的个数为8191,即,物理锁向量的值为8191。
下面,请继续参考图5,对vLock指令的具体指令流程进行说明。其中,对于前三条指令(即vltrylock,vlunlock,vlreset),假设指令执行前已经将vID写入vID寄存器,且执行该指令的处理器核ID表示为CoreID。下面,依次对四种vLock指令的执行流程进行说明:
1、vltrylock指令的指令执行流程:
处理器核中,vLock指令执行装置的映射处理模块解析该vltrylock指令,将目的vID转换成目的pID,将三元组(trylock,pID,CoreID)锁操作请求发送给pLock装置;
pLock装置收到该三元组形式的锁操作请求后,如果前面有其他操作则将该三元组先缓冲到缓冲队列;待该三元组排到缓冲队列的最前端时,pLock装置的pLock操作模块从缓冲队列中取出该三元组,对pID对应的物理锁进行加锁操作,例如,如果pID号物理锁的值为0,则将其改写为1,并向CoreID表示的处理器核发送0(表示获取锁成功);如果pID号物理锁值为1,则直接向CoreID表示的处理器核发送1(表示获取锁失败)。
可见,当所述vLock指令为vltrylock时,所述pLock操作模块具体用于:
确定所述目的物理锁的状态;
当所述目的物理锁处于空闲状态时,获取所述目的物理锁,将所述目的物理锁的状态修改到被占用状态,并向所述虚拟锁指令执行装置返回表示获取锁成功的锁操作结果;
当所述目的物理锁处于被占用状态时,向所述虚拟锁指令执行装置返回表示获取锁失败的锁操作结果。
2、vlunlock指令的指令执行流程:
处理器核中,vLock指令执行装置的映射处理模块解析该vlunlock指令,将目的vID转换成目的pID,将三元组(vlunlock,pID,CoreID)锁操作请求发送给pLock装置,不等待结果返回;
pLock装置收到该三元组形式的锁操作请求后,如果前面有其他操作则将该三元组先缓冲到缓冲队列;待该三元组排到缓冲队列的最前端时,pLock装置的pLock操作模块从缓冲队列中取出该三元组,对pID表示的物理锁进行操作,例如,将其值改写为0。
可见,所述pLock操作模块具体用于当所述锁操作类型标识为解锁的标识vlunlock时,对所述目的物理锁进行解锁操作,并将所述目的物理锁的状态修改到空闲状态,得到表示解锁成功的锁操作结果;
3、vlreset指令的指令执行流程:
vlreset指令与vlunlock指令的执行流程大部分一样,区别在于:vlreset三元组锁操作请求在pLock装置缓冲队列中的优先级低于vlunlock;由于vlreset指令不是强制执行指令,所以处理器核必须等待pLock装置返回操作结果;pLock装置操作成功后发送表示成功的操作结果给CoreID对应的处理器核。具体的流程包括:
vLock指令执行装置的映射处理模块解析该vlreset指令,将目的vID转换成目的pID,将三元组(vlreset,pID,CoreID)锁操作请求发送给pLock装置,等待结果返回;
pLock装置收到该三元组形式的锁操作请求后,如果前面有其他操作则将该三元组先缓冲到缓冲队列(vlreset优先级低于vlunlock);待该三元组排到缓冲队列的最前端时,pLock装置的pLock操作模块从缓冲队列中取出该三元组,对pID表示的物理锁进行重置操作,例如,将其值改写为0。pLock装置操作成功后发送表示成功的操作结果给CoreID对应的处理器核。
可见,所述pLock操作模块具体用于当所述锁操作类型标识为重置目的虚拟锁的标识vlreset时,对所述目的物理锁进行重置操作,将所述目的物理锁的状态修改到空闲状态,得到表示重置目的物理锁成功或失败的锁操作结果。
4、vlresetall指令的指令执行流程:
处理器核中,vLock指令执行装置的映射处理模块解析该vlresetall指令,直接向pLock装置发送三元组(resetall,n/a,n/a)锁操作请求,指示对所有物理锁进行重置,且不等待操作结果返回。pLock装置收到锁操作请求后对所有pLock进行重置,将pLock向量刷为全0。
可见,pLock操作模块具体用于当所述锁操作类型标识为重置全部虚拟锁的标识vlresetall时,对所述多个物理锁进行重置操作,将所述多个物理锁的状态都修改到空闲状态,得到表示重置全部锁成功的锁操作结果。
本发明一些实施例中,vLock指令与硬件实现本身可以不提供锁冲突的处理机制,如果对应的物理锁当前不可用则简单等待,锁冲突后的具体处理策略(例如等待锁超时后退出、获取锁不成功后线程进入休眠状态)可由用户实现。如前所述,利用vlreset指令以及vlresetall指令用户可以自定义对死锁等行为的处理;另外,利用指令vlreset和vlresetall提供的刷新机制,用户可以实现更为复杂的冲突解决策略,且理论上可以将vlock用于操作系统内核态的功能装置。
下面继续对本发明实施例处理器的一些具体细节进行详细说明。
本发明实施例的处理器及其扩展指令集提供的语义可以完备地支持对64位全地址空间的细粒度数据同步。对于任意的数据对象集合,其每一个数据对象总可以用唯一的数据对象首地址来标识,因而vLock指令可以对任意的数据对象集合提供互斥同步的保证,不论数据对象集合大小、是否连续存储以及是否定长。本发明实施例中,用户使用vLock时,不需要分配任何内存,只需要以数据对象的首地址(注:在现代处理器中地址类型为64位无符号整数)作为参数来调用相关的vLock指令。
如图6所示,是基于vLock的针对任意内存空间内地址(addr)进行细粒度数据同步的底层操作流程,该流程及其每一步包含的硬件操作与图5所示的硬件结构一一对应。用户操作通用流程分为三步,即:
(1)用户程序将要进行细粒度同步的内存地址addr写入vID寄存器;
(2)处理器执行相应的vLock指令,如vltrylock或者vlunlock等;具体可包括处理器核中的vLock指令执行装置的操作以及pLock装置的操作,详细内容强参考图5以及前文中的说明;
(3)用户程序读取vRet寄存器的返回值,获得vLock指令执行的操作结果(即操作成功或操作失败)。
其中,第(1)步和第(3)步不是必须的,例如,加锁操作需要上述完整(1)~(3)步,解锁操作只需要(1)~(2)步,重置操作只需要第(2)步。每一步的具体含义在前文中已经说明,这里不再详述。
在具体的应用场景中,用户程序通常调用基于vLock实现的库。下面给出一个最基本的vLock细粒度锁实现,其接口使用pthread(POSIX threadsc,POSIX线程)库形式,支持任意多线程对任意内存对象的非嵌套互斥操作;其中,POSIX表示可移植操作系统接口(Portable Operating System Interface,缩写为POSIX);该pthread库的基本接口函数实现如下面代码示例。
一种基于vLock硬件实现的自旋锁示例
接口函数1:
bool thread_vlock_trylock(void*address){
return(asm_vltrylock(address)==0);
}
接口函数2:
void thread_vlock_lock(void*address){
while(asm_vltrylock(address)!=0);
}
接口函数3:
void thread_vlock_unlock(void*address){
atomic_full_barrier();
asm_vlunlock(address);
}
接口函数4:
void thread_vlock_init(){
asm_vlresetall();
}
接口函数5:
void thread_vlock_destroy(){
//do nothing
}
在上述接口实现中,接口函数1~3接受一个64位的内存地址作为参数;其接口语义与pthread_spinlock_t的相应函数相同。这5个接口函数与前文所述的4种vLock指令的对应关系为:接口函数1对应于vltrylock指令,接口函数2循环调用接口函数1,接口函数3对应于vlunlock指令,接口函数4对应于vlreset指令,接口函数5对应于vlresetall指令。
下面给出5个接口的工作细节。
thread_vlock_trylock函数对变量address指向的内存位置非阻塞地尝试加锁,其底层执行过程为:宏asm_vltrylock以64位地址(即vID)作为参数调用vltrylock指令;vltrylock指令将address通过哈希计算转换为内部硬件物理锁地址(即pID);pLock装置对该物理锁进行加锁操作,如果该物理锁已经被占用则返回false(例如0或1)表示加锁操作失败,否则返回true(例如1或0)表示对地址address加锁成功。
thread_vlock_lock函数对变量address指向的内存位置阻塞地加锁,其底层执行过程为循环调用asm_vltrylock宏直到成功获取锁。需要指出的是,这里给出的是最简单的基于忙等的阻塞实现,用户可以进一步扩展优化等待策略。
thread_vlock_unlock函数底层执行过程为:执行全局的内存barrie(atomic_full_barrier,由处理器提供硬件指令支持),保证所有同步的数据都已经写入内存;宏asm_vlunlock以64位地址变量address(即vID)为参数调用vlunlock指令;vlock指令将address通过哈希计算转换为内部硬件物理锁地址(即pID);pLock装置对该物理锁进行解锁操作。需要注意的是,内存barrier操作是为了保证用户程序正确性,通常该操作是必要的但是和pLock装置以及vLock指令执行装置本身无关。
thread_vlock_init函数的底层执行过程为:asm_vlresetall宏调用vlresetall指令刷新vlock内部物理锁硬件状态,其执行结果是地址空间内的内存地址均重置为解锁状态。
thread_vlock_destroy函数的底层过程不包含任何操作。
为了说明基于lock的细粒度数据同步的使用方法,下面代码给出互斥同步一个共享内存对象时与前文现有技术一示例的对比。
数据对象及其锁的数组结构示例:
DataItem dataItems[N];
对i号数据对象的互斥操作示例:
1:thread_vlock_lock(&dataItems[i]);
2:do_some_work(dataItems[i]);
3:thread_vlock_unlock(&dataItems[i]);
从上述代码段可以看出,与基于pthread_spinlock_t数组实现的传统细粒度锁方案不同,本发明实施例基于vlock实现的细粒度锁不需要任何内存空间开销。事实上vlock机制以及基于vlock的用户态库的相关操作是独立于内存地址空间的。需要注意的是,这里给出的仅仅是最基本的基于vlock的细粒度数据同步函数库实现。基于该基本实现,用户可以进一步扩展已有的冲突解决策略。
由上可见,本发明实施例不改变现有的处理器核微体系结构,只增量式地添加少量硬件电路,就可以实现细粒度同步。硬件开销方面,本发明在处理器核端增加两个特殊功能寄存器和一个执行虚拟锁ID(64位无符号整数)到物理锁ID(<16位整数)的转换部件,另外为所有核增加一个共享的物理锁装置。并且,本发明方案独立于处理器的其他部分,因而不影响已有的编译方法和优化的正确性与性能。本发明方案独立于处理器地址空间,对现有处理器的其他功能模块透明,另外,本发明编程简单,用户只需遵循一些简单原则,即可用专门指令实现所有的锁操作。
综上,本发明实施例提供了一种提供的多核处理器,取得了以下技术效果:
通过将虚拟锁的标识vID映射为物理锁的标识pID,进而对pID对应的物理锁进行锁操作,虚拟锁的标识可以是数据对象内存空间的地址,所以不需要为虚拟锁实际分配内存空间,不会因此产生内存开销;而且一个物理锁可以对应多个虚拟锁,物理锁的数量远远小于虚拟锁的数量,因此用少量的硬件物理锁开销避免了线程间的对数据对象的访问冲突,又避免物理锁的内存开销。
另外,不改变现有的处理器核微体系结构,只增量式地在处理器中添加少量硬件电路,就可以实现细粒度数据同步。
而且,本发明技术方案由在处理器中增加的硬件电路实现,独立于处理器的其它部分,与处理器的原有功能互不影响。
为了更好的实施本发明实施例的上述方案,下面还提供一种细粒度数据同步的方法,该方法可由上述方案的处理器实施。
请参考图7,本发明实施例提供的数据同步的方法的一实施例可包括:
201、多核处理器中的所述虚拟锁指令执行装置接收虚拟锁指令,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识,所述目的虚拟锁的标识为待同步数据对象的一个地址,所述多核处理器包括物理锁装置和多个处理器核,每个所述处理器核均包括一虚拟锁指令执行装置,所述物理锁装置分别与所述虚拟锁指令执行装置连接,所述物理锁装置包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,所述虚拟锁的标识为所述数据对象的一个存储地址,且所述虚拟锁的标识的数量大于所述物理锁的标识的数量。
202、所述虚拟锁指令执行装置根据所述目的虚拟锁的标识映射出目的物理锁的标识,向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识。
203、所述物理锁装置根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁。
204、所述物理锁装置对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,所述锁操作的结果用于所述待同步数据对象的同步操作。
与现有技术中针对每个数据对象都要分配一把物理锁,导致物理锁占用大量的内存空间相比,本发明实施例提供的多核处理器,通过硬件来实现物理锁,通过虚拟锁的标识与物理锁的标识之间的映射来保证对数据对象的同步,每个数据对象的虚拟锁的标识为该数据对象的在内存中的一个地址,因此虚拟锁的标识没有占用额外的内存,而且,一个物理锁的标识可以对应多个虚拟锁的标识,虚拟锁的标识的数量远远小于物理锁的标识的数量,因此,只需要较少的硬件开销就可以解决线程间的对数据对象的访问冲突问题,又避免了物理锁的内存开销。
可选地,在上述图7对应的实施例的基础上,本发明实施例提供的细粒度数据同步的方法的第一个可选实施例中,所述锁操作请求还包括所述虚拟锁指令执行装置所属的处理器核的标识,所述方法还包括:
所述锁操作请求还包括所述虚拟锁指令执行装置所属的处理器核的标识,所述方法还包括:
所述物理锁装置根据所述处理器核的标识向所述虚拟锁指令执行装置返回所述锁操作结果;
所述虚拟锁指令执行装置接收所述物理锁装置返回的所述锁操作结果,并存储所述锁操作结果。
可选地,在上述数据同步的方法的第一个可选实施例的基础上,本发明实施例提供的细粒度数据同步的方法的第二个可选实施例中,
所述虚拟锁指令执行装置接收虚拟锁指令之后,所述方法还可以包括:
所述虚拟锁指令执行装置存储所述目的虚拟锁的标识,所述目的虚拟锁的标识包括所述目的虚拟锁的标识对应的数据对象的一个地址;
所述虚拟锁指令执行装置根据所述目的虚拟锁的标识映射出目的物理锁的标识,向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识,可以包括:
所述虚拟锁指令执行装置根据存储的所述虚拟锁的标识,以及虚拟锁的标识与物理锁的标识的映射关系,映射出与所述虚拟锁的标识对应的目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括锁操作类型标识、所述目的物理锁的标识和所述虚拟锁指令执行装置所属的处理器核的标识。
可选地,在上述图7对应的数据同步的方法的实施例、第一个或第二个可选实施例的基础上,本发明实施例提供的细粒度数据同步的方法的第三个可选实施例中,
所述物理锁装置根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁之前,所述方法还包括:
所述物理锁装置按照缓冲队列的方式缓存接收的所述锁操作请求;
从缓存的所述锁操作请求中读取排在所述缓冲队列最前面的锁操作请求。
可选地,在上述图7对应的数据同步的方法的实施例、第一个、第二个或第三个可选实施例的基础上,本发明实施例提供的细粒度数据同步的方法的第四个可选实施例中,
所述对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,包括:
当所述锁操作类型标识为加锁的标识vltrylock时,确定所述目的物理锁的状态;
当所述目的物理锁处于空闲状态时,获取所述目的物理锁,将所述目的物理锁的状态修改到被占用状态,得到表示获取锁成功的锁操作结果;
当所述目的物理锁处于被占用状态时,得到表示获取锁失败的锁操作结果。
可选地,在上述图7对应的数据同步的方法的实施例、第一个、第二个或第三个可选实施例的基础上,本发明实施例提供的细粒度数据同步的方法的第五个可选实施例中,所述对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,可以包括:
当所述锁操作类型标识为解锁的标识vlunlock时,对所述目的物理锁进行解锁操作,并将所述目的物理锁的状态修改到空闲状态,得到表示解锁成功的锁操作结果;
当所述锁操作类型标识为重置目的虚拟锁的标识vlreset时,对所述目的物理锁进行重置操作,将所述目的物理锁的状态修改到空闲状态,得到表示重置目的物理锁成功或失败的锁操作结果;
当所述锁操作类型标识为重置全部虚拟锁的标识vlresetall时,对所述多个物理锁进行重置操作,将所述多个物理锁的状态都修改到空闲状态,得到表示重置全部锁成功的锁操作结果。
本发明实施例提供的数据同步的方法可以参阅图1至图6部分的相关描述进行理解,本处不做过多赘述。
参阅图8,本发明实施例提供的数据同步的装置的一实施例包括:所述数据同步的装置30应用于多核处理器,所述数据同步的装置包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,所述虚拟锁的标识为所述数据对象的一个存储地址,且所述虚拟锁的标识的数量大于所述物理锁的标识的数量,所述数据同步的装置包括:
第一接收模块301,用于接收虚拟锁指令,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识,所述目的虚拟锁的标识为待同步数据对象的一个地址;
映射模块302,用于根据所述接收模块301接收的目的虚拟锁的标识映射出目的物理锁的标识;
确定模块303,用于根据所述映射模块映射出的所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁;
锁操作模块304,用于对所述确定模块303确定的目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,所述锁操作的结果用于所述待同步数据对象的同步操作。
与现有技术中针对每个数据对象都要分配一把物理锁,导致物理锁占用大量的内存空间相比,本发明实施例提供的数据同步的装置,通过虚拟锁的标识与物理锁的标识之间的映射来保证对数据对象的同步,每个数据对象的虚拟锁的标识为该数据对象的在内存中的一个地址,因此虚拟锁的标识没有占用额外的内存,而且,一个物理锁的标识可以对应多个虚拟锁的标识,虚拟锁的标识的数量远远小于物理锁的标识的数量,因此,解决线程间的对数据对象的访问冲突问题,又降低了物理锁的内存开销。
可选地,在上述图8对应的实施例的基础上,参阅图9,本发明实施例提供的数据同步的装置的第一个可选实施例中,所述数据处理的装置还包括存储模块305,
所述存储模块305,用于存储所述目的虚拟锁的标识,所述目的虚拟锁的标识包括所述目的虚拟锁的标识对应的数据对象的一个地址;
所述映射模块302,具体用于根据所述存储模块305中存储的所述虚拟锁的标识,以及虚拟锁的标识与物理锁的标识的映射关系,映射出与所述虚拟锁的标识对应的目的物理锁的标识。
可选地,在上述图8或图9对应的实施例的基础上,参阅图10,本发明实施例提供的数据同步的装置的第二个可选实施例中,所述数据处理的装置还包括缓存模块306,
所述缓存模块306,用于在所述确定模块303确定所述目的物理锁之前,按照缓冲队列的方式缓存所述目的物理锁的标识。
可选地,在上述图8、图9或图10对应的实施例的基础上,本发明实施例提供的数据同步的装置的第三个可选实施例中,
所述锁操作模块304具体用于:
当所述锁操作类型标识为加锁的标识vltrylock时,确定所述目的物理锁的状态;
当所述目的物理锁处于空闲状态时,获取所述目的物理锁,将所述目的物理锁的状态修改到被占用状态,得到表示获取锁成功的锁操作结果;
当所述目的物理锁处于被占用状态时,得到表示获取锁失败的锁操作结果。
可选地,在上述图8、图9或图10对应的实施例的基础上,本发明实施例提供的数据同步的装置的第四个可选实施例中,
所述锁操作模块304具体用于:
当所述锁操作类型标识为解锁的标识vlunlock时,对所述目的物理锁进行解锁操作,并将所述目的物理锁的状态修改到空闲状态,得到表示解锁成功的锁操作结果;
当所述锁操作类型标识为重置目的虚拟锁的标识vlreset时,对所述目的物理锁进行重置操作,将所述目的物理锁的状态修改到空闲状态,得到表示重置目的物理锁成功或失败的锁操作结果;
当所述锁操作类型标识为重置全部虚拟锁的标识vlresetall时,对所述多个物理锁进行重置操作,将所述多个物理锁的状态都修改到空闲状态,得到表示重置全部锁成功的锁操作结果。
以上数据同步的装置实施例中的接收模块301、映射模块302、存储模块305可以是上述实施例中虚拟锁指令执行装置中的模块,确定模块303、锁操作模块304、缓存单元305可以是上述实施例中物理锁装置中的模块,而且,在映射模块302和确定模块303之间存在数据传递的过程。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和装置并不一定是本发明所必须的。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例所提供的多核处理器、细粒度数据同步的方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种多核处理器,其特征在于,包括:物理锁装置和集成在每个处理器核上的虚拟锁指令执行装置,所述物理锁装置分别与每个所述虚拟锁指令执行装置连接,所述物理锁装置包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,所述虚拟锁的标识为所述数据对象的一个存储地址,且所述虚拟锁的标识的数量大于所述物理锁的标识的数量;
所述虚拟锁指令执行装置用于:
接收虚拟锁指令,所述虚拟锁指令用于指示执行从虚拟锁的标识到物理锁的标识的映射操作,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识;
根据所述目的虚拟锁的标识映射出目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识;
所述物理锁装置用于:
根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁;
对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果。
2.根据权利要求1所述的多核处理器,其特征在于,所述锁操作请求还包括所述虚拟锁指令执行装置所属的处理器核的标识;
所述物理锁装置,还用于根据所述处理器核的标识向所述虚拟锁指令执行装置返回所述锁操作结果。
3.根据权利要求2所述的多核处理器,其特征在于,所述虚拟锁指令执行装置包括虚拟锁的标识寄存器和映射处理模块,所述物理锁装置包括缓冲队列存储模块和物理锁操作模块;其中,
所述虚拟锁的标识寄存器,用于存储所述目的虚拟锁的标识,所述目的虚拟锁的标识包括所述目的虚拟锁的标识对应的数据对象的一个地址;
所述映射处理模块,用于根据所述虚拟锁的标识寄存器中存储的所述虚拟锁的标识,以及虚拟锁的标识与物理锁的标识的映射关系,映射出与所述虚拟锁的标识对应的目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括锁操作类型标识、所述目的物理锁的标识和所述虚拟锁指令执行装置所属的处理器核的标识;
所述缓冲队列存储模块,用于缓存所述锁操作请求;
所述物理锁操作模块用于:
从所述缓冲队列存储模块中读取排在所述缓冲队列最前面的锁操作请求;
根据所述锁操作请求中的目的物理锁的标识确定所述目的物理锁,对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果;
根据所述处理器核的标识向所述虚拟锁指令执行装置返回所述锁操作结果。
4.根据权利要求2或3所述的多核处理器,其特征在于,所述虚拟锁指令执行装置还包括:虚拟锁返回结果寄存器;
所述物理锁操作模块,具体用于返回所述锁操作结果给所述虚拟锁指令执行装置中的虚拟锁返回结果寄存器;
所述虚拟锁返回结果寄存器,用于存储接收到的所述锁操作结果。
5.根据权利要求2或3所述的多核处理器,其特征在于,
所述物理锁操作模块具体用于:
当所述锁操作类型标识为加锁的标识vltrylock时,确定所述目的物理锁的状态;
当所述目的物理锁处于空闲状态时,获取所述目的物理锁,将所述目的物理锁的状态修改到被占用状态,并向所述虚拟锁指令执行装置返回表示获取锁成功的锁操作结果;
当所述目的物理锁处于被占用状态时,向所述虚拟锁指令执行装置返回表示获取锁失败的锁操作结果。
6.根据权利要求2或3所述的多核处理器,其特征在于,
所述物理锁操作模块具体用于:
当所述锁操作类型标识为解锁的标识vlunlock时,对所述目的物理锁进行解锁操作,并将所述目的物理锁的状态修改到空闲状态,得到表示解锁成功的锁操作结果;
当所述锁操作类型标识为重置目的虚拟锁的标识vlreset时,对所述目的物理锁进行重置操作,将所述目的物理锁的状态修改到空闲状态,得到表示重置目的物理锁成功或失败的锁操作结果。
7.一种数据同步的方法,其特征在于,所述方法应用于多核处理器,所述多核处理器包括物理锁装置和多个处理器核,每个所述处理器核均包括一虚拟锁指令执行装置,所述物理锁装置分别与所述虚拟锁指令执行装置连接,所述物理锁装置包括多个物理锁,用于存储数据对象的内存空间包括多个虚拟锁的标识,所述虚拟锁的标识为所述数据对象的一个存储地址,且所述虚拟锁的标识的数量大于所述物理锁的标识的数量,所述方法包括:
所述虚拟锁指令执行装置接收虚拟锁指令,所述虚拟锁指令包括锁操作类型标识和目的虚拟锁的标识,所述目的虚拟锁的标识为待同步数据对象的一个地址;
所述虚拟锁指令执行装置根据所述目的虚拟锁的标识映射出目的物理锁的标识,向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识;
所述物理锁装置根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁;
所述物理锁装置对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,所述锁操作的结果用于所述待同步数据对象的同步操作。
8.根据权利要求7所述的方法,其特征在于,所述锁操作请求还包括所述虚拟锁指令执行装置所属的处理器核的标识,所述方法还包括:
所述物理锁装置根据所述处理器核的标识向所述虚拟锁指令执行装置返回所述锁操作结果;
所述虚拟锁指令执行装置接收所述物理锁装置返回的所述锁操作结果,并存储所述锁操作结果。
9.根据权利要求8所述的方法,其特征在于,所述虚拟锁指令执行装置接收虚拟锁指令之后,所述方法还包括:
所述虚拟锁指令执行装置存储所述目的虚拟锁的标识,所述目的虚拟锁的标识包括所述目的虚拟锁的标识对应的数据对象的一个地址;
所述虚拟锁指令执行装置根据所述目的虚拟锁的标识映射出目的物理锁的标识,向所述物理锁装置发送锁操作请求,所述锁操作请求包括所述锁操作类型标识和所述目的物理锁的标识,包括:
所述虚拟锁指令执行装置根据存储的所述虚拟锁的标识,以及虚拟锁的标识与物理锁的标识的映射关系,映射出与所述虚拟锁的标识对应的目的物理锁的标识,并向所述物理锁装置发送锁操作请求,所述锁操作请求包括锁操作类型标识、所述目的物理锁的标识和所述虚拟锁指令执行装置所属的处理器核的标识。
10.根据权利要求7-9任一所述的方法,其特征在于,所述物理锁装置根据所述目的物理锁的标识,从所述多个物理锁中确定所述目的物理锁之前,所述方法还包括:
所述物理锁装置按照缓冲队列的方式缓存接收的所述锁操作请求;
从缓存的所述锁操作请求中读取排在所述缓冲队列最前面的锁操作请求。
11.根据权利要求7-9任一所述的方法,其特征在于,所述对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,包括:
当所述锁操作类型标识为加锁的标识vltrylock时,确定所述目的物理锁的状态;
当所述目的物理锁处于空闲状态时,获取所述目的物理锁,将所述目的物理锁的状态修改到被占用状态,得到表示获取锁成功的锁操作结果;
当所述目的物理锁处于被占用状态时,得到表示获取锁失败的锁操作结果。
12.根据权利要求7-9任一所述的方法,其特征在于,所述对所述目的物理锁执行所述锁操作类型标识对应的锁操作,得到针对所述目的物理锁的锁操作结果,包括:
当所述锁操作类型标识为解锁的标识vlunlock时,对所述目的物理锁进行解锁操作,并将所述目的物理锁的状态修改到空闲状态,得到表示解锁成功的锁操作结果;
当所述锁操作类型标识为重置目的虚拟锁的标识vlreset时,对所述目的物理锁进行重置操作,将所述目的物理锁的状态修改到空闲状态,得到表示重置目的物理锁成功或失败的锁操作结果;
当所述锁操作类型标识为重置全部虚拟锁的标识vlresetall时,对所述多个物理锁进行重置操作,将所述多个物理锁的状态都修改到空闲状态,得到表示重置全部锁成功的锁操作结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510507602.0A CN105094993B (zh) | 2015-08-18 | 2015-08-18 | 一种多核处理器、数据同步的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510507602.0A CN105094993B (zh) | 2015-08-18 | 2015-08-18 | 一种多核处理器、数据同步的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105094993A CN105094993A (zh) | 2015-11-25 |
CN105094993B true CN105094993B (zh) | 2018-06-19 |
Family
ID=54575499
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510507602.0A Active CN105094993B (zh) | 2015-08-18 | 2015-08-18 | 一种多核处理器、数据同步的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094993B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109753371B (zh) * | 2017-11-06 | 2021-10-19 | 华为技术有限公司 | 一种i/o阻塞检测方法、装置及设备 |
CN109783220B (zh) * | 2017-11-10 | 2020-12-11 | 安徽寒武纪信息科技有限公司 | 内存分配方法、装置、计算机系统及存储介质 |
CN110119807B (zh) * | 2018-10-12 | 2021-11-09 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001093027A3 (en) * | 2000-05-31 | 2002-03-21 | Sun Microsystems Inc | Monitor entry and exit for a speculative thread during space and time dimensional execution |
JP3381652B2 (ja) * | 1999-01-27 | 2003-03-04 | 日本電気株式会社 | ロック制御方式 |
CN101216781A (zh) * | 2007-12-28 | 2008-07-09 | 中国科学院计算技术研究所 | 一种多处理器系统、装置及方法 |
CN101308461A (zh) * | 2007-05-18 | 2008-11-19 | 国际商业机器公司 | 处理器及其中处理锁事务的方法 |
CN104102549A (zh) * | 2013-04-01 | 2014-10-15 | 华为技术有限公司 | 一种实现多线程互斥操作的方法、装置和芯片 |
US8938738B2 (en) * | 2008-06-27 | 2015-01-20 | Microsoft Corporation | Shared user-mode for controlling synchronized access to a shared resource |
-
2015
- 2015-08-18 CN CN201510507602.0A patent/CN105094993B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3381652B2 (ja) * | 1999-01-27 | 2003-03-04 | 日本電気株式会社 | ロック制御方式 |
WO2001093027A3 (en) * | 2000-05-31 | 2002-03-21 | Sun Microsystems Inc | Monitor entry and exit for a speculative thread during space and time dimensional execution |
CN101308461A (zh) * | 2007-05-18 | 2008-11-19 | 国际商业机器公司 | 处理器及其中处理锁事务的方法 |
CN101216781A (zh) * | 2007-12-28 | 2008-07-09 | 中国科学院计算技术研究所 | 一种多处理器系统、装置及方法 |
US8938738B2 (en) * | 2008-06-27 | 2015-01-20 | Microsoft Corporation | Shared user-mode for controlling synchronized access to a shared resource |
CN104102549A (zh) * | 2013-04-01 | 2014-10-15 | 华为技术有限公司 | 一种实现多线程互斥操作的方法、装置和芯片 |
Also Published As
Publication number | Publication date |
---|---|
CN105094993A (zh) | 2015-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8375175B2 (en) | Fast and efficient reacquisition of locks for transactional memory systems | |
US9430388B2 (en) | Scheduler, multi-core processor system, and scheduling method | |
Morrison et al. | Fast concurrent queues for x86 processors | |
Bauer et al. | Legion: Expressing locality and independence with logical regions | |
CN108369507A (zh) | 用于使用存储器中处理来处理指令的方法和设备 | |
CN103970506B (zh) | 用于实现高效同步和并行归约操作的向量指令 | |
US8417897B2 (en) | System and method for providing locale-based optimizations in a transactional memory | |
JP2012523610A (ja) | マルチスレッドアプリケーション用のハッシュテーブルのコンカレントリハッシュの実行 | |
US9268698B1 (en) | Method and system for maintaining context event logs without locking in virtual machine | |
CN104699631A (zh) | Gpdsp中多层次协同与共享的存储装置和访存方法 | |
HUE028928T2 (en) | Hybrid write-through / write-back cache router managers and related systems and procedures | |
CN105094993B (zh) | 一种多核处理器、数据同步的方法及装置 | |
US10423467B2 (en) | Data processing apparatus and method for performing lock-protected processing operations for multiple threads | |
CN108139946A (zh) | 用于在冲突存在时进行有效任务调度的方法 | |
CN109614220A (zh) | 一种多核系统处理器和数据更新方法 | |
EP3662376B1 (en) | Reconfigurable cache architecture and methods for cache coherency | |
US20150081986A1 (en) | Modifying non-transactional resources using a transactional memory system | |
Gidenstam et al. | Cache-aware lock-free queues for multiple producers/consumers and weak memory consistency | |
CN111736900B (zh) | 一种并行双通道的cache设计方法和装置 | |
WO2016106738A1 (zh) | 事务冲突检测方法、装置及计算机系统 | |
Kelly et al. | Lock-free hopscotch hashing | |
US10146689B2 (en) | Locally poll flag in multi processing node system to determine whether a resource is free to use for thread | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
Howard | Extending relativistic programming to multiple writers | |
JP2954671B2 (ja) | メモリ管理用制御装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |