CN104102549B - 一种实现多线程互斥操作的方法、装置和芯片 - Google Patents
一种实现多线程互斥操作的方法、装置和芯片 Download PDFInfo
- Publication number
- CN104102549B CN104102549B CN201310112333.9A CN201310112333A CN104102549B CN 104102549 B CN104102549 B CN 104102549B CN 201310112333 A CN201310112333 A CN 201310112333A CN 104102549 B CN104102549 B CN 104102549B
- Authority
- CN
- China
- Prior art keywords
- lock
- request
- message
- thread
- numbering
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Medicines Containing Antibodies Or Antigens For Use As Internal Diagnostic Agents (AREA)
Abstract
本发明实施例提供了一种实现多线程互斥操作的方法、装置和芯片,通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请锁消息和释放锁的释放锁消息,进而能够解决线程数目增多时产生的拥塞问题,提高线程协同执行的速度。该方法包括:接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息;利用所述请求的锁的内存地址计算所述请求的锁所属的锁部件的编号;向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。本发明适用于计算机领域。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种实现多线程互斥操作的方法、装置和芯片。
背景技术
随着半导体工艺的发展,芯片上可集成的晶体管数目日益增多,体系结构设计者为了在性能提升的同时降低功耗和散热,提出线程级粗粒度并行的片上多核/众核处理器,所述片上多核/众核处理器指集成在同一芯片上的多核/众核处理器,与传统的多处理器相比,该片上多核/众核处理器具有片上带宽高、通信距离短、传输速度快的优点,进而使得多个线程间数据通信效率较高。
但是,在多个线程并行执行时,经常会出现共享变量的情况,为了保证程序执行语义的正确性,需要采用互斥操作方法,该方法可以保证多个线程对共享内存进行读写操作时,在同一时刻,只有一个线程独占共享内存。互斥操作的性能对片上多核/众核处理器而言非常重要,直接影响了多个线程协同执行的速度。
现有技术的一种互斥操作的实现方式包括:在芯片外部的内存中设置一个标志位,所述标志位为0标识锁当前处于空闲状态,所述标志位为1标识锁当前处于占用状态,其中,锁是多线程中用来保护同一时刻只有一个线程操作被保护的机制。在有互斥操作时,所述多核/众核处理器上多个小核都去轮询该内存中的同一个标志位,只有标志位为0,即锁处于空闲状态,线程才能获取该锁,进而占用该内存进行读写操作,同时将标志位置1。如果发现标志位为1,就隔一段时间再来查询这个标志位。该方法虽然可以实现互斥操作,但是芯片上的小核访问芯片外部的标志位会产生***开销比较大的问题,并且对于标志位的不断轮询,也会对片上网络造成很大压力。
现有技术的另一种互斥操作的实现方式包括,利用如图1所示的与多个小核连接的同步管理装置,集成处理所述多核/众核处理器上所有小核的互斥请求,即通过该同步管理装置管理各个小核申请锁的申请锁消息和释放锁的释放锁消息,并根据所述同步管理装置中的锁的状态判断是获得锁还是等待锁。该方法虽然可以避免访问芯片外部的标志位产生的***开销比较大的问题,并避免了标志位的轮询,但是因为所有的线程都要通过一个同步管理装置进行管理,当线程数目增多时,会产生拥塞现象,也会使线程的等待时间变长,降低线程协同执行的速度。
发明内容
本发明的实施例提供一种实现多线程互斥操作的方法、装置和芯片,以解决线程数目增多时产生的拥塞现象,提高线程协同执行的速度。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供了一种实现多线程互斥操作的方法,该方法包括:
接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息;
利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
在第一种可能的实现方式中,根据第一方面,所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
在第二种可能的实现方式中,根据第一方面或第一种可能的实现方式,所述请求的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态;
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
在第三种可能的实现方式中,根据第一方面或第一种可能的实现方式,所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁;
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
第二方面,提供了一种实现多线程互斥操作的装置,所述装置包括接收单元、计算单元、发送单元;
所述接收单元,用于接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息;
所述计算单元,用于利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;
所述发送单元,用于向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
在第一种可能的实现方式中,根据第二方面,所述计算单元利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
在第二种可能的实现方式中,根据第二方面或第一种可能的实现方式,所述请求的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态;
所述发送单元向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
在第三种可能的实现方式中,根据第二方面或第一种可能的实现方式,所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁;
所述发送单元向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
第三方面,提供了一种实现多线程互斥操作的芯片,所述芯片包括:小核、路由部件和锁部件;
所述路由部件,用于接收所述小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息;
所述路由部件,还用于利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;
所述路由部件,还用于向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理;
所述锁部件,用于接收所述路由部件发送的所述锁消息;
所述锁部件,还用于对所述锁消息进行处理。
在第一种可能的实现方式中,根据第三方面,所述路由部件利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
在第二种可能的实现方式中,根据第三方面或第一种可能的实现方式,所述请求的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态;
所述路由部件向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
在第三种可能的实现方式中,根据第二种可能的实现方式,若所述锁消息为申请锁消息,则所述锁消息还携带所述第一线程的编号;
所述锁部件还用于对所述锁消息进行处理具体包括:
根据所述请求的锁消息携带的所述请求的锁对应的内存地址查找所述请求的锁的信息;
检查所述请求的锁的信息中包含的锁的状态;
若所述请求的锁的状态为占用状态,判断等待所述请求的锁的线程的个数是否小于芯片所支持的最大线程的个数;
若所述等待所述请求的锁的线程的个数小于所述芯片所支持的最大线程的个数,将所述第一线程的编号写入等待所述请求的锁的线程的编号字段,同时更新所述等待该锁的线程的个数;
若所述在等待所述请求的锁的线程的个数不小于所述芯片所支持的最大线程的个数,将所述第一线程编号写入所述请求的锁的内存。
在第四种可能的实现方式中,根据第三方面或第一种可能的实现方式,所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁;
所述路由部件向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
第四方面,提供了一种计算机节点,所述计算机节点包括第三方面任一项所述的实现多线程互斥操作的芯片。
第五方面,提供了一种计算机***,所述计算机***包括内存和第四方面所述的计算机节点。
本发明实施例提供了一种实现多线程互斥操作的方法、装置和芯片,所述方法包括:接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址;利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
基于上述描述,通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请锁消息和释放锁的释放锁消息,进而解决了线程数目增多时产生的拥塞现象,降低了线程的等待时间,提高了线程协同执行的速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中实现多线程互斥操作的芯片结构示意图;
图2为本发明实施例提供的一种实现多线程互斥操作的方法;
图3为本发明实施例提供的一种实现多线程互斥操作的芯片结构示意图;
图4为本发明实施例提供的另一种实现多线程互斥操作的方法;
图5为本发明实施例提供的又一种实现多线程互斥操作的方法;
图6为本发明实施例提供的一种实现多线程互斥操作的装置;
图7为本发明实施例提供的一种实现多线程互斥操作的芯片;
图8为本发明实施例提供的一种计算机节点;
图9为本发明实施例提供的一种计算机***。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一、
本发明实施例提供了一种实现多线程互斥操作的方法,该方法的执行主体为芯片上的路由部件,具体如图2所示,该方法包括:
201、接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址。
其中,所述锁消息包括申请锁消息和释放锁消息。
具体的,随着半导体工艺的发展,芯片上可集成的晶体管数目日益增多,体系结构设计者为了在性能提升的同时降低功耗和散热,提出线程级粗粒度并行的片上多核/众核处理器,所述片上多核处理器指集成在同一芯片上的多核/众核处理器,其中,众核处理器比多核处理器在芯片上集成了更多的处理器核,通常认为芯片上集成8个小核以下的处理器被称为多核处理器,集成8个小核以上的处理器被称为众核处理器。
在所述多核/众核处理器的小核中,当多个线程并行执行时,很容易出现共享变量的情况,但是在同一时刻,只允许有一个线程独占共享内存,否则会出现数据错乱的情况。现有技术中,为了解决该问题,引入锁的概念,所述锁是多线程中用来保护同一时刻只有一个线程操作被保护的机制,锁包含的信息标识了线程要访问的共享内存的状态,通过要访问的共享内存的状态确定当前是否有权限访问共享内存,从而让每个线程都有顺序的访问共享内存。
在本发明实施例中,路由部件接收小核发送的申请锁消息,所述申请锁消息携带了所述小核中第一线程请求的锁对应的内存地址,通过所述内存地址查找到该锁,最终确定所述请求的锁的状态。
在访问共享内存结束后,所述路由部件接收小核发送的释放锁消息,所述释放锁消息也携带所述小核中第一线程请求的锁对应的内存地址,通过执行释放锁消息,释放共享内存空间,以便让其它线程进入该共享内存访问。
202、利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
具体的,本发明实施例在芯片上分布多个锁部件,每个锁部件包含一定数量的锁,这样可以将多个锁分散在多个锁部件中,当线程数目增多时,由不同的锁部件管理各个小核申请锁的申请锁消息和释放锁的释放锁消息,这样可以解决现有技术中出现的拥塞现象,同时降低了线程的等待时间,提高了线程协同执行的速度。
相应的,因为存在多个锁部件,所以路由部件在接收小核发送的锁消息后,首先要利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
当然,所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号的方法要依据锁与锁部件的对应存储形式而定。
所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号具体可以包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
例如,有4个锁部件,编号分别为0、1、2、3,其中,
编号0的锁部件中5个锁,对应的内存地址分别为0000、0004、0008、000C、0010;
编号1的锁部件中有5个锁,对应的内存地址分别为0001、0005、0009、000D、0011;
编号2的锁部件中有5个锁,对应的内存地址分别为0002、0006、000A、000E、0012;
编号3的锁部件中有5个锁,对应的内存地址分别为0003、0007、000B、000F、0013。
即,对应存储形式为:锁部件的编号和该锁部件包含的锁对应的内存地址与所有锁部件的个数的商的余数相同,则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁所属的锁部件:
第一,计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数。
此时,锁部件的个数为4,锁对应的内存地址为0009,则
余数=取余(内存地址/锁部件的个数)
=取余(9/4)=1
第二,将所述余数作为所述请求的锁所属的锁部件的编号。
此时,余数为1,故所述请求的锁所属的锁部件的编号为1。
当然,也可能是路由部件中预先存储了锁部件的编号与所述请求的锁对应的内存地址对应关系。
例如,如果有3个锁部件1、2、3,预存储的对应关系为:
锁部件1,锁标识的内存地址段为0000-003F;
锁部件2,锁标识的内存地址段为0040-007F;
锁部件3,锁标识的内存地址段为0080-00BF。
则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁所属的锁部件的编号:
查询对应关系表格,发现0009属于地址段0000-003F,对应锁部件1,则所述请求的锁所属的锁部件的编号为1。
本发明实施例旨在说明利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号,对如何计算所述请求的锁所属的锁部件的编号不作具体限定。
203、向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
具体的,在利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号后,向所述编号对应的锁部件发送锁消息,请求所述锁部件对所述锁消息进行处理具体可以包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
其中,所述请求的锁的信息可以包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态。
或
所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
本发明实施例对所述请求的锁的信息不作具体限定。
本发明实施例提供了一种实现多线程互斥操作的方法,所述方法包括:接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址;利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
基于上述实施例的描述,通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请锁消息和释放锁的释放锁消息,进而解决了线程数目增多时产生的拥塞现象,降低了线程的等待时间,提高了线程协同执行的速度。
实施例二、
本发明实施例提供了一种实现多线程互斥操作的方法,该方法以图3所示的芯片结构示意图为例进行说明,所述芯片包括小核、路由部件、锁部件。其中,每个小核都与一个路由部件相连,而路由部件与路由部件又相互连通,从而构成一个片上网络。
在小核的周围分布多个锁部件,所述锁部件中存储了多个锁包含的信息,与锁部件直连的则是路由部件,这样,小核就可以通过与其相连的路由部件与所述锁部件进行交互。
具体的,以所述小核发送申请锁消息为例进行描述,如图4所示,该方法包括:
401、路由部件接收小核发送的申请锁消息,所述申请锁消息携带所述小核中第一线程请求的锁对应的内存地址。
具体的,随着半导体工艺的发展,芯片上可集成的晶体管数目日益增多,体系结构设计者为了在性能提升的同时降低功耗和散热,提出线程级粗粒度并行的片上多核/众核处理器,所述片上多核处理器指集成在同一芯片上的多核/众核处理器,其中,众核处理器比多核处理器在芯片上集成了更多的处理器核,通常认为芯片上集成8个小核以下的处理器被称为多核处理器,集成8个小核以上的处理器被称为众核处理器。
在所述多核/众核处理器的小核中,当多个线程并行执行时,很容易出现共享变量的情况,但是在同一时刻,只允许有一个线程独占共享内存,否则会出现数据错乱的情况。现有技术中,为了解决该问题,引入锁的概念,所述锁是多线程中用来保护同一时刻只有一个线程操作被保护的机制,锁包含的信息标识了线程要访问的共享内存的状态,通过要访问的共享内存的状态确定当前是否有权限访问共享内存,从而让每个线程都有顺序的访问共享内存。
其中,所述请求的锁的信息可以包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态。
或
所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
本发明实施例对所述请求的锁的信息不作具体限定。
在本发明实施例中,路由部件接收小核发送的申请锁消息,所述申请锁消息携带了所述小核中第一线程请求的锁对应的内存地址,通过所述内存地址查找到该锁的信息,最终确定所述请求的锁的状态。
402、所述路由部件利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
具体的,本发明实施例在芯片上分布多个锁部件,每个锁部件包含一定数量的锁,这样可以将多个锁分散在多个锁部件中,当线程数目增多时,由不同的锁部件管理各个小核申请锁的申请锁消息和释放锁的释放锁消息,这样可以解决现有技术中出现的拥塞现象,同时降低了线程的等待时间,提高了线程协同执行的速度。
相应的,因为存在多个锁部件,所以路由部件在接收小核发送的锁消息后,首先要利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
当然,所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号的方法要依据锁与锁部件的对应存储形式而定。
所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号具体可以包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
例如,有4个锁部件,编号分别为0、1、2、3,其中,
编号0的锁部件中5个锁,对应的内存地址分别为0000、0004、0008、000C、0010;
编号1的锁部件中有5个锁,对应的内存地址分别为0001、0005、0009、000D、0011;
编号2的锁部件中有5个锁,对应的内存地址分别为0002、0006、000A、000E、0012;
编号3的锁部件中有5个锁,对应的内存地址分别为0003、0007、000B、000F、0013。
即,对应存储形式为:锁部件的编号和该锁部件包含的锁对应的内存地址与所有锁部件的个数的商的余数相同,则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁所属的锁部件:
第一,计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数。
此时,锁部件的个数为4,锁对应的内存地址为0009,则
余数=取余(内存地址/锁部件的个数)
=取余(9/4)=1
第二,将所述余数作为所述请求的锁所属的所部件的编号。
此时,余数为1,故所述请求的锁所属的锁部件编号为1。
当然,也可能是路由部件中预先存储了锁部件的编号与所述请求的锁对应的内存地址对应关系。
例如,如果有3个锁部件1、2、3,预存储的第一对应关系为:
锁部件1,锁标识的内存地址段为0000-003F;
锁部件2,锁标识的内存地址段为0040-007F;
锁部件3,锁标识的内存地址段为0080-00BF。
则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁所属的锁部件的编号:
查询对应关系表格,发现0009属于地址段0000-003F,对应锁部件1,则所述请求的锁所属的锁部件的编号为1。
本发明实施例旨在说明利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号,对如何计算所述请求的锁所属的锁部件的编号不作具体限定。
403、所述路由部件向所述编号对应的锁部件发送所述申请锁消息,请求所述锁部件对所述申请锁消息进行处理。
具体的,在利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号后,向所述编号对应的锁部件发送申请锁消息,请求所述锁部件对所述申请锁消息进行处理具体可以包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息中包含的锁的状态对所述锁消息进行处理,同时更新所述请求的锁的信息。
其中,所述请求的锁的信息可以包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态。
或
所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
本发明实施例对所述请求的锁的信息不作具体限定。
404、所述锁部件接收所述路由部件发送的所述申请锁消息。
在所述锁部件接收所述路由部件发送的所述申请锁消息后,所述锁部件开始执行对所述申请锁消息进行处理的操作,即步骤405-408。
405、所述锁部件根据所述申请锁消息携带的所述请求的锁对应的内存地址查找所述请求的锁的信息。
406、所述锁部件根据所述请求的锁的信息中包含的锁的状态,确定所述请求的锁是否被第二线程占用。
具体的,锁的内部结构可以如表一所示,包括:
Address:一把锁的唯一标识,即内存地址;
State:锁的状态,包括空闲状态和占用状态;
Counter:等待该锁的线程的个数;
User:正使用该锁的线程的编号;
Waiter1,2,...N:等待该锁的线程的编号,其中,N是芯片所支持的最大线程的数目;
Pointer:下一个获取该锁的线程的指示信息。
表一
Address | State | Counter | User | Waiter1 | Waiter2 | ... | WaiterN | Pointer |
其中,锁的状态State字段表征了锁是否被第二线程占用。
若锁的状态为占用,说明锁被第二线程占用,执行步骤407;
若锁的状态为空闲,说明锁未被第二线程占用,执行步骤408。
当然,锁的内部结构还可以如表二所示,包括:
Address:一把锁的唯一标识,即内存地址;
State:锁的状态,包括空闲状态和占用状态;
Counter:等待该锁的线程的个数;
User:正使用该锁的线程的编号;
Waiter Bit Mask:指示芯片上所有线程的状态的向量,可以令每一个比特位代表一个线程,例如第1位代表线程1,第2位代表线程2......,可以设定某一位是:“1”表示该线程在等待该锁,“0”表示该线程不再等待该锁,这样可以减少存储空间;
Pointer:下一个获取该锁的线程的指示信息。
表二
Address | State | Counter | User | Waiter Bit Mask | Pointer |
同样,锁的状态State字段表征了锁是否被第二线程占用。
若锁的状态为占用,说明锁被第二线程占用,若锁的状态为空闲,说明锁未被第二线程占用。
因为所述锁部件根据所述请求的锁的状态,对所述申请锁消息进行处理,而并非通过设置标志位,对标志位不断轮询完成互斥操作,因此本发明实施例可以避免对标志位不断轮询造成的网络压力大的问题,并且锁的状态是锁包含的信息的一部分,而锁是芯片上锁部件的一部分,所以该方法所有的操作都在芯片上执行,也因此避免了访问芯片外部的标志位所产生的***开销较大的问题。
407、若所述请求的锁被所述第二线程占用,所述锁部件在所述请求的锁中保存所述第一线程申请锁的记录。
具体的,若锁的状态为占用,说明锁被第二线程占用,对于表一所示的锁的内部结构来说,此时应将第一线程的编号写入Waiter字段,但是考虑到芯片所支持的最大线程的数目为N,所以应首先判断所述请求的线程的个数是否小于芯片所支持的最大线程的个数,若Counter<N,将所述第一线程的编号写入等待所述请求的锁的线程的编号字段,即Waiter字段,同时应将Counter的数值加1;若Counter≥N,将所述第一线程的编号写入所述请求的锁标识的内存。
对于表二所示的锁的内部结构来说,应在指示芯片上所有线程的状态的向量中,将所述第一线程的状态置为等待状态,同时应将Counter的数值加1。
408、若所述请求的锁未被所述第二线程占用,所述锁部件向所述小核中的所述第一线程发送申请锁成功的确认消息,并在所述请求的锁中保存所述请求的锁被所述第一线程占用的记录。
具体的,若锁的状态为空闲,说明所述请求的锁未被所述第二线程占用,则所述锁部件向所述小核中的所述第一线程发送申请锁成功的确认消息,以使得所述第一线程进入共享内存执行相应的代码,同时还在所述请求的锁中保存所述请求的锁被所述第一线程占用的记录。比如对于表一所示的锁的内部结构来说,此时应将锁的状态更新为占用状态,同时在正使用该锁的线程的编号字段写入所述第一线程的编号;对于表二所示的锁的内部结构来说,此时应将锁的状态更新为占用状态,同时将正使用该锁的线程的编号字段写入所述第一线程的编号,还在指示芯片上所有线程的状态的向量中,将所述第一线程的状态更新为不等待该锁。
具体的,若所述小核发送的锁消息为释放锁消息,则如图5所示,该方法包括:
501、路由部件接收小核发送的释放锁消息,所述释放锁消息携带所述小核中第一线程请求的锁对应的内存地址。
具体的,在所述第一线程获取所述第一线程请求的锁进入共享内存,并执行完相应的代码后,所述路由部件还接收小核发送的释放锁消息,所述释放锁消息也携带所述小核中第一线程请求的锁对应的内存地址,通过执行释放锁消息,释放共享内存空间,以便让其它线程进入该共享内存访问。
502、所述路由部件利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
具体的,利用所述请求的锁的内存地址计算所述请求的锁所属的锁部件的方法可参见步骤402的描述,本发明实施例对此不再赘述。
503、所述路由部件向所述编号对应的锁部件发送所述释放锁消息,请求所述锁部件对所述释放锁消息进行处理。
504、所述锁部件接收所述路由部件发送的所述释放锁消息。
在所述锁部件接收所述路由部件发送的所述释放锁消息后,所述锁部件开始执行对所述释放锁消息进行处理的操作,即步骤505-508。
505、所述锁部件根据所述释放锁消息携带的所述请求的锁对应的内存地址查找所述请求的锁的信息。
506、所述锁部件删除所述保存的所述请求的锁被所述第一线程占用的记录。
具体的,当所述请求的锁以表一所示的队列形式存储在所述锁部件中时,此时在所述锁部件接收所述路由部件发送的释放锁消息后,应将锁的状态更新为空闲状态,同时将队列中正使用该锁的线程的编号字段清空。
当所述请求的锁以表二所示的形式存储在所述锁部件中时,此时在所述锁部件接收所述路由部件发送的释放锁消息后,应将锁的状态更新为空闲状态,同时将队列中正使用该锁的线程的编号字段清空,还在指示芯片上所有线程的状态的向量中,将所述第一线程的状态更新为不等待该锁。
507、所述锁部件根据所述请求的锁的信息中包含的等待该锁的线程的个数,判断所述锁部件中是否存在第三线程等待所述请求的锁。
具体的,当所述请求的锁以表一所示的形式存储在所述锁部件中时,此时,可通过等待该锁的线程的个数Counter判断是否存在第三线程等待所述请求的锁,若Counter>0,说明存在第三线程等待所述请求的锁,若Counter=0,说明不存在第三线程等待所述请求的锁;
同样,当所述请求的锁以表二所示的形式存储在锁部件中时,也可以通过等待该锁的线程的个数Counter判断是否存在第三线程等待所述请求的锁,在此不再赘述。
508、若存在所述第三线程等待所述请求的锁,所述锁部件向所述第三线程发送申请锁成功的确认消息,并在所述请求的锁中保存所述请求的锁被所述第三线程占用的记录。
具体的,当所述请求的锁以表一所示的形式存储在所述锁部件中时,若存在所述第三线程等待所述请求的锁,可根据下一个获取该锁的线程的指示信息确定所述第三线程的编号,然后所述锁部件向所述第三线程发送申请锁成功的确认消息,以使得所述第三线程进入共享内存执行相应的代码,同时还在所述请求的锁中保存所述请求的锁被所述第三线程占用的记录,即此时应将锁的状态更新为占用状态,同时在正使用该锁的线程的编号字段写入所述第三线程的编号,将等待该锁的线程的数目减1。
当所述请求的锁以表二所示的形式存储在所述锁部件中时,可根据下一个获取该锁的线程的指示信息确定所述第三线程在向量的第几比特位,然后所述锁部件向所述第三线程发送申请锁成功的确认消息,以使得所述第三线程进入共享内存执行相应的代码,同时还在所述请求的锁中保存所述请求的锁被所述第三线程占用的记录,即此时应将锁的状态更新为占用状态,还在指示芯片上所有线程的状态的向量中,将所述第三线程的状态更新为不等待该锁,将等待该锁的线程的数目减1。
本发明实施例提供了一种实现多线程互斥操作的方法,所述方法包括:接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁标识对应的内存地址;利用所述请求的锁标识对应的内存地址计算所述请求的锁所属的锁部件的编号;向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
基于上述实施例的描述,通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请锁消息和释放锁的释放锁消息,进而解决了线程数目增多时产生的拥塞现象,降低了线程的等待时间,提高了线程协同执行的速度。
实施例三、
本发明实施例提供了一种实现多线程互斥操作的装置60,具体如图6所示,所述装置60包括接收单元61、计算单元62、发送单元63。
所述接收单元61,用于接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息。
具体的,随着半导体工艺的发展,芯片上可集成的晶体管数目日益增多,体系结构设计者为了在性能提升的同时降低功耗和散热,提出线程级粗粒度并行的片上多核/众核处理器,所述片上多核处理器指集成在同一芯片上的多核/众核处理器,其中,众核处理器比多核处理器在芯片上集成了更多的处理器核,通常认为芯片上集成8个小核以下的处理器被称为多核处理器,集成8个小核以上的处理器被称为众核处理器。
在所述多核/众核处理器的小核中,当多个线程并行执行时,很容易出现共享变量的情况,但是在同一时刻,只允许有一个线程独占共享内存,否则会出现数据错乱的情况。现有技术中,为了解决该问题,引入锁的概念,所述锁是多线程中用来保护同一时刻只有一个线程操作被保护的机制,锁包含的信息标识了线程要访问的共享内存的状态,通过要访问的共享内存的状态确定当前是否有权限访问共享内存,从而让每个线程都有顺序的访问共享内存。
其中,所述请求的锁的信息可以包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态。
或
所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
本发明实施例对所述请求的锁的信息不作具体限定。
在本发明实施例中,所述接收单元61接收小核发送的申请锁消息,所述申请锁消息携带了所述小核中第一线程请求的锁对应的内存地址,通过所述内存地址查找到该锁,最终确定所述请求的锁的状态。
在访问共享内存结束后,所述接收单元61接收小核发送的释放锁消息,所述释放锁消息也携带所述小核中第一线程请求的锁对应的内存地址,通过执行释放锁消息,释放共享内存空间,以便让其它线程进入该共享内存访问。
所述计算单元62,用于利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
具体的,本发明实施例在芯片上分布多个锁部件,每个锁部件包含一定数量的锁,这样可以将多个锁分散在多个锁部件中,当线程数目增多时,由不同的锁部件管理各个小核申请锁的申请锁消息和释放锁的释放锁消息,这样可以解决现有技术中出现的拥塞现象,同时降低了线程的等待时间,提高了线程协同执行的速度。
相应的,因为存在多个锁部件,所以路由部件在接收小核发送的锁消息后,首先要利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号。
当然,所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号的方法要依据锁与锁部件的对应存储形式而定。
所述利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号具体可以包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
例如,有4个锁部件,编号分别为0、1、2、3,其中,
编号0的锁部件中5个锁,对应的内存地址分别为0000、0004、0008、000C、0010;
编号1的锁部件中有5个锁,对应的内存地址分别为0001、0005、0009、000D、0011;
编号2的锁部件中有5个锁,对应的内存地址分别为0002、0006、000A、000E、0012;
编号3的锁部件中有5个锁,对应的内存地址分别为0003、0007、000B、000F、0013。
即,对应存储形式为:锁部件的编号和该锁部件包含的锁对应的内存地址与所有锁部件的个数的商的余数相同,则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁所属的锁部件:
第一,计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数。
此时,锁部件的个数为4,锁对应的内存地址为0009,则
余数=取余(内存地址/锁部件的个数)
=取余(9/4)=1
第二,将所述余数作为所述请求的锁所属的锁部件的编号。
此时,余数为1,故所述请求的锁所属的锁部件的编号为1。
当然,也可能是路由部件中预先存储了锁部件的编号与所述请求的锁对应的内存地址对应关系。
例如,如果有3个锁部件1、2、3,预存储的对应关系为:
锁部件1,锁标识的内存地址段为0000-003F;
锁部件2,锁标识的内存地址段为0040-007F;
锁部件3,锁标识的内存地址段为0080-00BF。
则若所述请求的锁对应的内存地址为0009,可以通过以下方法计算所述请求的锁所属的锁部件的编号:
查询对应关系表格,发现0009属于地址段0000-003F,对应锁部件1,则所述请求的锁所属的锁部件的编号为1。
本发明实施例旨在说明利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号,对如何计算所述请求的锁所属的锁部件的编号不作具体限定。
所述发送单元63,用于向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
具体的,在利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号后,向所述编号对应的锁部件发送锁消息,请求所述锁部件对所述锁消息进行处理具体可以包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
进一步的,所述计算单元62利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号具体包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
具体的,所述计算单元确定62计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号的方法可参考实施例二步骤202的描述,本发明实施例对此不再赘述。
进一步的,所述请求的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态。
所述发送单元63向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息
具体的,所述请求的锁的内部结构可参考实施例二中表一的描述,本发明实施例不再赘述。
需要说明的是,因为所述锁部件根据所述请求的锁的状态,对所述申请锁消息进行处理,而并非通过设置标志位,对标志位不断轮询完成互斥操作,因此本发明实施例可以避免对标志位不断轮询造成的网络压力大的问题,并且锁的状态是锁包含的信息的一部分,而锁是芯片上锁部件的一部分,所以该方法所有的操作都在芯片上执行,也因此避免了访问芯片外部的标志位所产生的***开销较大的问题。
可选的,所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
所述发送单元63向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
具体的,所述请求的锁的内部结构可参考实施例二中表二的描述,本发明实施例不再赘述。
同样的,因为所述锁部件根据所述请求的锁的状态,对所述申请锁消息进行处理,而并非通过设置标志位,对标志位不断轮询完成互斥操作,因此本发明实施例可以避免对标志位不断轮询造成的网络压力大的问题,并且锁的状态是锁包含的信息的一部分,而锁是芯片上锁部件的一部分,所以该方法所有的操作都在芯片上执行,也因此避免了访问芯片外部的标志位所产生的***开销较大的问题。
本发明实施例提供了一种实现多线程互斥操作的装置,所述装置包括:接收单元、计算单元和发送单元。所述接收单元接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址;所述计算单元利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;所述发送单元向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
基于上述实施例的描述,通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请锁消息和释放锁的释放锁消息,结合所述实现多线程互斥操作的装置,解决了线程数目增多时产生的拥塞现象,降低了线程的等待时间,提高了线程协同执行的速度。
实施例四、
本发明实施例提供了一种实现多线程互斥操作的芯片70,具体如图7所示,所述芯片70包括小核71、路由部件72和锁部件73。
所述路由部件72,用于接收所述小核71发送的锁消息,所述锁消息携带所述小核71中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息。
所述路由部件72,还用于利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件73的编号。
所述路由部件72,还用于向所述编号对应的锁部件73发送所述锁消息。
所述锁部件73,用于接收所述路由部件72发送的所述锁消息。
所述锁部件73,还用于对所述锁消息进行处理。
具体的,所述锁部件73对所述锁消息进行处理的方法可参考实施例二的描述,本发明实施例对此不再赘述。
进一步的,所述路由部件72利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件73的编号具体包括:
计算所述请求的锁对应的内存地址除以所有锁部件的个数后的余数,将所述余数作为所述请求的锁所属的锁部件的编号。
进一步的,所述请求的锁的信息包括:锁对应的内存地址、锁的状态、等待该锁的线程的个数及编号、正使用该锁的线程的编号、下一个获取该锁的线程的指示信息,其中,所述锁的状态为空闲状态或占用状态。
所述路由部件72向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
具体的,所述请求的锁的内部结构可参考实施例二中表一的描述,本发明实施例不再赘述。
进一步的,若所述锁消息为申请锁消息,则所述锁消息还携带所述第一线程的编号。
所述锁部件73还用于对所述锁消息进行处理具体包括:
根据所述请求的锁消息携带的所述请求的锁对应的内存地址查找所述请求的锁的信息。
检查所述请求的锁的信息中包含的锁的状态。
若所述请求的锁的状态为占用状态,判断等待所述请求的锁的线程的个数是否小于芯片所支持的最大线程的个数。
若所述等待所述请求的锁的线程的个数小于所述芯片所支持的最大线程的个数,将所述第一线程的编号写入等待所述请求的锁的线程的编号字段,同时更新所述等待该锁的线程的个数。
若所述在等待所述请求的锁的线程的个数不小于所述芯片所支持的最大线程的个数,将所述第一线程编号写入所述请求的锁的内存。
可选的,所述请求的锁的信息包括:锁对应的内存地址,锁的状态,等待该锁的线程的个数、正使用该锁的线程的编号、指示芯片上所有线程的状态的向量、下一个获取该锁的线程的指示信息,其中,所述线程的状态包括所述线程在是否在等待该锁。
所述路由部件73向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理具体包括:
向所述编号对应的锁部件发送所述锁消息,请求所述锁部件在根据所述锁消息携带的所述请求的锁对应的内存地址查找到所述请求的锁的信息后,根据所述请求锁的信息对所述锁消息进行处理,同时更新所述请求的锁的信息。
具体的,所述请求的锁的内部结构可参考实施例二中表二的描述,本发明实施例不再赘述。
具体的,所述芯片70实现多线程互斥操作的方法可参见实施例二的描述。本发明实施例对此不再赘述。
本发明实施例提供了一种实现多线程互斥操作的芯片,所述芯片包括:小核、路由部件和锁部件。首先,所述路由部件接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址;接着所述路由部件利用所述请求的锁的内存地址计算所述请求的锁所属的锁部件的编号;然后所述路由部件向所述编号对应的锁部件发送所述锁消息,请求所述锁部件对所述锁消息进行处理。
基于上述实施例的描述,因为所述芯片能够独立完成多线程互斥操作的方法,因此可以避免访问芯片外部的标志位产生的***开销比较大的问题;同时通过在芯片上分布多个锁部件,分别管理不同小核申请锁的申请锁消息和释放锁的释放锁消息,进而解决了线程数目增多时产生的拥塞现象,降低了线程的等待时间,提高了线程协同执行的速度。
实施例五、
本发明实施例还提供了一种计算机节点80,具体如图8所示,所述计算机节点80包括实现多线程互斥操作的芯片70。
所述芯片70,用于实现多线程互斥操作,包括小核71、路由部件72和锁部件73。
所述路由部件72,用于接收所述小核71发送的锁消息,所述锁消息携带所述小核71中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息。
所述路由部件72,还用于利用所述请求的锁的内存地址计算所述请求的锁所属的锁部件73的编号。
所述路由部件72,还用于向所述编号对应的锁部件73发送所述锁消息。
所述锁部件73,用于接收所述路由部件72发送的所述锁消息。
所述锁部件73,还用于对所述锁消息进行处理。
具体的,所述芯片70实现多线程互斥操作的方法可参见实施例二的描述,本发明实施例对此不再赘述。
本发明实施例提供了一种计算机节点,所述计算机节点包括实施例四的实现多线程互斥操作的芯片。所述芯片包括:小核、路由部件和锁部件。首先,所述路由部件接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址;接着所述路由部件利用所述请求的锁的内存地址计算所述请求的锁所属的锁部件的编号;然后所述路由部件向所述编号对应的锁部件发送所述锁消息,所述锁部件在接收所述路由部件发送的所述锁消息后,对所述锁消息进行处理。
基于上述实施例的描述,所述计算机节点在完成多线程互斥操作时,可以避免所述计算机节点内部的芯片上的多核/众核处理器中的线程访问所述芯片以外的标志位产生的***开销比较大的问题;同时所述计算机节点内部的芯片上分布了多个存储锁对应的内存地址的锁部件,使得线程请求的锁不集中在芯片上的同一部件中,因此能够解决拥塞问题,降低线程的等待时间,提高线程协同执行的速度。
实施例六、
本发明实施例提供了一种计算机***90,具体如图8所示,所述计算机***90包括计算机节点80和内存91。
所述内存91,用于在所述芯片70中的所述锁部件73接收到申请锁成功的确认消息后,和所述计算机节点80交互,完成线程的读写操作。
所述计算机节点80,用于实现多线程互斥操作,包括实现多线程互斥操作的芯片70。
所述芯片70,包括小核71、路由部件72和锁部件73。
所述路由部件72,用于接收所述小核71发送的锁消息,所述锁消息携带所述小核71中第一线程请求的锁对应的内存地址,其中,所述锁消息为申请锁消息或释放锁消息。
所述路由部件72,还用于利用所述请求的锁的内存地址计算所述请求的锁所属的锁部件73的编号。
所述路由部件72,还用于向所述编号对应的锁部件73发送所述锁消息。
所述锁部件73,用于接收所述路由部件72发送的所述锁消息。
所述锁部件73,还用于对所述锁消息进行处理。
具体的,所述芯片70实现多线程互斥操作的方法可参见实施例二的描述,本发明实施例对此不再赘述。
本发明实施例提供了一种计算机***,所述计算机***包括内存和实施例五的所述计算机节点,所述内存用于在所述芯片中的所述锁部件接收到申请锁成功的确认消息后,和所述计算机节点交互,完成线程的读写操作。所述计算机节点包括实现多线程互斥操作的芯片。所述芯片包括:小核、路由部件和锁部件。首先,所述路由部件接收小核发送的锁消息,所述锁消息携带所述小核中第一线程请求的锁对应的内存地址;接着所述路由部件利用所述请求的锁对应的内存地址计算所述请求的锁所属的锁部件的编号;然后所述路由部件向所述编号对应的锁部件发送所述锁消息,所述锁部件在接收所述路由部件发送的所述锁消息后,对所述锁消息进行处理。
基于上述实施例的描述,所述计算机***在完成多线程互斥操作时,可以避免所述计算机***内部的芯片上的多核/众核处理器中的线程访问所述芯片以外的标志位产生的***开销比较大的问题;同时所述计算机***内部的芯片上分布了多个存储锁对应的内存地址的锁部件,使得线程请求的锁不集中在芯片上的同一部件中,因此能够解决拥塞问题,降低线程的等待时间,提高线程协同执行的速度。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (15)
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所述的计算机节点。
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310112333.9A CN104102549B (zh) | 2013-04-01 | 2013-04-01 | 一种实现多线程互斥操作的方法、装置和芯片 |
PCT/CN2014/070959 WO2014161377A1 (zh) | 2013-04-01 | 2014-01-21 | 一种实现多线程互斥操作的方法、装置和芯片 |
EP14778796.4A EP2983089B1 (en) | 2013-04-01 | 2014-01-21 | Method, device, and chip for implementing mutually exclusive operation of multiple threads |
ES14778796.4T ES2674546T3 (es) | 2013-04-01 | 2014-01-21 | Método, aparato y chip para implementar una operación mutuamente excluyente de múltiples hilos |
EP18151115.5A EP3379421B1 (en) | 2013-04-01 | 2014-01-21 | Method, apparatus, and chip for implementing mutually-exclusive operation of multiple threads |
US14/872,946 US9798591B2 (en) | 2013-04-01 | 2015-10-01 | Method, apparatus, and chip for implementing mutually-exclusive operation of multiple threads |
US15/686,830 US10331499B2 (en) | 2013-04-01 | 2017-08-25 | Method, apparatus, and chip for implementing mutually-exclusive operation of multiple threads |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310112333.9A CN104102549B (zh) | 2013-04-01 | 2013-04-01 | 一种实现多线程互斥操作的方法、装置和芯片 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104102549A CN104102549A (zh) | 2014-10-15 |
CN104102549B true CN104102549B (zh) | 2017-12-15 |
Family
ID=51657548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310112333.9A Active CN104102549B (zh) | 2013-04-01 | 2013-04-01 | 一种实现多线程互斥操作的方法、装置和芯片 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9798591B2 (zh) |
EP (2) | EP3379421B1 (zh) |
CN (1) | CN104102549B (zh) |
ES (1) | ES2674546T3 (zh) |
WO (1) | WO2014161377A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094993B (zh) * | 2015-08-18 | 2018-06-19 | 华为技术有限公司 | 一种多核处理器、数据同步的方法及装置 |
KR101716862B1 (ko) * | 2016-10-04 | 2017-03-15 | (주)볼트마이크로 | 영상데이터 관리 장치 및 방법 |
US10565024B2 (en) | 2016-10-19 | 2020-02-18 | Oracle International Corporation | Generic concurrency restriction |
WO2018176397A1 (zh) * | 2017-03-31 | 2018-10-04 | 华为技术有限公司 | 一种锁分配的方法、装置和计算设备 |
CN108572876B (zh) * | 2018-03-07 | 2020-11-20 | 北京神州绿盟信息安全科技股份有限公司 | 一种读写锁的实现方法及装置 |
FR3086426B1 (fr) | 2018-09-26 | 2021-10-29 | Commissariat Energie Atomique | Gestionnaire de verrous pour architecture multicoeurs |
CN117171102B (zh) * | 2023-09-07 | 2024-01-26 | 山东九州信泰信息科技股份有限公司 | 一种多线程无锁高速写文件的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5175861A (en) * | 1988-10-14 | 1992-12-29 | Nec Corporation | Lock processing system |
US7739245B1 (en) * | 2002-09-30 | 2010-06-15 | Symantec Operating Corporation | Block locking in a multi-node environment |
CN102567275A (zh) * | 2010-12-08 | 2012-07-11 | 中国科学院声学研究所 | 一种多核处理器上多个操作***间内存访问的方法及*** |
CN102591722A (zh) * | 2011-12-31 | 2012-07-18 | 龙芯中科技术有限公司 | 片上网络多核处理器多线程的资源分配处理方法和*** |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7173929B1 (en) * | 2001-12-10 | 2007-02-06 | Incipient, Inc. | Fast path for performing data operations |
US6973549B1 (en) * | 2001-12-10 | 2005-12-06 | Incipient, Inc. | Locking technique for control and synchronization |
US20070124545A1 (en) * | 2005-11-29 | 2007-05-31 | Anton Blanchard | Automatic yielding on lock contention for multi-threaded processors |
US20070150897A1 (en) * | 2005-12-22 | 2007-06-28 | International Business Machines Corporation | Methods and apparatus for detecting deadlock in multithreading programs |
US7698523B2 (en) * | 2006-09-29 | 2010-04-13 | Broadcom Corporation | Hardware memory locks |
KR100922965B1 (ko) * | 2006-10-10 | 2009-10-22 | 삼성전자주식회사 | 네트워크온칩 장치와 이를 위한 동작 주파수 제어 방법 |
US8086437B2 (en) * | 2008-04-02 | 2011-12-27 | Microsoft Corporation | Modeling and simulating software contention |
CN101908034B (zh) * | 2010-06-28 | 2012-05-23 | 中国科学院计算技术研究所 | 众核处理器片上同步方法和其*** |
CN102141974A (zh) * | 2011-04-11 | 2011-08-03 | 复旦大学 | 一种多核处理器核间通信方法及其电路结构 |
-
2013
- 2013-04-01 CN CN201310112333.9A patent/CN104102549B/zh active Active
-
2014
- 2014-01-21 ES ES14778796.4T patent/ES2674546T3/es active Active
- 2014-01-21 WO PCT/CN2014/070959 patent/WO2014161377A1/zh active Application Filing
- 2014-01-21 EP EP18151115.5A patent/EP3379421B1/en active Active
- 2014-01-21 EP EP14778796.4A patent/EP2983089B1/en active Active
-
2015
- 2015-10-01 US US14/872,946 patent/US9798591B2/en active Active
-
2017
- 2017-08-25 US US15/686,830 patent/US10331499B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5175861A (en) * | 1988-10-14 | 1992-12-29 | Nec Corporation | Lock processing system |
US7739245B1 (en) * | 2002-09-30 | 2010-06-15 | Symantec Operating Corporation | Block locking in a multi-node environment |
CN102567275A (zh) * | 2010-12-08 | 2012-07-11 | 中国科学院声学研究所 | 一种多核处理器上多个操作***间内存访问的方法及*** |
CN102591722A (zh) * | 2011-12-31 | 2012-07-18 | 龙芯中科技术有限公司 | 片上网络多核处理器多线程的资源分配处理方法和*** |
Also Published As
Publication number | Publication date |
---|---|
EP2983089A1 (en) | 2016-02-10 |
US20160019100A1 (en) | 2016-01-21 |
ES2674546T3 (es) | 2018-07-02 |
US10331499B2 (en) | 2019-06-25 |
US9798591B2 (en) | 2017-10-24 |
EP3379421A1 (en) | 2018-09-26 |
EP2983089A4 (en) | 2016-02-10 |
EP3379421B1 (en) | 2022-11-30 |
CN104102549A (zh) | 2014-10-15 |
US20170351557A1 (en) | 2017-12-07 |
EP2983089B1 (en) | 2018-03-21 |
WO2014161377A1 (zh) | 2014-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104102549B (zh) | 一种实现多线程互斥操作的方法、装置和芯片 | |
CN104794100B (zh) | 基于片上网络的异构多核处理*** | |
CN104239134B (zh) | 一种众核***的任务管理方法和装置 | |
DE102019104394A1 (de) | Befehlssatzarchitektur zum ermöglichen von energieeffizientem rechnen für exascalearchitekturen | |
CN104040535B (zh) | 自定义浏览器侧电子表格函数 | |
WO2016127720A1 (zh) | 一种数据互通的方法,及数据互通设备 | |
CN107526645B (zh) | 一种通信优化方法及*** | |
CN106202548A (zh) | 数据存储方法、查找方法及装置 | |
US9535702B2 (en) | Asset management device and method in a hardware platform | |
CN104050091A (zh) | 基于非一致性内存访问***的网络设备及其设置方法 | |
EP3140728B1 (en) | Dynamic load balancing of hardware threads in clustered processor cores using shared hardware resources, and related circuits, methods, and computer-readable media | |
CN104361296B (zh) | 一种并行的大容量访问控制列表的查找方法 | |
CN115203126B (zh) | 一种算子融合处理方法、装置、设备及存储介质 | |
CN116909943B (zh) | 一种缓存访问方法、装置、存储介质及电子设备 | |
US11030714B2 (en) | Wide key hash table for a graphics processing unit | |
CN112860412B (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
CN106445472A (zh) | 一种字符操作加速方法、装置、芯片、处理器 | |
CN104461957A (zh) | 一种异构多核cpu共享片上高速缓存的方法及装置 | |
CN104050189B (zh) | 页面共享处理方法及装置 | |
US10101999B2 (en) | Memory address collision detection of ordered parallel threads with bloom filters | |
CN110636522A (zh) | 一种通信网络覆盖质量的确定方法及装置 | |
CN105183668B (zh) | 缓存刷新方法及装置 | |
CN106980578A (zh) | 一种内存块管理方法及*** | |
CN105637483B (zh) | 线程迁移方法、装置和*** | |
CN104008140B (zh) | 一种用于处理网络应用中的数据集的方法与设备 |
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 |