掌桥专利:专业的专利平台
掌桥专利
首页

核间通信的方法、处理器和电子设备

文献发布时间:2023-06-19 16:11:11



技术领域

本申请涉及芯片领域,更具体地,涉及核间通信的方法、处理器和电子设备。

背景技术

在处理器包括多个处理器核心的设计中,处理器核心之间通过共享缓存的方式实现核间通信,但是,目前的技术中的核间通信的时延较大,影响了总体的传输速率,从而影响了处理器的性能。

因此,需要提供一种核间通信的技术,降低通信时延,提高处理器的性能。

发明内容

本申请提供一种核间通信的方法、处理器和电子设备,通过将一些具有内存亲和性的线程尽可能调度在处理能力相同的同档处理器核心上运行,以尽可能实现同档核心之间的通信,避免不同档核心之间的通信,这样,在不提高成本的情况下,总体上可以最大程度地降低核间通信的时延,提高处理器性能。

第一方面,提供了一种核间通信的方法,应用于包括多个处理器核心的处理器上,所述方法包括:

获取正在运行的M个线程的线程信息,M为大于1的整数;

根据所述线程信息,确定所述M个线程中的N个线程具有内存亲和性,所述内存亲和性用于表示所述N个线程访问同一内存地址的程度,N大于1且小于或等于M;

将所述N个线程中的L个线程分别调度至所述多个处理器核心中的L个处理器核心上运行,以进行核间通信,其中,所述L个处理器核心的处理能力相同且共享第一缓存,一个处理器核心用于运行一个线程,L大于1且小于或等于N。

在一示例中,所述多个处理器核心中处理能力相同的处理器核心之间通过共享第一缓存实现核间通信,所述多个处理器核心中处理能力不同的处理器核心之间通过共享第二缓存实现核间通信,所述第一缓存的传输速率高于所述第二缓存的传输速率。

本申请实施例提供的核间通信的方法,确定具有内存亲和性的N个线程,以及,将该N个线程调度至处理能力相同的N个处理器核心上,该N个处理器核心可共享第一缓存,这样,通过将具有内存亲和性的线程尽可能调度在共享第一缓存的同档处理器核心上运行,以尽可能实现同档核心之间的通信,避免不同档核心之间的通信,这样,在不提高成本的情况下,总体上可以最大程度地降低核间通信的时延,提高处理器性能。

结合第一方面,在第一方面的某些实现方式中,

所述线程信息包括所述M个线程中每个线程的线程等待状态;以及,

根据所述线程信息,确定所述M个线程中的N个线程具有内存亲和性,包括:

在所述N个线程的线程等待状态满足预设条件的情况下,确定所述N个线程具有内存亲和性。

本申请实施例提供的核间通信的方法,由于缓存一致性的原则,访问同一内存地址的多个线程会存在线程之间互相等待的现象,因此,本申请实施例通过获得线程的等待状态,根据线程的等待状态确定线程的内存亲和性,不仅可以较为准确地确定线程之间的内存亲和性以较好地降低通信时延,而且,该方法简单且便于实现。

结合第一方面,在第一方面的某些实现方式中,所述每个线程的线程等待状态包括所述每个线程的线程等待次数;以及,

在所述N个线程的线程等待状态满足预设条件的情况下,确定所述N个线程具有内存亲和性,包括:

在所述N个线程的线程等待次数大于或等于预设等待次数的情况下,确定所述N个线程具有内存亲和性。

结合第一方面,在第一方面的某些实现方式中,所述每个线程的线程等待状态包括所述每个线程的等待时长;以及,

在所述N个线程的线程等待状态满足预设条件的情况下,确定所述N个线程具有内存亲和性,包括:

在所述N个线程的线程等待时长大于或等于预设等待时长的情况下,确定所述N个线程具有内存亲和性。

结合第一方面,在第一方面的某些实现方式中,所述线程信息包括所述M个线程中每个线程访问的内存地址;以及,

根据所述线程信息,确定所述M个线程中的N个线程具有内存亲和性,包括:

在所述N个线程访问同一内存地址的次数大于或等于预设访问次数的情况下,确定所述N个线程具有内存亲和性。

本申请实施例提供的核间通信的方法,通过获得线程访问的内存地址,根据线程的内存地址确定线程的内存亲和性,可以更为准确地确定线程之间的内存亲和性以更好地降低通信时延。

结合第一方面,在第一方面的某些实现方式中,将所述N个线程中的L个线程分别调度至所述多个处理器核心中的L个处理器核心上运行,以进行核间通信,包括:

在L小于N的情况下,根据业务的优先级,将所述L个线程分别调度至所述L个处理器核心上运行,所述L个线程对应的业务的优先级高于所述N个线程中除所述L个线程以外的线程对应的业务的优先级。

本申请实施例提供的核间通信的方法,通过业务的优先级调度线程,不仅减少通信时延,还可以保证优先级较高的业务的传输可靠性。

结合第一方面,在第一方面的某些实现方式中,所述第一缓存为二级缓存。

第二方面,提供了一种处理器,包括:处理模块、处理器核心模块和调度模块,所述处理器核心模块包括多个处理器核心,其中,

所述处理模块用于,获取正在运行的M个线程的线程信息,M为大于1的整数;

所述处理模块还用于,根据所述线程信息,确定所述M个线程中的N个线程具有内存亲和性,所述内存亲和性用于表示所述N个线程访问同一内存地址的程度,N大于1且小于或等于M;

所述调度模块用于,将所述N个线程中的L个线程分别调度至所述多个处理器核心中的L个处理器核心上运行,以进行核间通信,其中,所述L个处理器核心的处理能力相同且共享第一缓存,一个处理器核心用于运行一个线程,L大于1且小于或等于N。

结合第二方面,在第二方面的某些实现方式中,所述线程信息包括所述M个线程中每个线程的线程等待状态;以及,

所述处理模块具体用于,在所述N个线程的线程等待状态满足预设条件的情况下,确定所述N个线程具有内存亲和性。

结合第二方面,在第二方面的某些实现方式中,所述每个线程的线程等待状态包括所述每个线程的线程等待次数;以及,

所述处理模块具体用于,在所述N个线程的线程等待次数大于或等于预设等待次数的情况下,确定所述N个线程具有内存亲和性。

结合第二方面,在第二方面的某些实现方式中,所述每个线程的线程等待状态包括所述每个线程的等待时长;以及,

所述处理模块具体用于,在所述N个线程的线程等待时长大于或等于预设等待时长的情况下,确定所述N个线程具有内存亲和性。

结合第二方面,在第二方面的某些实现方式中,所述线程信息包括所述M个线程中每个线程访问的内存地址;以及,

所述处理模块具体用于,在所述N个线程访问同一内存地址的次数大于或等于预设访问次数的情况下,确定所述N个线程具有内存亲和性。

结合第二方面,在第二方面的某些实现方式中,所述调度模块具体用于,在L小于N的情况下,根据业务的优先级,将所述L个线程分别调度至所述L个处理器核心上运行,所述L个线程对应的业务的优先级高于所述N个线程中除所述L个线程以外的线程对应的业务的优先级。

结合第二方面,在第二方面的某些实现方式中,所述处理模块还用于,向所述多个处理器核心中的任一个处理器核心发送调度请求,所述调度请求用于指示所述N个线程具有内存亲和性;以及,

所述调度模块具体用于,根据所述调度请求,将所述L个线程分别调度至所述L个处理器核心上运行。

结合第二方面,在第二方面的某些实现方式中,所述第一缓存为二级缓存。

第三方面,提供了一种电子设备,包括:一个或多个处理器;存储器;以及一个或多个计算机程序。其中,一个或多个计算机程序被存储在存储器中,一个或多个计算机程序包括指令。当指令被电子设备执行时,使得电子设备执行上述第一方面中任一项可能的实现中的方法。

第四方面,提供了一种芯片,包括一个或多个处理器,用于从存储器中调用并运行所述存储器中存储的指令,使得安装有所述芯片的电子设备执行上述第一方面中任一项可能的实现中的方法。

在一示例中,该芯片可以是系统级芯片(或,片上芯片)。

第五方面,提供了一种计算机存储介质,包括:一个或多个处理器,所述处理器与存储器耦合,所述存储器用于存储程序或指令,当所述程序或指令被所述处理器执行时,使得所述处理器执行上述第一方面中任一项可能的实现中的方法。

第六方面,本申请提供一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行上述第一方面中任一项可能的实现中的方法。

可以理解,上述提供的处理器、电子设备、芯片、计算机存储介质以及计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。

附图说明

图1是本申请实施例提供的多个处理器核心之间实现核间通信的示意性场景图。

图2是本申请实施例提供的核间通信的方法的示意性流程图。

图3是本申请实施例提供的多个处理器核心之间实现核间通信的另一示意性场景图。

图4是本申请实施例提供的多个处理器核心之间实现核间通信的再一示意性场景图。

图5是本申请实施例提供的处理器的示意性结构图。

图6是本申请实施例提供的电子设备的示意性结构图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

本申请实施例的核间通信的方法应用于包括多个处理器核心的处理器中,该处理器可以是各种类型的处理器,示例性地,该处理器可以是中央处理器(central processingunit,CPU)、图像处理器(graphics processing unit,GPU)、神经网络处理器(neuralnetwork processing unit,NPU)等处理器。

为了便于理解,首先对本申请实施例的相关术语做介绍。

处理器核心

处理器核心是处理器最重要的组成部分,用于完成数据处理的核心部件,可以从处理器内的存储器中读取指令,并执行指令指定的控制和计算任务。一个处理器中可以包括一个或多个处理器核心,若处理器中包括一个处理器核心,该处理器可以称为单核处理器,若处理器中包括多个处理器核心,该处理器可以称为多核处理器。功能上讲,一个处理器核心基本上可以看做一个独立的处理器,所以,在一些情况下,可以将一个处理器核心称为一个处理器,多个处理器核心称为多个处理器。

缓存

处理器内的缓存是位于处理器与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多,可以称为高速缓冲存储器。缓存中的数据是内存中的部分数据,该部分数据是处理器在短时间内即将读取且需要被重复访问的,当处理器读取数据时,可先从缓存中读取,从而加快读取速度,当缓存中没有处理器需要读取的数据时,再从内存中读取数据。

目前的缓存有多级缓存,比较常见的是三级缓存,该三级缓存包括:一级缓存、二级缓存、三级缓存。一级缓存,CPU的第一层级的高速缓存,一级缓存最靠近核心,运行速度最快,容量最小。二级缓存,CPU的第二层级的高速缓存,相比于一级缓存,二级缓存距离核心比一级缓存远,运行速度比一级缓存慢,容量比一级缓存大。三级缓存,CPU的第三层级的高速缓存,其作用是进一步降低内存的延迟,同时提升海量数据量计算时的性能,与一级缓存和二级缓存相比,三级缓存距离核心最远,运行速度最慢,容量最大。当处理器要读取数据时,首先从一级缓存中查找,若一级缓存中没有找到再从二级缓存中查找,若二级缓存中还是没有找到就从三级缓存中查找,若三级缓存中还是没有找到再从内存中查找。

线程

线程是处理器调度和分派的基本单位,线程在调度的处理器核心上运行。

一般情况下,在无超线程技术中,一个处理器核心运行一个线程,该处理器核心是物理的处理器核心,在超线程技术中,一个物理的处理器核心可以扩展为多个逻辑处理器核心,多个逻辑处理器核心分别运行多个线程,一个逻辑处理器核心运行一个线程。

在本申请实施例中,为了便于描述,我们定义一个处理器核心运行一个线程。该处理器核心可以是物理的处理器核心,也可以是逻辑的处理器核心,当采用了超线程技术,处理器核心可以理解为逻辑处理器核心,一个逻辑处理器核心运行一个线程,当不采用超线程技术,处理器核心可以理解为物理的处理器核心,一个物理的处理器核心运行一个线程。

在本申请实施例中,处理器包括多个处理器核心,还包括其他例如存储器、接口单元、调度单元、电源等的辅助元件,此外,还包括用于判定线程间是否具有亲和性的处理单元。

图1是本申请实施例提供的多个处理器核心之间实现核间通信的示意性场景图。

参考图1,处理器中包括8个处理器核心,一级缓存,二级缓存,三级缓存和内存。处理器核心1和处理器核心2的处理能力相同,处理器核心3和处理器核心4的处理能力相同,处理器核心5、处理器核心6、处理器核心7和处理器核心8的处理能力相同。为了便于描述,我们可以将处理能力相同的处理器核心视为一个群组,所以,处理器核心1和处理器核心2属于第一群组,处理器核心3和处理器核心4属于第二群组,处理器核心5至处理器核心8属于第三群组,三个群组的处理能力各不同。

需要说明的是,本申请实施例所说的处理器核心的处理能力相同可以理解为处理器核心的处理能力基本相同,处理器核心间的处理能力的差值属于一个较小的数值范围,或者,处理器核心的处理能力位于一个数值范围,我们都可以认为处理器核心的处理能力相同。

在本申请实施例中,可以基于处理器核心的执行指令的数量、访问乱序的能力以及访问内存的能力等多因素来评价处理器核心的处理能力。此外,同一群组中的处理器核心共电源域,不同群组中的处理器核心不同电源域。

在处理器核心的一种核间通信中,每个处理器核心独享一级缓存,同一群组中的处理器核心可以共享传输速率较高的第一缓存(例如,二级缓存),不同群组之间的处理器核心可以共享传输速率较低但容量较大的第二缓存(例如,三级缓存)。在本申请实施例中,同一群组中的处理器核心之间的核间通信可以称为同档核心的通信,不同群组的处理器核心之间的通信可以称为不同档核心的通信。

以第一缓存为二级缓存以及第二缓存是三级缓存为例,在图1中,第一群组中的处理器核心1和处理器核心2访问同一内存地址,共享二级缓存,分别运行线程1和线程2,形成同档核心之间的通信;第三群组中的处理器核心7和处理器核心8访问同一内存地址,共享二级缓存,分别运行线程5和线程6,也形成同档核心的通信;第二群组中的处理器核心3和第三群组中的处理器核心5访问同一内存地址,但两个核心属于不同群组,共享三级缓存,分别运行线程3和线程4,形成不同档核心之间的通信。

由于第一缓存(例如,二级缓存)的传输速率高于第二缓存(例如,三级缓存),但第一缓存的容量低于第二缓存,所以,综合考虑时延和成本,通过使得同档核心共享传输速率高的第一缓存,减低通信时延,使得不同档核心共享传输速率较低的第二缓存,节约成本,总体上来说,平衡了时延和成本。

基于此,为了更好地降低通信时延,本申请实施例通过将一些具有内存亲和性的线程尽可能调度在共享第一缓存的同档处理器核心上运行,以尽可能实现同档核心之间的通信,避免不同档核心之间的通信,这样,在不提高成本的情况下,总体上可以最大程度地降低核间通信的时延,提高处理器性能。

线程的内存亲和性表示多个线程访问同一内存地址的程度,若多个线程访问同一内存地址的程度高,则表示该多个线程具有内存亲和性,当多个线程访问同一内存地址的程度,则表示该多个线程不具有内存亲和性。本申请实施例所说的线程访问内存地址表示线程对该内存地址内的数据进行读和写操作。

需要说明的是,由于线程运行在处理器核心上,所以,线程访问内存地址也可以称为运行该线程的处理器核心访问内存地址,两种描述可以替换。

因此,具有内存亲和性的多个线程大概率会访问同一内存地址,这样,将该多个线程调度在同档处理器核心上运行,同档处理器核心共享同一缓存,可以尽可能实现同档处理器核心之间的通信,避免不同档核心之间的通信,以最大程度地降低核间通信的时延,提高处理器性能。

图2是本申请实施例提供的核间通信的方法200的示意性流程图。以图2的流程为例,对本申请实施例的核间通信的方法200做详细说明,该方法200可以由处理器执行。

应理解,本申请实施例的核间通信的方法应用于包括多个处理器核心的处理器上,该多个处理器核心中处理能力相同的处理器核心之间通过共享第一缓存实现核间通信,该多个处理器核心中处理能力不同的处理器核心之间通过共享第二缓存实现核间通信,该第一缓存的传输速率高于该第二缓存的传输速率。

对于该处理器,换句话说,该处理器可以包括多个处理器核心群组,一个处理器核心群组中包括至少一个处理器核心,一些群组可以仅包括一个处理器核心,另一些群组包括至少两个处理器核心,或者,所有群组都包括至少两个处理器核心。在核间通信中,处理能力相同的处理器核心属于同一个群组且共享第一缓存,处理能力不同的处理器核心属于不同的群组且共享第二缓存。

在一示例中,第一缓存是二级缓存,第二缓存是三级缓存或系统缓存。

在S210中,处理器获取正在运行的M个线程的线程信息,M为大于1的整数。

其中,该M个线程是运行在M个处理器核心上的线程,一个处理器核心上运行一个线程。该M个处理器核心是处理器中的全部或部分处理器核心,若处理器中的全部处理器核心都在运行,则该M个处理器核心就是处理器中的全部处理器核心,若处理器中的部分处理器核心在运行,则该M个处理器核心就是处理器中的部分处理器核心。

实现中,示例性地,可以设置预设时长,获取M个线程在预设时长内的线程信息。该预设时长可以是任意时长,例如,该预设时长可以是1毫秒(ms)、10ms、20ms等。

示例性地,处理器可以周期性获得M个线程的线程信息,每个周期的时长即为预设时长。

线程信息可以用于表示M个线程的线程状态。

在多个处理器核心运行多个线程且共享内存的场景中,多个处理器核心(或多个线程)会同时读写某个内存。由于内存中的数据会存在于多个处理器核心的多个缓存中,即,内存中的数据可能有多个备份,当某个处理器核心对某个内存的数据进行了修改,这些被修改的数据可能已经被写回到内存中,但也有可能被写在不同的处理器核心的各级缓存中,这样,会导致处理器核心之间并不知道数据写入的时序性,因而也不知道哪个备份是最新的,因此,当多个处理器核心(或多个线程)访问同一内存时,就可能会产生数据不一致的问题。例如,线程1和线程2共享二级缓存,可以访问同一内存,若线程1修改了内存内数据,但线程2并不知道,线程2访问该内存得到的数据可能还是之前未修改的数据,这就使得两个线程得到的数据不一致,存在缓存一致性的问题。因此,为了保证各个处理器核心之间共享的数据的一致性,处理器执行“缓存一致性”原则。

在缓存一致性原则中,会存在线程之间互相等待的现象,以保持数据的一致性。例如,处理器核心1运行线程1,处理器核心2运行线程2,处理器核心1和处理器核心2共享缓存,可访问同一内存,在某个时间,若线程2(或处理器核心2)修改了内存的数据,线程1(或处理器核心1)要访问修改的数据,线程1会等待内存管理单元(memory management unit,MMU)做缓存一致性的操作,当MMU完成此操作后,线程1的等待结束,线程1可运行后续指令,后续,若线程1(或处理器核心1)修改了内存的数据,那么,线程2想要访问修改的数据,线程2也会等待MMU做缓存一致性的操作,当MMU完成此操作后,线程2的等待结束,线程2可运行后续指令。如此循环反复,两个核心之间在数据一致的情况下实现核间通信。

所以,当多个线程之间存在互相等待的现象时,意味着该多个线程会可能会访问同一内存地址,那么,该多个线程之间可能具有亲和性。

因此,在一些实施例中,线程信息包括该M个线程中每个线程等待其他线程的线程等待状态。

这样,处理器可以根据线程的线程等待状态确定具有内存亲和性的线程。换句话说,本申请实施例基于缓存一致性的原则判断多个线程是否访问同一内存地址,以确定多个线程的内存亲和性。

应理解,每个线程的线程等待状态可以是每个线程在预设时长内的线程等待状态。

需要说明的是,每个线程的线程等待状态可以是每个线程等待同一个线程的等待状态,也可以是每个线程等待不同线程的等待状态。假设,若M个线程包括线程1、线程2和线程3,可访问同一个内存地址,那么,3个线程可以互相等待彼此,任一个线程可以等待其他两个线程中的一个或两个线程,以线程1为例,线程1可以在预设时长内仅等待线程2,也可以在预设时长内仅等待线程3,也可以在预设时长的一部分时长内等待线程2,在预设时长的另一部分时长内等待线程3。

在本申请实施例中,用于表示线程的线程等待状态可以是任一种与线程等待相关的内容,也可以是多种内容的组合。

在一示例中,每个线程的线程等待状态包括该每个线程的线程等待次数。

应理解,每个线程的线程等待次数可以是每个线程在预设时长内的线程等待次数。

还应理解,每个线程等待其他线程的过程中,线程的线程等待次数与等待的线程是否为同一个无关。

假设,M个线程包括线程1、线程2和线程3,以线程1为例:例如,线程1发生10次等待,其中,线程1的4次等待是等待线程2,6次等待是等待线程3;再例如,线程1发生10次等待,该10次等待都是等待线程2。

在另一示例中,每个线程的线程等待状态包括该每个线程的线程等待时长。

应理解,每个线程的线程等待时长可以是每个线程在预设时长内的线程等待时长。

还应理解,每个线程的线程等待时长可以是每个线程在预设时长内等待其他线程的线程时长的总和。例如,线程1发生10次等待,线程1的10次等待的时长的总和即为线程1的等待时长。

在另一示例中,每个线程的线程等待状态包括该每个线程的线程等待次数和线程等待时长。

即,在该实施例中,线程的线程等待状态包括线程的线程等待次数和线程等待时长的组合。

由于线程的内存亲和性表示的是线程访问同一内存地址的程度,因此,在另一些实施例中,该线程信息包括该M个线程中每个线程访问的内存地址。

也就是说,处理器可以基于得到的每个线程访问的内存地址来确定M个线程中具有亲和性的线程。

在S220中,处理器根据线程信息,确定该M个线程中的N个线程具有内存亲和性,所述内存亲和性用于表示所述N个线程访问同一内存地址的程度,N大于1且小于或等于M。

在该步骤中,N个线程访问同一内存地址的程度高,处理器确定N个线程具有内存亲和性。

需要说明的是,若该M个线程中存在至少一组具有内存亲和性的线程,该N个线程是任一组具有内存亲和性的线程中的线程。

例如,该M个线程中存在两组具有内存亲和性的线程,组1的2个线程具有内存亲和性,组2的3个线程具有亲和性,则该N个线程可以是组1中的2个线程,N=2,或者,该N个线程也可以是组2中的3个线程,N=3。

再例如,该M个线程中仅存在一组具有内存亲和性的线程,则该N个线程就是该组线程中的线程。

下面,结合线程信息的不同内容,对处理器确定具有内存亲和性的N个线程的两种方式(即,方式1和方式2)做一说明。

方式1,该线程信息包括该M个线程中每个线程等待其他线程的线程等待状态;以及,

根据该线程信息,确定该M个线程中的N个线程具有内存亲和性,包括:

在该N个线程的线程等待状态满足预设条件的情况下,确定该N个线程具有内存亲和性。

如前所述,线程的线程等待状态基于缓存一致性原则提出,当多个线程之间存在互相等待的现象时,意味着该多个线程会可能访问同一内存地址,那么,该多个线程之间可能具有亲和性。

所以,当N个线程的线程等待状态存在互相等待的现象,且N个线程的线程等待状态满足预设条件,则表示N个线程访问同一内存地址的程度高,该N个线程具有内存亲和性。可以理解,预设条件与N个线程访问同一内存的程度相关。

在一实施例中,每个线程的线程等待状态包括该每个线程的线程等待次数;以及,

在该N个线程的线程等待状态满足预设条件的情况下,确定该N个线程具有内存亲和性,包括:

在该N个线程的线程等待次数大于或等于预设等待次数的情况下,确定该N个线程具有内存亲和性。

在该实施例中,预设条件即为多个线程的线程等待次数大于或等于预设等待次数。

其中,预设等待次数可以是预定义的,预设等待次数可以是任意大于1的整数。例如,预设等待次数可以是15、20等。

示例性地,假设,预设等待次数为15次,预设时长为20ms,N=2,该N个线程为线程1和线程2,线程1在20ms内的等待次数为20次,线程2在20ms内的等待次数为16次,那么,由于线程1和线程2在20ms内的等待次数都大于15次,所以,线程1和线程2具有内存亲和性。

在另一实施例中,每个线程的线程等待状态包括该每个线程的线程等待时长;以及,

在该N个线程的线程等待状态满足预设条件的情况下,确定该N个线程具有内存亲和性,包括:

在该N个线程的线程等待时长大于或等于预设等待时长的情况下,确定该N个线程具有内存亲和性。

在该实施例中,预设条件即为多个线程的线程等待时长大于或等于预设等待时长。

其中,预设等待时长可以是预定义的,预设等待时长可以是任意大于0的数。例如,预设等待时长可以是5ms、8ms等。

示例性地,假设,预设等待时长为8ms,预设时长为20ms,N=2,该N个线程为线程1和线程2,线程1在20ms内的等待时长为10ms,线程2的等待时长为9ms,那么,由于线程1和线程2在20ms内的等待时长都大于8ms,所以,线程1和线程2具有内存亲和性。

在另一些实施例中,每个线程的线程等待状态包括该每个线程的线程等待次数和线程等待时长;以及,

在该N个线程的线程等待状态满足预设条件的情况下,确定该N个线程具有内存亲和性,包括:

在该N个线程的线程等待次数等于或等于预设等待次数,且该N个线程的线程等待时长大于或等于预设等待时长的情况下,确定该N个线程具有内存亲和性。

在该实施例中,线程的线程等待状态是前两个实施例的结合,预设条件也是前两个实施例的结合,预设条件即为多个线程的线程等待次数大于或等于预设等待次数且线程等待时长大于或等于预设等待时长。

关于预设等待次数、预设等待时长以及确定N个线程具有内存亲和性的具体描述可分别参考上述两个实施例。

方式2,线程信息包括该M个线程中每个线程访问的内存地址;以及,

根据该线程信息,确定该M个线程中的N个线程具有内存亲和性,包括:

在该N个线程访问同一内存地址的次数大于或等于预设访问次数的情况下,确定该N个线程具有内存亲和性。

如前所述,确定多个线程具有内存亲和性的原则是多个线程访问同一内存地址的程度。基于此,在该实施例中,可以通过得到的线程访问同一内存地址的次数确定具有内存亲和性的线程。

在该实施例中,预设条件即为多个线程访问同一内存地址的次数大于或等于预设访问次数。

其中,预设访问次数可以是预定义的,预设访问次数可以是任意大于1的数。例如,预设访问次数可以是3次、5次等。

以图1所示的场景图为例,处理器核心1上运行的线程1和处理器核心2上运行的线程2实际上访问同一内存地址,若检测到线程1和线程2的线程等待状态满足预设条件,或,检测到线程1和线程2访问同一内存地址的次数满足预设访问次数,则可以确定线程1和线程2具有内存亲和性。

图3是本申请实施例提供的多个处理器核心之间实现核间通信的另一示意性场景图。如图3所示,8个处理器核心属于三个群组,三个群组的处理能力都不同,处理器核心1上运行的线程1和处理器核心3上运行的线程2实际上访问同一内存地址,若检测到线程1和线程2的线程等待状态满足预设条件,或,检测到线程1和线程2访问同一内存地址的次数满足预设访问次数,则可以确定线程1和线程2具有内存亲和性。同理,处理器核心4上运行的线程3和处理器核心5上运行的线程4实际上访问同一内存地址,若检测到线程3和线程4的线程等待状态满足预设条件,或,检测到线程3和线程4访问同一内存地址的次数满足预设访问次数,则可以确定线程3和线程4具有内存亲和性。

在S230中,处理器将该N个线程中的L个线程分别调度至该多个处理器核心中的L个处理器核心上运行,以进行核间通信,其中,该L个处理器核心的处理能力相同且共享该第一缓存,一个处理器核心用于运行一个线程,L大于1且小于或等于N。

在该步骤中,将具有内存亲和性的N个线程中的部分或全部线程调度在处理器中具有相同处理能力的处理器核心上,一个处理器核心运行一个线程,该具有相同能力的处理器核心通过共享第一缓存实现同档核心间的核间通信,尽可能避免不同档核心间的通信,总体上提高核间通信的时延。

L个线程是N个线程中的部分或全部线程。若L等于N,L个线程是N个线程中的全部线程,L个线程即为N个线程;若L小于N,L个线程是N个线程中的部分线程。

处理器中包括至少一个群组的处理器核心,该L个处理器核心可以是某个群组中的全部或部分处理器核心。

下面,举例说明如何将N个线程中的L个调度至L个处理器核心上。

在一示例中,L=N,处理器可以将N个线程都调度至N个处理器核心上,该N个处理器核心可以是一个群组中的部分或全部处理器核心。

假设,处理器包括6个处理器核心,分为两个群组,第一个群组包括2个处理器核心,第二个群组包括4个处理器核心。

例如,N=3,处理器可以将3个线程调度至第二个群组中的任意3个处理器核心中,该3个处理器核心是第二个群组中的部分处理器核心。

再例如,N=2,处理器可以将2个线程调度至第一个群组中的2个处理器核心上,在该示例中,该2个处理器核心是第一个群组中的全部处理器核心,或者,处理器也可以将2个线程调度至第二个群组中的任意2个处理器核心上,该2个处理器核心是第二个群组中的部分处理器核心。

在另一示例中,L小于N,处理器可以将L个线程都调度至L个处理器核心上,该L个处理器核心可以是一个群组中的部分或全部处理器核心。

假设,处理器包括4个处理器核心,分为两个群组,每个群组包括2个处理器核心,

例如,N=3,L=2,处理器可以将3个线程中的2个线程调度至任一个群组中的2个处理器核心上,该2个处理器核心是任一个群组的全部处理器核心。

再假设,处理器包括5个处理器核心,分为两个群组,第一个群组包括2个处理器核心,第二个群组包括3个处理器核心。

例如,N=4,两个群组都无法同时运行4个线程,处理器可以将其中的2个线程调度至任一个群组中的2个处理器核心,在该示例中,L=2;或者,处理器也可以将其中的3个线程调度至第二个群组中的3个处理器核心中,在该示例中,L=3。

再假设,处理器包括6个处理器核心,分为两个群组,第一个群组包括2个处理器核心,第二个群组包括4个处理器核心。

例如,N=3,虽然第二个群组中的3个处理器核心可以同时运行该3个线程,但是,由于其他因素,需要将该3个线程调度至第一个群组中,在此种情况下,处理器可以将3个线程中的2个线程调度至第一个群组的2个处理器核心上,在该示例中,L=2。

在L小于N的实施例中,可选地,处理器可以根据业务的优先级,将该L个线程分别调度至L个处理器核心上运行,其中,该L个线程对应的业务的优先级高于该N个线程中除该L个线程以外的线程对应的业务的优先级。

在该实施例中,通过业务的优先级调度线程,不仅减少通信时延,还可以保证优先级较高的业务的传输可靠性。

示例性地,业务的优先级可以从业务的时延、数据大小、可靠性等因素考虑。

在一示例中,视频业务的优先级大于音频业务的优先级,音频业务的优先级大于文本业务的优先级。

例如,N=3,L=2,3个线程分别对应视频业务、音频业务和文本业务,那么,基于业务的优先级,可以先将视频业务对应的线程和音频业务对应的线程调度至2个处理器核心上运行,后续,再将文本业务对应的线程重新调度至某个处理器核心上,或者,处理器可以将3个线程第一次调度至3个处理器核心上,将视频业务对应的线程和音频业务对应的线程调度至2个处理能力相同处理器核心上,将文本业务对应的线程调度至另一个处理器核心上,该另一个处理器核心与其余2个处理器核心实现不同档核心间的通信,该2个处理能力相同的处理器核心实现同档核心间的通信。

下面,结合图3和图4,对本申请实施例的核间通信的过程做一示例。

在图3中,处理器核心1和处理器核心3共享三级缓存,实现的是不同档核心的通信,处理器核心4和处理器核心5共享三级缓存,实现的也是不同档核心间的通信。这种情况下,核间通信的时延较长。

基于本申请实施例,通过获取的4个线程的线程信息,基于上述实施例的各种方式,确定线程1和线程2具有内存亲和性,线程3和线程4具有内存亲和性。

作为图3的实施例的对比,在图4中,基于本申请实施例的核间通信的方法,线程1和线程2可以被调度至处理能力相同的处理器核心1和处理器核心2上运行,线程3和线程4可以被调度至处理能力相同的处理器核心5和处理器核心6上。这样,处理器核心1与处理器核心2通过共享二级缓存实现同档核心间的通信,处理器核心5与处理器核心5也通过共享二级缓存实现同档核心间的通信。这样,相比于图3所示的不同档核心间的通信,图4所示的同档核心间的通信可以大大提高核间通信时延。

本申请实施例提供的核间通信的方法,确定具有内存亲和性的多个线程,以及,将该多个线程调度至处理能力相同的多个处理器核心上,该多个处理器核心可共享传输速率较高的第一缓存,这样,通过将具有内存亲和性的线程尽可能调度在共享第一缓存的同档处理器核心上运行,以尽可能实现同档核心之间的通信,避免不同档核心之间的通信,这样,在不提高成本的情况下,总体上可以最大程度地降低核间通信的时延,提高处理器性能。

本申请实施例还提供了一种核间通信的处理器300,如图5所示,处理器300包括处理模块310、处理器核心模块320和调度模块330,处理模块310和调度模块330都与处理器核心模块320连接,处理器核心模块320包括多个处理器核心。处理模块310和调度模块330可以以软件或硬件的形式设置在处理器300中。

处理模块310用于,获取正在运行的M个线程的线程信息,M为大于1的整数;

处理模块310还用于,根据所述线程信息,确定所述M个线程中的N个线程具有内存亲和性,所述内存亲和性用于表示所述N个线程访问同一内存地址的程度,N大于1且小于或等于M;

调度模块330用于,将所述N个线程中的L个线程分别调度至所述多个处理器核心中的L个处理器核心上运行,以进行核间通信,其中,所述L个处理器核心的处理能力相同且共享第一缓存,一个处理器核心用于运行一个线程,L大于1且小于或等于N。

可选地,处理模块310还用于,向所述多个处理器核心中的任一个处理器核心发送调度请求,所述调度请求用于指示所述N个线程具有内存亲和性;以及,

所述调度模块330具体用于,根据所述调度请求,将所述L个线程分别调度至所述L个处理器核心上运行。

示例性地,调度请求可以包括该N个线程,以及,每个线程属于哪种类型的线程,以便于调度模块330可以将该N个线程中的至少部分线程调度至合适的处理器核心上。

可选地,所述线程信息包括所述M个线程中每个线程的线程等待状态;以及,

所述处理模块310具体用于,在所述N个线程的线程等待状态满足预设条件的情况下,确定所述N个线程具有内存亲和性。

在该实施例中,处理器核心中设置有性能存储器,性能存储器可以记录当前运行的线程的线程等待状态,所以,处理模块310可以监控每个处理器核心中的性能存储器,以得到每个线程的线程等待状态。

可选地,所述每个线程的线程等待状态包括所述每个线程的线程等待次数;以及,

所述处理模块310具体用于,在所述N个线程的线程等待次数大于或等于预设等待次数的情况下,确定所述N个线程具有内存亲和性。

可选地,所述每个线程的线程等待状态包括所述每个线程的等待时长;以及,

所述处理模块310具体用于,在所述N个线程的线程等待时长大于或等于预设等待时长的情况下,确定所述N个线程具有内存亲和性。

可选地,所述线程信息包括所述M个线程中每个线程访问的内存地址;以及,

所述处理模块310具体用于,在所述N个线程访问同一内存地址的次数大于或等于预设访问次数的情况下,确定所述N个线程具有内存亲和性。

可选地,所述调度模块330具体用于,在L小于N的情况下,根据业务的优先级,将所述L个线程分别调度至所述L个处理器核心上运行,所述L个线程对应的业务的优先级高于所述N个线程中除所述L个线程以外的线程对应的业务的优先级。

可选地,所述第一缓存为二级缓存。

在本申请实施例中,处理模块310具体可用于执行方法200中的步骤210和步骤220,调度模块330具体可用于执行方法200中的步骤230,各模块执行上述相应步骤的具体过程在上述图2所示的方法200的实施例中已经详细说明,为了简洁,此处不再赘述。

本申请实施例还提供了一种电子设备,如图6所示,该电子设备400包括:一个或多个处理器410,一个或多个存储器420,该一个或多个存储器存储420存储有一个或多个计算机程序,该一个或多个计算机程序包括指令。当该指令被所述一个或多个处理器410运行时,使得电子设备执行上述实施例中的技术方案。其实现原理和技术效果与上述方法相关实施例类似,此处不再赘述。应理解,处理器410可以是上述实施例所示处理器300。

本申请实施例提供一种计算机程序产品,当所述计算机程序产品在电子设备运行时,使得电子设备执行上述实施例中的技术方案。其实现原理和技术效果与上述方法相关实施例类似,此处不再赘述。

本申请实施例提供一种可读存储介质,所述可读存储介质包含指令,当所述指令在电子设备运行时,使得所述电子设备执行上述实施例的技术方案。其实现原理和技术效果类似,此处不再赘述。

本申请实施例提供一种芯片,所述芯片包括至少一个处理器,当程序指令在所述至少一个处理器中执行时,使得所述至少一个处理器执行上文实施例所示的核间通信的方法。在一示例中,该芯片可以为系统级芯片(system on chip,soc)。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

相关技术
  • 核间通信的方法、处理器、核间通信系统及计算机可读存储介质
  • 众核处理器及其核间通信的方法、主核和从核
技术分类

06120114734855