一种实现多线程互斥操作的方法、装置和芯片的制作方法

文档序号:6501422阅读:133来源:国知局
一种实现多线程互斥操作的方法、装置和芯片的制作方法
【专利摘要】本发明实施例提供了一种实现多线程互斥操作的方法、装置和芯片,通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请锁消息和释放锁的释放锁消息,进而能够解决线程数目增多时产生的拥塞问题,提高线程协同执行的速度。该方法包括:接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息;利用所述请求的锁的内存地址计算所述请求的锁所属的锁部件的编号;向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。本发明适用于计算机领域。
【专利说明】一种实现多线程互斥操作的方法、装置和芯片

【技术领域】
[0001] 本发明涉及计算机领域,尤其涉及一种实现多线程互斥操作的方法、装置和芯片。

【背景技术】
[0002] 随着半导体工艺的发展,芯片上可集成的晶体管数目日益增多,体系结构设计者 为了在性能提升的同时降低功耗和散热,提出线程级粗粒度并行的片上多核/众核处理 器,所述片上多核/众核处理器指集成在同一芯片上的多核/众核处理器,与传统的多处理 器相比,该片上多核/众核处理器具有片上带宽高、通信距离短、传输速度快的优点,进而 使得多个线程间数据通信效率较高。
[0003] 但是,在多个线程并行执行时,经常会出现共享变量的情况,为了保证程序执行语 义的正确性,需要采用互斥操作方法,该方法可以保证多个线程对共享内存进行读写操作 时,在同一时刻,只有一个线程独占共享内存。互斥操作的性能对片上多核/众核处理器而 言非常重要,直接影响了多个线程协同执行的速度。
[0004] 现有技术的一种互斥操作的实现方式包括:在芯片外部的内存中设置一个标志 位,所述标志位为0标识锁当前处于空闲状态,所述标志位为1标识锁当前处于占用状态, 其中,锁是多线程中用来保护同一时刻只有一个线程操作被保护的机制。在有互斥操作时, 所述多核/众核处理器上多个小核都去轮询该内存中的同一个标志位,只有标志位为0,即 锁处于空闲状态,线程才能获取该锁,进而占用该内存进行读写操作,同时将标志位置1。如 果发现标志位为1,就隔一段时间再来查询这个标志位。该方法虽然可以实现互斥操作,但 是芯片上的小核访问芯片外部的标志位会产生系统开销比较大的问题,并且对于标志位的 不断轮询,也会对片上网络造成很大压力。
[0005] 现有技术的另一种互斥操作的实现方式包括,利用如图1所示的与多个小核连接 的同步管理装置,集成处理所述多核/众核处理器上所有小核的互斥请求,即通过该同步 管理装置管理各个小核申请锁的申请锁消息和释放锁的释放锁消息,并根据所述同步管理 装置中的锁的状态判断是获得锁还是等待锁。该方法虽然可以避免访问芯片外部的标志位 产生的系统开销比较大的问题,并避免了标志位的轮询,但是因为所有的线程都要通过一 个同步管理装置进行管理,当线程数目增多时,会产生拥塞现象,也会使线程的等待时间变 长,降低线程协同执行的速度。


【发明内容】

[0006] 本发明的实施例提供一种实现多线程互斥操作的方法、装置和芯片,以解决线程 数目增多时产生的拥塞现象,提高线程协同执行的速度。
[0007] 为达到上述目的,本发明的实施例采用如下技术方案:
[0008] 第一方面,提供了一种实现多线程互斥操作的方法,该方法包括:
[0009] 接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内 存地址,其中,所述锁消息为申请锁消息或释放锁消息;
[0010] 利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号; [0011] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处 理。
[0012] 在第一种可能的实现方式中,根据第一方面,所述利用所述请求的锁对应的内存 地址计算所述请求的锁所属的锁部件的编号包括:
[0013] 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数 作为所述请求的锁所属的锁部件的编号。
[0014] 在第二种可能的实现方式中,根据第一方面或第一种可能的实现方式,所述请求 的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该 锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占 用状态;
[0015] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处 理具体包括:
[0016] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0017] 在第三种可能的实现方式中,根据第一方面或第一种可能的实现方式,所述请求 的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线 程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中, 所述线程的状态包括所述线程在是否在等待该锁;
[0018] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处 理具体包括:
[0019] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0020] 第二方面,提供了一种实现多线程互斥操作的装置,所述装置包括接收单元、计算 单元、发送单元;
[0021] 所述接收单元,用于接收小核发送的锁消息,所述锁消息携带所述小核中第一线 程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息;
[0022] 所述计算单元,用于利用所述请求的锁对应的内存地址计算所述请求的锁所属的 锁部件的编号;
[0023] 所述发送单元,用于向所述编号对应的锁部件发送所述锁消息,请求所述锁部件 对所述锁消息进行处理。
[0024] 在第一种可能的实现方式中,根据第二方面,所述计算单元利用所述请求的锁对 应的内存地址计算所述请求的锁所属的锁部件的编号包括:
[0025] 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数 作为所述请求的锁所属的锁部件的编号。
[0026] 在第二种可能的实现方式中,根据第二方面或第一种可能的实现方式,所述请求 的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该 锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占 用状态;
[0027] 所述发送单元向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述 锁消息进行处理具体包括:
[0028] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0029] 在第三种可能的实现方式中,根据第二方面或第一种可能的实现方式,所述请求 的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线 程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中, 所述线程的状态包括所述线程在是否在等待该锁;
[0030] 所述发送单元向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述 锁消息进行处理具体包括:
[0031] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0032] 第三方面,提供了一种实现多线程互斥操作的芯片,所述芯片包括:小核、路由部 件和锁部件;
[0033] 所述路由部件,用于接收所述小核发送的锁消息,所述锁消息携带所述小核中第 一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息;
[0034] 所述路由部件,还用于利用所述请求的锁对应的内存地址计算所述请求的锁所属 的锁部件的编号;
[0035] 所述路由部件,还用于向所述编号对应的锁部件发送所述锁消息,请求所述锁部 件对所述锁消息进行处理;
[0036] 所述锁部件,用于接收所述路由部件发送的所述锁消息;
[0037] 所述锁部件,还用于对所述锁消息进行处理。
[0038] 在第一种可能的实现方式中,根据第三方面,所述路由部件利用所述请求的锁对 应的内存地址计算所述请求的锁所属的锁部件的编号包括:
[0039] 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数 作为所述请求的锁所属的锁部件的编号。
[0040] 在第二种可能的实现方式中,根据第三方面或第一种可能的实现方式,所述请求 的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该 锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占 用状态;
[0041] 所述路由部件向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述 锁消息进行处理具体包括:
[0042] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0043] 在第三种可能的实现方式中,根据第二种可能的实现方式,若所述锁消息为申请 锁消息,则所述锁消息还携带所述第一线程的编号;
[0044] 所述锁部件还用于对所述锁消息进行处理具体包括:
[0045] 根据所述请求的锁消息携带的所述请求的锁对应的内存地址查找所述请求的锁 的信息;
[0046] 检查所述请求的锁的信息中包含的锁的状态;
[0047] 若所述请求的锁的状态为占用状态,判断等待所述请求的锁的线程的个数是否小 于芯片所支持的最大线程的个数;
[0048] 若所述等待所述请求的锁的线程的个数小于所述芯片所支持的最大线程的个数, 将所述第一线程的编号写入等待所述请求的锁的线程的编号字段,同时更新所述等待该锁 的线程的个数;
[0049] 若所述在等待所述请求的锁的线程的个数不小于所述芯片所支持的最大线程的 个数,将所述第一线程编号写入所述请求的锁的内存。
[0050] 在第四种可能的实现方式中,根据第三方面或第一种可能的实现方式,所述请求 的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线 程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中, 所述线程的状态包括所述线程在是否在等待该锁;
[0051] 所述路由部件向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述 锁消息进行处理具体包括:
[0052] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0053] 第四方面,提供了一种计算机节点,所述计算机节点包括第三方面任一项所述的 实现多线程互斥操作的芯片。
[0054] 第五方面,提供了一种计算机系统,所述计算机系统包括内存和第四方面所述的 计算机节点。
[0055] 本发明实施例提供了一种实现多线程互斥操作的方法、装置和芯片,所述方法包 括:接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地 址;利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;向所述编 号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
[0056] 基于上述描述,通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请 锁消息和释放锁的释放锁消息,进而解决了线程数目增多时产生的拥塞现象,降低了线程 的等待时间,提高了线程协同执行的速度。

【专利附图】

【附图说明】
[0057] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0058] 图1为现有技术中实现多线程互斥操作的芯片结构示意图;
[0059] 图2为本发明实施例提供的一种实现多线程互斥操作的方法;
[0060] 图3为本发明实施例提供的一种实现多线程互斥操作的芯片结构示意图;
[0061] 图4为本发明实施例提供的另一种实现多线程互斥操作的方法;
[0062] 图5为本发明实施例提供的又一种实现多线程互斥操作的方法;
[0063] 图6为本发明实施例提供的一种实现多线程互斥操作的装置;
[0064] 图7为本发明实施例提供的一种实现多线程互斥操作的芯片;
[0065]图8为本发明实施例提供的一种计算机节点;
[0066] 图9为本发明实施例提供的一种计算机系统。

【具体实施方式】
[0067] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0068] 实施例一、
[0069] 本发明实施例提供了一种实现多线程互斥操作的方法,该方法的执行主体为芯片 上的路由部件,具体如图2所示,该方法包括:
[0070] 201、接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应 的内存地址。
[0071 ] 其中,所述锁消息包括申请锁消息和释放锁消息。
[0072] 具体的,随着半导体工艺的发展,芯片上可集成的晶体管数目日益增多,体系结构 设计者为了在性能提升的同时降低功耗和散热,提出线程级粗粒度并行的片上多核/众核 处理器,所述片上多核处理器指集成在同一芯片上的多核/众核处理器,其中,众核处理器 比多核处理器在芯片上集成了更多的处理器核,通常认为芯片上集成8个小核以下的处理 器被称为多核处理器,集成8个小核以上的处理器被称为众核处理器。
[0073] 在所述多核/众核处理器的小核中,当多个线程并行执行时,很容易出现共享变 量的情况,但是在同一时刻,只允许有一个线程独占共享内存,否则会出现数据错乱的情 况。现有技术中,为了解决该问题,引入锁的概念,所述锁是多线程中用来保护同一时刻只 有一个线程操作被保护的机制,锁包含的信息标识了线程要访问的共享内存的状态,通过 要访问的共享内存的状态确定当前是否有权限访问共享内存,从而让每个线程都有顺序的 访问共享内存。
[0074] 在本发明实施例中,路由部件接收小核发送的申请锁消息,所述申请锁消息携带 了所述小核中第一线程请求的锁对应的内存地址,通过所述内存地址查找到该锁,最终确 定所述请求的锁的状态。
[0075] 在访问共享内存结束后,所述路由部件接收小核发送的释放锁消息,所述释放锁 消息也携带所述小核中第一线程请求的锁对应的内存地址,通过执行释放锁消息,释放共 享内存空间,以便让其它线程进入该共享内存访问。
[0076] 202、利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
[0077] 具体的,本发明实施例在芯片上分布多个锁部件,每个锁部件包含一定数量的锁, 这样可以将多个锁分散在多个锁部件中,当线程数目增多时,由不同的锁部件管理各个小 核申请锁的申请锁消息和释放锁的释放锁消息,这样可以解决现有技术中出现的拥塞现 象,同时降低了线程的等待时间,提高了线程协同执行的速度。
[0078] 相应的,因为存在多个锁部件,所以路由部件在接收小核发送的锁消息后,首先要 利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
[0079] 当然,所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的 编号的方法要依据锁与锁部件的对应存储形式而定。
[0080] 所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号 具体可以包括:
[0081] 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数 作为所述请求的锁所属的锁部件的编号。
[0082] 例如,有4个锁部件,编号分别为0、1、2、3,其中,
[0083] 编号0的锁部件中5个锁,对应的内存地址分别为0000、0004、0008、000C、0010 ;
[0084] 编号1的锁部件中有5个锁,对应的内存地址分别为0001、0005、0009、000D、 0011 ;
[0085] 编号2的锁部件中有5个锁,对应的内存地址分别为0002、0006、000A、000E、 0012 ;
[0086] 编号3的锁部件中有5个锁,对应的内存地址分别为0003、0007、000B、000F、0013。
[0087] 即,对应存储形式为:锁部件的编号和该锁部件包含的锁对应的内存地址与所有 锁部件的个数的商的余数相同,则若所述请求的锁对应的内存地址为0009,可以通过以下 方法计算所述请求的锁所属的锁部件:
[0088] 第一,计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数。
[0089] 此时,锁部件的个数为4,锁对应的内存地址为0009,则 [0090] 余数=取余(内存地址/锁部件的个数)
[0091] =取余(9/4) = 1
[0092] 第二,将所述余数作为所述请求的锁所属的锁部件的编号。
[0093] 此时,余数为1,故所述请求的锁所属的锁部件的编号为1。
[0094] 当然,也可能是路由部件中预先存储了锁部件的编号与所述请求的锁对应的内存 地址对应关系。
[0095] 例如,如果有3个锁部件1、2、3,预存储的对应关系为:
[0096] 锁部件1,锁标识的内存地址段为0000-003F ;
[0097] 锁部件2,锁标识的内存地址段为0040-007F ;
[0098] 锁部件3,锁标识的内存地址段为0080-00BF。
[0099] 则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁 所属的锁部件的编号:
[0100] 查询对应关系表格,发现0009属于地址段0000-003F,对应锁部件1,则所述请求 的锁所属的锁部件的编号为1。
[0101] 本发明实施例旨在说明利用所述请求的锁对应的内存地址计算所述请求的锁所 属的锁部件的编号,对如何计算所述请求的锁所属的锁部件的编号不作具体限定。
[0102] 203、向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进 行处理。
[0103] 具体的,在利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的 编号后,向所述编号对应的锁部件发送锁消息,请求所述锁部件对所述锁消息进行处理具 体可以包括:
[0104] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0105] 其中,所述请求的锁的信息可以包括:锁对应的内存地址、锁的状态、等待该锁的 线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中, 所述锁的状态为空闲状态或占用状态。
[0106] 或
[0107] 所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个 数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程 的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
[0108] 本发明实施例对所述请求的锁的信息不作具体限定。
[0109] 本发明实施例提供了一种实现多线程互斥操作的方法,所述方法包括:接收小核 发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址;利用所述 请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;向所述编号对应的锁部 件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
[0110] 基于上述实施例的描述,通过在芯片上分布多个锁部件,分别管理不同小核申请 锁的申请锁消息和释放锁的释放锁消息,进而解决了线程数目增多时产生的拥塞现象,降 低了线程的等待时间,提高了线程协同执行的速度。
[0111] 实施例二、
[0112] 本发明实施例提供了一种实现多线程互斥操作的方法,该方法以图3所示的芯片 结构示意图为例进行说明,所述芯片包括小核、路由部件、锁部件。其中,每个小核都与一个 路由部件相连,而路由部件与路由部件又相互连通,从而构成一个片上网络。
[0113] 在小核的周围分布多个锁部件,所述锁部件中存储了多个锁包含的信息,与锁部 件直连的则是路由部件,这样,小核就可以通过与其相连的路由部件与所述锁部件进行交 互。
[0114] 具体的,以所述小核发送申请锁消息为例进行描述,如图4所示,该方法包括:
[0115] 401、路由部件接收小核发送的申请锁消息,所述申请锁消息携带所述小核中第一 线程请求的锁对应的内存地址。
[0116] 具体的,随着半导体工艺的发展,芯片上可集成的晶体管数目日益增多,体系结构 设计者为了在性能提升的同时降低功耗和散热,提出线程级粗粒度并行的片上多核/众核 处理器,所述片上多核处理器指集成在同一芯片上的多核/众核处理器,其中,众核处理器 比多核处理器在芯片上集成了更多的处理器核,通常认为芯片上集成8个小核以下的处理 器被称为多核处理器,集成8个小核以上的处理器被称为众核处理器。
[0117] 在所述多核/众核处理器的小核中,当多个线程并行执行时,很容易出现共享变 量的情况,但是在同一时刻,只允许有一个线程独占共享内存,否则会出现数据错乱的情 况。现有技术中,为了解决该问题,引入锁的概念,所述锁是多线程中用来保护同一时刻只 有一个线程操作被保护的机制,锁包含的信息标识了线程要访问的共享内存的状态,通过 要访问的共享内存的状态确定当前是否有权限访问共享内存,从而让每个线程都有顺序的 访问共享内存。
[0118] 其中,所述请求的锁的信息可以包括:锁对应的内存地址、锁的状态、等待该锁的 线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中, 所述锁的状态为空闲状态或占用状态。
[0119] 或
[0120] 所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个 数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程 的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
[0121] 本发明实施例对所述请求的锁的信息不作具体限定。
[0122] 在本发明实施例中,路由部件接收小核发送的申请锁消息,所述申请锁消息携带 了所述小核中第一线程请求的锁对应的内存地址,通过所述内存地址查找到该锁的信息, 最终确定所述请求的锁的状态。
[0123] 402、所述路由部件利用所述请求的锁对应的内存地址计算所述请求的锁所属的 锁部件的编号。
[0124] 具体的,本发明实施例在芯片上分布多个锁部件,每个锁部件包含一定数量的锁, 这样可以将多个锁分散在多个锁部件中,当线程数目增多时,由不同的锁部件管理各个小 核申请锁的申请锁消息和释放锁的释放锁消息,这样可以解决现有技术中出现的拥塞现 象,同时降低了线程的等待时间,提高了线程协同执行的速度。
[0125] 相应的,因为存在多个锁部件,所以路由部件在接收小核发送的锁消息后,首先要 利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
[0126] 当然,所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的 编号的方法要依据锁与锁部件的对应存储形式而定。
[0127] 所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号 具体可以包括:
[0128] 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数 作为所述请求的锁所属的锁部件的编号。
[0129] 例如,有4个锁部件,编号分别为0、1、2、3,其中,
[0130] 编号0的锁部件中5个锁,对应的内存地址分别为0000、0004、0008、000C、0010 ;
[0131] 编号1的锁部件中有5个锁,对应的内存地址分别为0001、0005、0009、000D、 0011 ;
[0132] 编号2的锁部件中有5个锁,对应的内存地址分别为0002、0006、000A、000E、 0012 ;
[0133] 编号3的锁部件中有5个锁,对应的内存地址分别为0003、0007、000B、000F、0013。
[0134] S卩,对应存储形式为:锁部件的编号和该锁部件包含的锁对应的内存地址与所有 锁部件的个数的商的余数相同,则若所述请求的锁对应的内存地址为0009,可以通过以下 方法计算所述请求的锁所属的锁部件:
[0135] 第一,计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数。
[0136] 此时,锁部件的个数为4,锁对应的内存地址为0009,则
[0137] 余数=取余(内存地址/锁部件的个数)
[0138] =取余(9/4) = 1
[0139] 第二,将所述余数作为所述请求的锁所属的所部件的编号。
[0140] 此时,余数为1,故所述请求的锁所属的锁部件编号为1。
[0141] 当然,也可能是路由部件中预先存储了锁部件的编号与所述请求的锁对应的内存 地址对应关系。
[0142] 例如,如果有3个锁部件1、2、3,预存储的第一对应关系为:
[0143] 锁部件1,锁标识的内存地址段为0000-003F ;
[0144] 锁部件2,锁标识的内存地址段为0040-007F ;
[0145] 锁部件3,锁标识的内存地址段为0080-00BF。
[0146] 则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁 所属的锁部件的编号:
[0147] 查询对应关系表格,发现0009属于地址段0000-003F,对应锁部件1,则所述请求 的锁所属的锁部件的编号为1。
[0148] 本发明实施例旨在说明利用所述请求的锁对应的内存地址计算所述请求的锁所 属的锁部件的编号,对如何计算所述请求的锁所属的锁部件的编号不作具体限定。
[0149] 403、所述路由部件向所述编号对应的锁部件发送所述申请锁消息,请求所述锁部 件对所述申请锁消息进行处理。
[0150] 具体的,在利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的 编号后,向所述编号对应的锁部件发送申请锁消息,请求所述锁部件对所述申请锁消息进 行处理具体可以包括:
[0151] 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携 带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息 中包含的锁的状态对所述锁消息进行处理,同时更新所述请求的锁的信息。
[0152] 其中,所述请求的锁的信息可以包括:锁对应的内存地址、锁的状态、等待该锁的 线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中, 所述锁的状态为空闲状态或占用状态。
[0153] 或
[0154] 所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个 数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程 的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
[0155] 本发明实施例对所述请求的锁的信息不作具体限定。
[0156] 404、所述锁部件接收所述路由部件发送的所述申请锁消息。
[0157] 在所述锁部件接收所述路由部件发送的所述申请锁消息后,所述锁部件开始执行 对所述申请锁消息进行处理的操作,即步骤405-408。
[0158] 405、所述锁部件根据所述申请锁消息携带的所述请求的锁对应的内存地址查找 所述请求的锁的信息。
[0159] 406、所述锁部件根据所述请求的锁的信息中包含的锁的状态,确定所述请求的锁 是否被第二线程占用。
[0160] 具体的,锁的内部结构可以如表一所示,包括:
[0161] Address :-把锁的唯一标识,即内存地址;
[0162] State :锁的状态,包括空闲状态和占用状态;
[0163] Counter :等待该锁的线程的个数;
[0164] User :正使用该锁的线程的编号;
[0165] Waiterl,2, ...N:等待该锁的线程的编号,其中,N是芯片所支持的最大线程的数 目;
[0166] Pointer :下一个获取该锁的线程的指示信息。
[0167] 表一 [01681

【权利要求】
1. 一种实现多线程互斥操作的方法,其特征在于,所述方法包括: 接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地 址,其中,所述锁消息为申请锁消息或释放锁消息; 利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号; 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
2. 根据权利要求1所述的方法,其特征在于,所述利用所述请求的锁对应的内存地址 计算所述请求的锁所属的锁部件的编号包括: 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为 所述请求的锁所属的锁部件的编号。
3. 根据权利要求1或2所述的方法,其特征在于,所述请求的锁的信息包括:锁对应的 内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获 取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态; 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具 体包括: 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的 所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所 述锁消息进行处理,同时更新所述请求的锁的信息。
4. 根据权利要求1或2所述的方法,其特征在于,所述请求的锁的信息包括:锁对应的 内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有 线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线 程在是否在等待该锁; 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具 体包括: 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的 所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所 述锁消息进行处理,同时更新所述请求的锁的信息。
5. -种实现多线程互斥操作的装置,其特征在于,所述装置包括接收单元、计算单元、 发送单元; 所述接收单元,用于接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请 求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息; 所述计算单元,用于利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部 件的编号; 所述发送单元,用于向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所 述锁消息进行处理。
6. 根据权利要求5所述的装置,其特征在于,所述计算单元利用所述请求的锁对应的 内存地址计算所述请求的锁所属的锁部件的编号包括: 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为 所述请求的锁所属的锁部件的编号。
7. 根据权利要求5或6所述的装置,其特征在于,所述请求的锁的信息包括:锁对应的 内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获 取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态; 所述发送单元向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消 息进行处理具体包括: 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的 所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所 述锁消息进行处理,同时更新所述请求的锁的信息。
8. 根据权利要求5或6所述的装置,其特征在于,所述请求的锁的信息包括:锁对应的 内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有 线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线 程在是否在等待该锁; 所述发送单元向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消 息进行处理具体包括: 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的 所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所 述锁消息进行处理,同时更新所述请求的锁的信息。
9. 一种实现多线程互斥操作的芯片,其特征在于,所述芯片包括:小核、路由部件和锁 部件; 所述路由部件,用于接收所述小核发送的锁消息,所述锁消息携带所述小核中第一线 程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息; 所述路由部件,还用于利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁 部件的编号; 所述路由部件,还用于向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对 所述锁消息进行处理; 所述锁部件,用于接收所述路由部件发送的所述锁消息; 所述锁部件,还用于对所述锁消息进行处理。
10. 根据权利要求9所述的芯片,其特征在于,所述路由部件利用所述请求的锁对应的 内存地址计算所述请求的锁所属的锁部件的编号包括: 计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为 所述请求的锁所属的锁部件的编号。
11. 根据权利要求9或10所述的芯片,其特征在于,所述请求的锁的信息包括:锁对应 的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个 获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态; 所述路由部件向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消 息进行处理具体包括: 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的 所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所 述锁消息进行处理,同时更新所述请求的锁的信息。
12. 根据权利要求11所述的芯片,其特征在于,若所述锁消息为申请锁消息,则所述锁 消息还携带所述第一线程的编号; 所述锁部件还用于对所述锁消息进行处理具体包括: 根据所述请求的锁消息携带的所述请求的锁对应的内存地址查找所述请求的锁的信 息; 检查所述请求的锁的信息中包含的锁的状态; 若所述请求的锁的状态为占用状态,判断等待所述请求的锁的线程的个数是否小于芯 片所支持的最大线程的个数; 若所述等待所述请求的锁的线程的个数小于所述芯片所支持的最大线程的个数,将所 述第一线程的编号写入等待所述请求的锁的线程的编号字段,同时更新所述等待该锁的线 程的个数; 若所述在等待所述请求的锁的线程的个数不小于所述芯片所支持的最大线程的个数, 将所述第一线程编号写入所述请求的锁的内存。
13. 根据权利要求9或10所述的芯片,其特征在于,所述请求的锁的信息包括:锁对应 的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所 有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述 线程在是否在等待该锁; 所述路由部件向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消 息进行处理具体包括: 向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的 所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所 述锁消息进行处理,同时更新所述请求的锁的信息。
14. 一种计算机节点,其特征在于,包括权利要求9-13任一项所述的实现多线程互斥 操作的芯片。
15. -种计算机系统,其特征在于,包括内存和权利要求14所述的计算机节点。
【文档编号】G06F9/52GK104102549SQ201310112333
【公开日】2014年10月15日 申请日期:2013年4月1日 优先权日:2013年4月1日
【发明者】徐卫志, 唐志敏, 张志敏, 宋风龙 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1