一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据传输的方法和系统与流程

2022-03-02 01:58:32 来源:中国专利 TAG:


1.本技术涉及信息技术领域,尤其涉及一种数据传输的方法和系统。


背景技术:

2.消息传递接口标准(message-passing interface,mpi)是一个跨语言的通讯协议,支持点对点和集合通讯。mpi的目标是高性能,大规模性和可移植性,是当今高性能计算的主要通讯模型。通常情况下,在高性能计算(high-performance computing,hpc)的典型场景的应用中,mpi通信占比都比较高。例如,在allreduce集合通讯中,是将每个进程的数据先进行汇聚并归约然后再广播至每个进程,最终每个进程得到相同的一份归约后的数据。
3.在集合通信中,多个进程与一个进程通信,或一个进程与多个进程通信时,存在着通信效率低的问题。


技术实现要素:

4.本技术提供了一种实现数据传输的方法和系统,以提高数据传输时的效率。
5.第一方面,本技术提供一种数据传输的方法,所述方法包括:
6.第二通信子模块,将需要发送给第一通信子模块的数据,发送到硬件队列中,所述硬件队列是运行所述第一通信子模块的第一处理器中的硬件队列或运行所述第二通信子模块的第二处理器中的硬件队列;
7.所述第一通信子模块在所述硬件队列被写入数据的状态被触发时,从所述硬件队列获取所述数据;其中,所述第二通信子模块是多个第二通信子模块中的一个,所述多个第二通信子模块通过并行的方式与所述第一通信子模块通信;或所述第一通信子模块是多个第一通信子模块中的一个,所述多个第一通信子模块通过并行的方式与所述第二通信子模块通信。
8.上述方法中,所述第二子模块通过硬件队列向所述第一子模块发送数据,这样就不需要所述第二子模块再向所述第一子模块发送通知消息以通知所述第一子模块数据已经发送,降低了所述第二子模块与所述第一子模块之间通信的时延,提高了通信的效率。并且,由于采用硬件队列的形式接收数据,所述第一通信子模块只需判断硬件队列的状态是否达到预设的状态,不需要通过计数的方式确认是否接收到所述第二通信子模块发送的数据,减少了因计数带来的资源占用,能够在不改变通信正确性的前提下提升所述第二子模块与所述第一子模块之间通信的性能。
9.具体的,所述多个第二通信子模块是多个不同的第二通信子模块。所述多个不同的第二通信子模块通过并行的方式与所述第一通信子模块通信。在一种实现方式中,所述多个不同的第二通信子模块并行向所述第一通信子模块发送数据。在一种实现方式中,所述多个不同的第二通信子模块是集合通信中多个不同的子模块,所述第一通信子模块是集合通信中的根模块。
10.具体的,所述多个第一通信子模块是多个不同的第一通信子模块。所述多个第一通信子模块通过并行的方式与所述第二通信子模块通信。在一种实现方式中,所述多个不同的第一通信子模块并行接收所述第二通信子模块发送的数据。在一种实现方式中,所述多个不同的第一通信子模块是集合通信中多个不同的子模块,所述第二通信子模块是集合通信中的根模块。
11.可选的,所述第二通信子模块是多个不同第二通信子模块中的一个,所述第一通信子模块也是多个不同第一通信子模块中的一个,所述多个不同第二通信子模块与所述多个不同第一通信子模块通过并行的方式通信。在一种实现方式中,所述多个不同的第一通信子模块并行接收所述多个不同第二通信子模块发送的数据;或者所述多个不同的第一通信子模块并行向所述多个不同第二通信子模块发送数据。
12.可选的,所述硬件队列是硬件消息队列、无锁硬件队列或无锁硬件消息队列。
13.可选的,所述无锁硬件队列或所述无锁硬件消息队列,是指硬件队列不需要通过软件加锁的方式实现保序。
14.在一些可能的实现方式中,所述第一通信子模块通过所述第一处理器或所述第一处理器中的子单元运行;所述第二通信子模块通过所述第二处理器或所述第二处理器中的子单元运行。
15.可选的,所述第一通信子模块通过所述第一处理器运行,是指所述第一通信子模块通过所述第一处理器运行或所述第一处理器运行所述第一通信子模块的程序或指令,以实现所述第一通信子模块的功能。例如实现所述第一通信子模块在所述硬件队列被写入数据的状态被触发时从所述硬件队列获取所述数据的功能。可以理解,所述第一通信子模块通过所述第一处理器中的子单元运行、所述述第二通信子模块通过所述第二处理器或所述第二处理器中的子单元运行,与所述第一通信子模块通过所述第一处理器运行的实现方式类似。
16.可选的,所述硬件队列是所述第一处理器中运行所述第一通信子模块的子单元的硬件队列。所述硬件队列也可以是所述第二处理器中运行所述第二通信子模块的子单元的硬件队列。所述硬件队列还可以是所述第一处理器或所述第二处理器中的独立的硬件队列。
17.在一些可能的实现方式中,所述第一处理器是中央处理器(central processing unit,cpu)、cpu中的die、图形处理器(graphics processing unit,gpu)或gpu中的die中的任意一种,所述第二处理器是cpu、cpu中的die、gpu或gpu中的die中的任意一种,所述子单元是核;其中,一个die包括一个或多个核。
18.可选的,所述第一处理器或所述第二处理器还可以是与cpu、gpu类似的其它处理器。例如,所述第一处理器还可以是通用图形处理器(general-purpose gpu,gpgpu)、张量处理器(tensor processing unit,tpu)或数据处理器(data processing unit,dpu)等具有计算能力的处理器或芯片。
19.在一些可能的实现方式中,所述第一处理器通过总线从存储器中读取并执行所述第一通信子模块的指令以运行所述第一通信子模块;所述第二处理器通过所述总线从所述存储器中读取并执行所述第二通信子模块的指令以运行所述第二通信子模块。
20.可选的,所述存储器可是易失性存储器(volatile memory),例如随机存取存储器
(random access memory,ram),也可以包括非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,rom),快闪存储器,固态硬盘(solid-state drive,ssd)或机械硬盘(hard disk drive,hdd)。
21.在一些可能的实现方式中,所述第二通信子模块发送到所述硬件队列中的信息还包括与所述数据相关的管理信息;
22.相应的,所述第一通信子模块在所述硬件队列被写入数据的状态被触发时,还从所述硬件队列获取所述管理信息。
23.可选的,所述管理信息包括但不限于数据的报文头相关的信息或处理所述数据的任务需要的信息。例如所述管理信息可以是数据的大小、地址或数据相关的任务标识等信息。
24.所述第二通信子模块将数据的管理信息写入所述硬件队列,使得所述第一通信子模块能够根据所述管理信息对写入硬件队列中的数据进行处理,能够进一步提升所述第一通信子模块在接收处理数据时的效率。
25.在一些可能的实现方式中,所述第一通信子模块和所述第二通信子模块分别在不同的处理器中运行;或,
26.所述第一通信子模块和所述第二通信子模块分别在不同的die中运行。
27.对于分别运行在不同处理器中的第一通信子模块和第二通信子模块,或对于分别运行在不同die中的第一通信子模块和第二通信子模块,如果相互之间发送通知信息需要通过处理器间的互联总线或die间的互联总线,通信时延会较长。通过上述方法,分别运行在不同处理器中的第一通信子模块和第二通信子模块通过硬件队列传递数据,或分别运行在不同die中的第一通信子模块和第二通信子模块通过硬件队列传递数据,不需要发送通知消息,能够显著降低因发送通知消息造成的时延。
28.在一些可能的实现方式中,运行所述第一通信子模块的子单元的共享缓存,与运行所述第二通信子模块的子单元的共享缓存不同。
29.可选的,上述子单元可以是核。当运行所述第一通信子模块的子单元的共享缓存与运行所述第二通信子模块的子单元的共享缓存不同时,如果相互之间发送通知信息需要通过die间的互联总线,通信时延会较长。通过上述方法,所述第一通信子模块和所述第二通信子模块通过硬件队列传递数据,不需要发送通知消息,能够显著降低因发送通知消息造成的时延。
30.在一些可能的实现方式中,所述硬件队列被写入数据的状态被触发包括所述硬件队列的长度达到预设条件。
31.在一些可能的实现方式中,所述硬件队列的长度达到预设条件包括:所述硬件队列中数据包括所述第一通信子模块需要接收的所有数据,或所述硬件队列中数据的数据包括所述第一通信子模块需要接收的部分数据。
32.上述实现方式中,当所述硬件队列中数据的数据包括所述第一通信子模块需要接收的部分数据,第一通信子模块就从所述硬件队列中获取数据,能够进一步提升第一通信子模块获取数据的速度,降低获取数据所需要的时延。例如,当第一通信子模块需要获取3个数据时,所述第一通信子模块可以在所述硬件队列的长度为1时,就从所述硬件队列获取数据;当硬件队列被写入3个数据时,所述第一通信子模块已经获取到3个数据。这样能够减
少硬件队列被写入第1个数据到被写入第3个数据时的时延,进一步提升第一通信子模块获取数据的效率。
33.在一些可能的实现方式中,所述第一通信子模块与所述第二通信子模块之间通过mpi接口通信。
34.可选的,所述第一通信子模块与所述第二通信子模块是集合通信中的通信子模块。
35.在一些可能的实现方式中,当所述多个第二通信子模块通过并行的方式与所述第一通信子模块通信时,所述第一通信子模块对从所述硬件队列获取的所述多个第二通信子模块发送的数据进行处理,并将处理后的数据分别发送给所述多个第二通信子模块。
36.在一些可能的实现方式中,所述第一通信子模块对从所述硬件队列获取的所述多个第二通信子模块发送的数据进行处理包括:
37.所述第一通信子模块对从所述硬件队列获取的所述多个第二通信子模块发送的数据进行归约处理。
38.可选的,所述归约操作包括但不限于:求和、取最大值或交换。
39.在一些可能的实现方式中,所述第一通信子模块为进程或线程,所述第二通信子模块为进程或线程。
40.第二方面,本技术提供一种数据传输的系统,所述系统包括第一处理单元和第二处理单元;
41.所述第二处理单元,用于将发送给第一处理单元的数据发送到硬件队列中,所述硬件队列是所述第一处理单元所在的处理器中的硬件队列或所述第二处理单元所在的处理器中的硬件队列;
42.所述第一处理单元,用于在所述硬件队列被写入数据的状态被触发时,从所述硬件队列获取所述数据;其中,所述第二处理单元是多个第二处理单元中的一个,所述多个第二处理单元通过并行的方式与所述第一处理单元通信;或所述第一处理单元是多个第一处理单元中的一个,所述多个第一处理单元通过并行的方式与所述第二处理单元通信。
43.上述系统中,所述第二处理单元通过硬件队列向所述第一处理单元发送数据,这样就不需要所述第二处理单元再向所述第一处理单元发送通知消息以通知所述第一处理单元数据已经发送,降低了所述第二处理单元与所述第一处理单元之间通信的时延,提高了通信的效率。并且,由于采用硬件队列的形式接收数据,所述第一通信处理单元只需判断硬件队列的状态是否达到预设的状态,不需要通过计数的方式确认是否接收到所述第二处理单元发送的数据,减少了因计数带来的资源占用,能够在不改变通信正确性的前提下提升所述第二处理单元与所述第一处理单元之间通信的性能。
44.可选的,所述多个第二处理单元是多个不同的第二处理单元,所述多个第一处理单元是多个不同的第一处理单元。
45.可选的,所述硬件队列是硬件消息队列、无锁硬件队列或无锁硬件消息队列。
46.可选的,所述无锁硬件队列或所述无锁硬件消息队列,是指硬件队列不需要通过软件加锁的方式实现保序。
47.可选的,所述硬件队列是所述第一处理单元的硬件队列。所述硬件队列也可以是所述第二处理单元的硬件队列。所述硬件队列还可以是所述第一处理单元所在的处理器或
所述第二处理单元所在的处理器中的独立的硬件队列。
48.在一些可能的实现方式中,所述第一处理单元是cpu、cpu中的die、gpu、gpu中的die或die中的核中的任意一种;
49.所述第二处理单元是cpu、cpu中的die、gpu、gpu中的die或die中的核中的任意一种。
50.可选的,所述第一处理单元所在的处理器或所述第二处理单元所在的处理器还可以是与cpu、gpu类似的其它处理器。例如,所述第一处理单元还可以是gpgpu、tpu或dpu等具有计算能力的处理器或芯片。
51.在一些可能的实现方式中,所述第一处理单元通过运行第一通信子模块从所述硬件队列获取所述数据;
52.所述第二处理单元通过运行第二通信子模块将发送给第一处理单元的数据发送到所述硬件队列中。
53.可选的,所述多个第二处理单元运行多个不同的第二通信子模块,所述多个不同的第二通信子模块通过并行的方式与所述第一通信子模块通信。在一种实现方式中,所述多个不同的第二通信子模块并行向所述第一通信子模块发送数据。在一种实现方式中,所述多个不同的第二通信子模块是集合通信中多个不同的子模块,所述第一通信子模块是集合通信中的根模块。
54.可选的,所述多个第一处理单元运行多个不同的第一通信子模块,所述多个不同的第一通信子模块通过并行的方式与所述第二通信子模块通信。在一种实现方式中,所述多个不同的第一通信子模块并行接收所述第二通信子模块发送的数据。在一种实现方式中,所述多个不同的第一通信子模块是集合通信中多个不同的子模块,所述第二通信子模块是集合通信中的根模块。
55.可选的,多个不同的第一处理单元运行多个不同的第一通信子模块,多个不同的第二处理单元运行多个不同的第二通信子模块,所述多个不同的第一处理单元与所述多个不同第二处理单元通过并行的方式通信。在一种实现方式中,所述多个不同的第一处理单元并行接收所述多个不同第二处理单元发送的数据;或者所述多个不同的第一处理单元并行向所述多个不同第二处理单元发送数据。
56.在一些可能的实现方式中,所述系统还包括存储器和总线;
57.所述存储器,用于存储所述第一通信子模块和所述第二通信子模块;
58.所述第一处理单元,通过所述总线从所述存储器读取并执行所述第一通信子模块的指令以运行所述第一通信子模块;
59.所述第二处理单元通过所述总线从所述存储器读取并执行所述第二通信子模块的指令以运行所述第二通信子模块。
60.可选的,所述存储器可是易失性存储器,例如ram,也可以包括非易失性存储器,例如rom、快闪存储器、ssd或hdd。
61.在一些可能的实现方式中,所述第二处理单元,还用于将与所述数据相关的管理信息发送到所述硬件队列中;
62.所述第一处理单元,还用于在所述硬件队列被写入数据的状态被触发时,还从所述硬件队列获取所述管理信息。
63.可选的,所述管理信息包括但不限于数据的报文头相关的信息或处理所述数据的任务需要的信息。例如所述管理信息可以是数据的大小、地址或数据相关的任务标识等信息。
64.所述第二处理单元将数据的管理信息写入所述硬件队列,使得所述第一处理单元能够根据所述管理信息对写入硬件队列中的数据进行处理,能够进一步提升所述第一处理单元在接收处理数据时的效率。
65.在一些可能的实现方式中,所述第一处理单元与所述第二处理单元是不同的处理器;或,所述第一处理单元与所述第二处理单元是不同的die。
66.对于分别运行在不同处理器中的第一处理单元和第二处理单元,或对于分别运行在不同die中的第一处理单元和第二处理单元,如果相互之间发送通知信息需要通过处理器间的互联总线或die间的互联总线,通信时延会较长。上述系统中,分别运行在不同处理器中的第一处理单元和第二处理单元通过硬件队列传递数据,或分别运行在不同die中的第一处理单元和第二处理单元通过硬件队列传递数据,不需要发送通知消息,能够显著降低因发送通知消息造成的时延。
67.在一些可能的实现方式中,所述第一处理单元的共享缓存与所述第二处理单元的共享缓存不同。
68.当所述第一处理单元的共享缓存与所述第二处理单元的共享缓存不同时,如果相互之间发送通知信息需要通过处理器间或die间的互联总线,通信时延会较长。上述系统中,所述第一处理单元和所述第二处理单元通过硬件队列传递数据,不需要发送通知消息,能够显著降低因发送通知消息造成的时延。
69.在一些可能的实现方式中,所述硬件队列被写入数据的状态被触发包括所述硬件队列的长度达到预设条件。
70.在一些可能的实现方式中,所述硬件队列的长度达到预设条件包括:所述硬件队列中数据包括所述第一通信子模块需要接收的所有数据,或所述硬件队列中数据的数据包括所述第一通信子模块需要接收的部分数据。
71.上述实现方式中,当所述硬件队列中数据的数据包括所述第一通信子模块需要接收的部分数据,第一通信子模块就从所述硬件队列中获取数据,能够进一步提升第一通信子模块获取数据的速度,降低获取数据所需要的时延。例如,当第一通信子模块需要获取3个数据时,所述第一通信子模块可以在所述硬件队列的长度为1时,就从所述硬件队列获取数据;当硬件队列被写入3个数据时,所述第一通信子模块已经获取到3个数据。这样能够减少硬件队列被写入第1个数据到被写入第3个数据时的时延,进一步提升第一通信子模块获取数据的效率。
72.在一些可能的实现方式中,所述第一通信子模块与所述第二通信子模块之间通过消息传递接口标准mpi接口通信。
73.可选的,所述第一通信子模块与所述第二通信子模块是集合通信中的通信子模块。
74.在一些可能的实现方式中,当所述多个第二处理单元通过并行的方式与所述第一处理单元通信时,所述第一处理单元对从所述硬件队列获取的所述多个第二处理单元发送的数据进行处理,并将处理后的数据分别发送给所述多个第二处理单元。
75.在一些可能的实现方式中,所述第一处理单元对从所述硬件队列获取的所述多个第二处理单元发送的数据进行处理包括:
76.所述第一处理单元对从所述硬件队列获取的所述多个第二处理单元发送的数据进行归约处理。
77.可选的,所述归约操作包括但不限于:求和、取最大值或交换。
78.在一些可能的实现方式中,所述第一通信子模块为进程或线程,所述第二通信子模块为进程或线程。
79.第三方面,本技术实施例提供一种包含指令的计算机程序产品,当所述计算机程序产品在计算机设备上运行时,使得计算机设备执行上述第一方面任意一项所述的方法。
80.第四方面,本技术实施例提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,所述指令指示计算机设备执行上述第一方面任意一项所述的方法。
附图说明
81.下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
82.图1a为基于numa的多核体系结构的一种结构示意图;
83.图1b为基于numa结构的多核体系结构的另一种结构示意图;
84.图1c为子进程与根进程之间传输数据时的一种示意图;
85.图2为本技术实施例提供的一种集合通讯系统的结构示意图;
86.图3a为本技术实施例提供的子进程向根进程发送数据时die0和die1的内部结构及交互示意图;
87.图3b为本技术实施例提供的根进程向子进程发送数据时die0和die1的内部结构及交互示意图;
88.图4a为本技术实施例提供的通过硬件队列实现多对一通信的一种示意图;
89.图4b为本技术实施例提供的通过硬件队列实现一对多通信的一种示意图;
90.图5为本技术实施例提供的一种集合通信的方法的流程示意图;
91.图6为申请实施例提供的一种系统600的结构示意图。
具体实施方式
92.下面结合附图,对本发明的实施例进行描述。
93.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
94.本技术说明书和权利要求书中,术语“包括”和“具有”以及他们的任何变形,意图
在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。在本技术中出现的对步骤进行的命名或者编号,并不意味着必须按照命名或者编号所指示的时间/逻辑先后顺序执行方法流程中的步骤,已经命名或者编号的流程步骤可以根据要实现的技术目的变更执行次序,只要能达到相同或者相类似的技术效果即可。本技术中所出现的单元的划分,是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个单元可以结合成或集成在另一个系统中,或一些特征可以忽略,或不执行,另外,所显示的或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元之间的间接耦合或通信连接可以是电性或其他类似的形式,本技术中均不作限定。并且,作为分离部件说明的单元或子单元可以是也可以不是物理上的分离,可以是也可以不是物理单元,或者可以分布到多个电路单元中,可以根据实际的需要选择其中的部分或全部单元来实现本技术方案的目的。
95.应理解,在本技术说明书和权利要求书中对各种所述示例的描述中所使用的术语只是为了描述特定示例,而并非旨在进行限制。如在对各种所述示例的描述和所附权利要求书中所使用的那样,单数形式“一个(“a”,“an”)”和“该”旨在也包括复数形式,除非上下文另外明确地指示。
96.还应理解,本技术说明书和权利要求书中所使用的术语“和/或”是指并且涵盖相关联的所列出的项目中的一个或多个项目的任何和全部可能的组合。术语“和/或”,是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本技术中的字符“/”,一般表示前后关联对象是一种“或”的关系。
97.应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。
98.还应理解,术语“包括”(也称“includes”、“including”、“comprises”和/或“comprising”)当在本说明书中使用时指定存在所陈述的特征、整数、步骤、操作、元素、和/或部件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元素、部件、和/或其分组。
99.还应理解,术语“如果”可被解释为意指“当...时”(“when”或“upon”)或“响应于确定”或“响应于检测到”。类似地,根据上下文,短语“如果确定...”或“如果检测到[所陈述的条件或事件]”可被解释为意指“在确定...时”或“响应于确定...”或“在检测到[所陈述的条件或事件]时”或“响应于检测到[所陈述的条件或事件]”。
[0100]
应理解,说明书通篇中提到的“一个实施例”、“一实施例”、“一种可能的实现方式”意味着与实施例或实现方式有关的特定特征、结构或特性包括在本技术的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”、“一种可能的实现方式”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
[0101]
首选,对本技术中涉及的部分术语及相关技术进行解释说明,以方便理解:
[0102]
allreduce集合通讯:是一种多对多的通讯方式,将每个进程的数据先进行汇聚,并进行归约处理,然后将归约后的数据再广播至每个进程,最终每个进程得到相同的一份
links)和远端内存控制器(remote memory controller),因此处理器访问远端内存时具有较高的延迟和较低的传输带宽。
[0109]
图1a为基于numa的多核体系结构的一种结构示意图。图1a中包括两个die(die0和die1),每个die中包括两个核。每个核分别有独立的一级缓存(l1 cache)和二级缓存(l2 cache)。每个die中的两个核分别共享一个三级缓存(l3 cache),例如die0中的核0与核1共享一个三级缓存。每个die中的核都可以独立地访问内存,例如die1中的核2与核3都可以访问内存1。两个die中的核(例如die1中的核2与die0中的核0)之间通过互联总线实现通信,核2与核3也可以通过互联总线访问内存0。
[0110]
图1b为基于numa的多核体系结构的另一种结构示意图。图1b中包括两个die(die0和die1),每个die中包括两个核。每个核分别有独立的一级缓存(l1 cache)。每个die中的两个核分别共享一个二级缓存(l2 cache),例如die0中的核0与核1共享一个二级缓存。每个die中的核都可以独立地访问内存,例如die1中的核2与核3都可以访问内存1。两个die中的核(例如die1中的核2与die0中的核0)之间通过互联总线实现通信,核2与核3也可以通过互联总线访问内存0。
[0111]
在图1a或图1b所示的numa架构中,当运行在不同核上的进程之间通信时,存在着通信效率低的问题。示例性的,根进程通过核0运行,子进程1通过核1运行,子进程2通过核2运行,子进程3通过核3运行。当各个子进程(子进程1、子进程2和子进程3)向根进程发送数据时,实现的过程如下:
[0112]
步骤a1:每个子进程将各自需要发送给根进程的数据发送到共享内存中相互独立的地址对应的缓冲区域;
[0113]
步骤a2:每个子进程分别发送通知消息给根进程,以通知数据发送完成;
[0114]
步骤a3:根进程轮询是否收到全部子进程的通知消息;
[0115]
步骤a4:根进程在收到所有子进程的通知消息后,从相应的缓冲区域中获取每个子进程发送的数据并处理。
[0116]
上述过程可以如图1c上半部分所示,子进程1、子进程2和子进程3分别将载荷1、载荷2和载荷3写入共享内存区域相互独立的缓冲区域,并发送通知消息给根进程。子进程通知根进程的一种方式是将标识位counter的计数加1。根进程需要判断标识位counter的数值是否为3(以根进程需要接收3个子进程的数据为例),当数值达到3时确认收到所有子进程发送的数据,分别从相应的缓冲区域获取载荷1、载荷2和载荷3并进行处理。
[0117]
当根进程向子进程(子进程1、子进程2和子进程3)发送数据时,实现的过程为:
[0118]
步骤b1:根进程将需要发送的数据,通过广播的方式发送到一个缓冲区域中;
[0119]
步骤b2:根进程通知每个子进程数据已经发送;
[0120]
步骤b3:每个子进程轮询是否收到根进程发送的通知消息;
[0121]
步骤b4:每个子进程根据接收到的通知消息,从对应的地址空间中获取相应的数据。
[0122]
上述过程可以如图1c下半部分所示,根进程将对载荷1、载荷2和载荷3处理后的数据写入共享内存区域的一个缓冲区域,并发送通知消息给各个子进程。根进程通知子进程的一种方式是改变标识位flag_sh的值。各个子进程轮询标识位flag_sh的值,当标识位flag_sh发生变化时,分别从载荷0获取根进程处理后的数据。
[0123]
上述实现方式中,当子进程向根进程发送数据后,需要发送通知消息给根进程;当根进程向子进程发送数据时,也需要发送通知消息给子进程。发送通知消息会带来时延,即执行上述的步骤a2或步骤b2,都会造成时延,影响到进程之间通信的效率。并且,根进程确认是否收到子进程的数据需要轮询标志位counter,子进程确认是否收到根进程的消息需要轮询标志位flag_sh,轮询标志位会造成资源上的消耗和业务处理性能的降低。
[0124]
本技术实施例提供一种发送数据的方法,将需要发送的数据写入硬件队列中,写入硬件队列中的数据可以被相关的进程获取,这样就能够避免在发送数据后再发送通知消息所带来的时延的问题,也不需要轮询标志位确认是否收到数据,能够提升业务处理性能。
[0125]
下面结合具体的例子对本技术实施例提供的方法做进一步详细的说明。
[0126]
图2为本技术实施例提供的一种集合通讯系统的结构示意图。如图2所示,所述集合通讯系统包括l个处理器,每个处理器包括m个die,每个die包括n个核。其中,l、m和n分别为大于等于1的正整数。l个处理器分别通过总线与多个存储器连接,每个存储器中存储有程序和指令。所述l个处理器或每个处理器中的核,通过读取存储器中的程序或指令,以实现相应的功能。具体的。存储器中存储的程序中包括集合通信中进程的指令或线程的指令,不同处理器中的核通过读取相关的指令,以完成每个进程或线程要实现的功能或操作。
[0127]
图2中,处理器与存储器之间通过总线连接。所述总线可以是外设部件互连标准(peripheral component interconnect,pci)总线、快捷外设部件互连标准(peripheral component interconnect express,pcie)或扩展工业标准结构(extended industry standard architecture,eisa)总线等。
[0128]
存储器可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,ram)。存储器还可以包括非易失性存储器(non-volatile memory),也例如只读存储器(read-only memory,rom),快闪存储器,硬盘驱动器(hard disk drive,hdd)或固态硬盘驱动器(solid state drive,ssd)。其中,ram、rom称为内存,hdd、ssd称为外存。
[0129]
图2所示的集合通信系统中,每个核都有一个独立的硬件队列,用于存储通过该核运行的通信子模块(包括但不限于进程或线程)需要发送的数据或需要接收的数据。
[0130]
本技术实施例中的硬件队列,可以是硬件消息队列、无锁硬件队列或无锁硬件消息队列。下文以硬件队列描述本技术实施例提供的技术方案的实现方式。在具体实现时,也可以用硬件消息队列、无锁硬件队列或无锁硬件消息队列替代所述硬件队列。其中,“无锁硬件队列或无锁硬件消息队列”中的无锁,是指硬件队列不需要通过软件加锁的方式对写入硬件队列的数据保序。所述软件加锁,是指对于多个进程并发写入硬件队列的多个数据,通过软件以串行的方式写入硬件队列。数据以数据块为单位写入硬件队列,数据块又可称为payload。
[0131]
每个核可以访问其对应的硬件队列,也可以访问其它核对应的硬件队列。以处理器0中的die0所包括的核0为例,核0具有独立的硬件队列,核0可以直接访问其硬件队列中的数据。通过核0运行的通信子模块需要发送或接收的数据可以写入核0的硬件队列中。可选的,其它的核(例如核1,包括但不限于同一个die中的核1和不同die中的核1),也可以访问所述核0的硬件队列。
[0132]
下面以图2中处理器0中的die0的核与die1的核之间实现并行计算,以根进程通过核0运行,子进程1-子进程3分别通过核1-核3运行,子进程与根进程之间需要传输数据,进
程之间传递的数据通过硬件队列为例,对本技术实施例提供的方法做进一步的说明。
[0133]
图3a示出了子进程向根进程发送数据时die0和die1的内部结构及交互示意图,图3b示出了根进程向子进程发送数据时die0和die1的内部结构及交互示意图。
[0134]
如图3a所示,die0包括核0和核1,核0有其对应的硬件队列,核1也有其对应的硬件队列。核0和核1通过缓存一致性总线(cache coherence fabric)通信。缓存一致性总线可以是实现不同处理器或不同die之间通信的总线。示例性的,缓存一致性总线可以是超级通道互联(ultrapath interconnect,upi)总线。缓存一致性总线,具有将数据的变化同步给不同核的功能。例如,当核1修改了某一个数据时,为保证核0记录的数据能够及时被更新,缓存一致性总线能够将核1修改后的数据发送给核0,以保证数据的修改能够被同步给通过该缓存一致性总线连接的其它的核。
[0135]
需要说明的是,图3a只是为了描述的方便,只显示了die0和die1中的部分组件及其连接关系,这并不作为die0和die1的限制。例如,在具体实现时,每个die中还可以包括多个核,每个die中不同的核之间可以有不同的共享缓存,例如die0中有10个核,其中4个核对应共享缓存1,另外6个核对应共享缓存2,本技术实施例不限定具体结构的组成及其连接关系。
[0136]
图3b的内部结构与图3a类似,不再赘述。图3a和图3b中,子进程1通过核1运行,子进程2通过核2运行,子进程3通过核3运行,根进程0通过核0运行。
[0137]
本技术中,多个子进程通过多对一的并行计算的过程将数据发送给根进程,每个子进程将需要发送给根进程的数据写入硬件队列中。如图3a所示,其实现过程包括:
[0138]
步骤11:各个子进程将需要发送给根进程的数据写入硬件队列中。
[0139]
所述硬件队列可以是所述根进程的硬件队列,即运行根进程的核0的硬件队列。所述硬件队列也可以是每个子进程的硬件队列,即运行子进程的核的硬件队列。所述硬件队列还可以是一个独立的硬件队列,专门用于存储子进程1,2和3与根进程之间需要传递的数据。图3a是以各个子进程将数据写入核0的硬件队列为例进行说明。
[0140]
具体实现时,各个子进程通过对应的核将数据写入所述硬件队列中。具体的,子进程1通过核1,将子进程1需要发送给根进程的数据写入核0的硬件队列中。同样的,子进程2通过核2,子进程3通过核3,将数据写入核0的硬件队列中。
[0141]
上述子进程1通过核1,具体是指子进程1通过在核1上运行,或核1运行子进程1对应的程序或指令以完成子进程1发送数据相关的功能。其它进程通过核实现的方式与子进程1通过核1实现的方式类似,不再赘述。
[0142]
具体的,子进程1通过die0内的缓存一致性总线将需要发送给根进程0的数据写入所述硬件队列中;子进程2和3通过die1与die2间的缓存一致性总线将需要发送给根进程的数据写入所述硬件队列中。
[0143]
步骤12:根进程通过核0轮询其硬件队列的状态,当硬件队列的状态达到预设条件时,确认子进程发送数据完毕,从核0的硬件队列中获取各个子进程发送的数据并处理。
[0144]
可选的,根进程通过核0轮询其硬件队列的状态,可以是根进程通过核0轮询其硬件队列的长度是否达到预设的长度。假设数据块的长度为1,当根进程需要从3个子进程接收数据,且每次只处理3个数据块时,根进程通过核0判断其硬件队列的长度是否为3。当硬件队列的长度为3时,确认硬件队列的长度达到预设条件,根进程通过核0从硬件队列中获
取数据。在一种实现方式中,硬件队列中可能还包括其它的数据,根进程通过核0轮询其硬件队列的状态,可以是根进程通过核0判断其硬件队列的长度是否增加了3,当硬件队列的长度增加了3时,确认硬件队列的状态达到预设状态,根进程通过核0从其硬件队列中获取数据并处理。
[0145]
图3a所示的多个子进程向根进程发送数据的过程中,各个子进程只需将发送给根进程的数据发送到根进程的硬件队列中,子进程不需要再发送通知消息给根进程。这样,省去了上述多对一发送数据的实现方法中的步骤a2。并且,由于采用硬件队列的形式接收数据,根进程只需判断硬件队列的状态是否达到预设的状态,不需要通过计数的方式确认是否接收到所有子进程发送的数据,减少了因计数带来的资源占用,能够在不改变通信正确性的前提下提升进程之间通信的性能。
[0146]
在本技术实施例的另一种实现方式中,子进程还可以将数据的管理信息写入所述硬件队列。所述管理信息包括但不限于数据的报文头相关的信息或处理所述数据的任务需要的信息,例如可以是数据的大小、地址或数据相关的任务标识等信息。子进程将数据的管理信息写入所述硬件队列,使得根进程能够根据所述管理信息对写入硬件队列中的数据进行处理,能够进一步提升根进程在接收处理数据时的效率。
[0147]
在本技术实施例的另一种实现方式中,根进程也可以不用等到所述硬件队列的长度达到3时才从所述硬件队列中获取数据。例如,当所述硬件队列的长度为1时,就从所述硬件队列获取数据;当获取到3个数据块时,完成本次数据的接收。这样能够进一步提升根进程获取各个子进程发送数据的速度,降低获取数据所需要的时延。进一步的,如果根进程需要接收3个子进程的数据,根进程从硬件队列获取到2个数据块后,在预设时间未能从所述硬件队列获取到第3个数据块时,说明本次接收数据失败,根进程则抛弃已经从所述硬件队列中获取的2个数据块,重新发起接收各个子进程发送的数据的流程或触发错误的中断等操作。
[0148]
上述是以各个子进程将需要发送给根进程的数据发送到根进程的硬件队列的实现方式。当各个子进程将需要发送给根进程的数据发送到各个子进程的硬件队列时,即当所述硬件队列是各个子进程的硬件队列时,根进程可以通过轮询各个子进程的硬件队列的状态,并在各个子进程的硬件队列变化时,从各个子进程对应的硬件队列中获取相应的数据。同样能够降低进程间通信时延,并提升进程间通信的效率。
[0149]
在图1a所示的场景中,核0不与核2和核3共享三级缓存。因此,在执行上述步骤a2-a4时,核2向核0发送通知消息或核3向核0发送通知消息时,以及核0轮询核2或核3发送的通知消息时,因为要跨不同的共享缓存(三级缓存),其时延相比核0与核1之间发送通知消息、轮询通知消息时更大。在图1b所示的场景中,核0不与核2和核3共享二级缓存,也存在执行上述步骤a2-a4时,通信时延更大的问题。
[0150]
通过本技术实施例的上述方法,各个子进程将发送给根进程的数据写入硬件队列中,对于子进程2和子进程3分别与根进程0之间跨die通信时,即使子进程2、3与根进程0不共享缓存,进程2、3与根进程0通过硬件队列实现进程间数据的传递不会受到共享缓存的影响,能够显著降低因发送通知消息所造成的时延。同时,根进程轮询其硬件队列的状态的变化,相对于跨die的进程之间确认是否收到子进程通知消息的方式,能够显著降低根进程轮询等待的时间。
[0151]
根进程收到子进程发送的数据进行处理,并将处理后的数据再发送给每个子进程。根进程发送数据给每个子进程的过程如图3b所示:
[0152]
步骤21:根进程将处理后的数据写入硬件队列中。
[0153]
与步骤11类似,根进程可以将处理后的数据写入根进程的硬件队列,也可以写入每个子进程的硬件队列,还可以写入一个专门的硬件队列。图3b以根进程将处理后的数据写入每个子进程的硬件队列为例进行说明。
[0154]
步骤22:各个子进程轮询各自的硬件队列,当其硬件队列的状态达到预设状态时,从所述硬件队列获取数据。
[0155]
可选的,硬件队列的状态达到预设状态可以是硬件队列的长度的增加。示例性的,子进程2通过核2轮询其硬件队列,当核2的硬件队列的长度增加时,确认收到根进程发送的数据,并从其硬件队列中获取数据。在具体实现时,各个子进程也可以通过其它条件的触发从其硬件队列中获取数据,本技术实施例不限定具体的触发方式。
[0156]
在本技术实施例提供的另一种实现方式中,根进程也可以将数据的管理信息写入所述硬件队列,即写入每个子进程的硬件队列中。基于硬件队列中的管理信息,子进程在接收根进程数据时的效率同样能够得到提升。
[0157]
图3b所示的根进程向多个子进程发送数据的过程中,根进程只需要将发送的数据写入各个子进程对应的硬件队列中,根进程不需要再发送通知消息给各个子进程。各个子进程能够从其硬件队列中获取根进程发送的数据,即省去了上述一对多发送数据的方法中的步骤b2。同时,各个子进程轮询其硬件队列的状态的变化,相对于各个子进程轮询共享内存中的标识位flag-sh来讲速度更快,相应减少了子进程轮询等待的时间,由于不需要再消耗资源以轮询标志位,相应提升了业务处理的性能。
[0158]
在图1a所示的场景中,核0不与核2、核3共享三级缓存。因此,在执行步骤b2-b4时,核0向核2发送通知消息或核0向核3发送通知消息时,以及核2、核3轮询核0发送的通知消息时,由于要跨不同的三级共享缓存,时延更大。在图1b所示的场景中,核0不与核2、核3共享二级缓存,也存在执行步骤b2-b4时延更大的问题。
[0159]
通过本技术实施例的上述方法,根进程将处理后的数据发送到各个子进程硬件队列中。对于子进程2和子进程3分别与根进程0之间跨die通信时,进程间的数据传递不受共享缓存的影响,通过硬件队列可以降低因发送通知消息所造成的时延。同时,子进程2和子进程3轮询其硬件队列的状态的变化,相对于跨die的进程之间确认是否收到根进程发送的通知消息,可以进一步降低因子进程轮询等待的时间。
[0160]
可以理解,上述图3a和图3b所示的实现方式中,每个核对应的硬件队列中可能存储有多个数据块。例如,每个核可能会处理多个任务,每个任务会有对应的数据需要存储在硬件队列中。当子进程或根进程对应的硬件队列中写入数据时,各个进程判断硬件队列状态的变化可以基于硬件队列长度的增加的方式来判断,即当其硬件队列的长度增加时,确认硬件队列写入了新的数据且状态发生变化。并且,各个进程可以按照先进先出的方式从相应的队列中获取相应的数据,或对获取的数据进行处理。
[0161]
图3a和图3b所示的实现方式,是位于不同die中的核共享不同的缓存时,实现数据发送的方式。分别运行在不同处理器上的进程之间,也可以通过上述硬件队列传递数据的方式实现并行计算。同样的,也能够降低时延并提升通信性能。例如,上述图2中处理器0中
的核0作为根进程,处理器1中的核1运行子进程1,处理器2中的核2运行子进程2,处理器3中的核3运行子进程3。当这些进程之间需要进行多对一、一对多或多对多的并行计算通信的时候,也可以参照上述图3a或图3b的实现方式,即通过硬件队列的方式,实现跨处理器的核之间的通信。进一步的,由于跨处理器或跨die的核之间的通信需要通过处理器间的互联总线或die间的互联总线传递,通信的时延会更长。通过硬件队列传递数据不再需要发送通知消息,在降低时延方面也会更加明显。此外,运行在不同处理器中的核或运行在不同die中的核之间存在不同的共享缓存,通过这些核运行的进程之间发送的通知消息需要通过处理器间的互联总线或die间的互联总线传递,通信的时延会更长。通过硬件队列不再需要进程间发送通知消息,在降低进程之间发送通知消息所造成的时延方面也会更加明显。并且,通过硬件队列确认是否收到进程的通知消息来讲速度更快,也能够相应减少进程轮询等待的时间。并且,由于不需要通过计数的方式确认是否接收到所有子进程发送的数据,能够在不改变通信正确性的前提下提升跨处理器的进程之间通信的性能。
[0162]
上述图3a和图3b所示的过程是多个子进程与根进程之间通信,以及根进程与多个子进程之间通信为例描述的实现方式。本技术实施例提供的上述通过硬件队列实现进程间传递数据的方式,也可以应用于两个进程之间通信的场景。本技术实施例不限定实现通信的进程的数量,对于一对一、一对多、多对一或多对多的实现场景中,都可以通过硬件队列实现进程间数据的传递。
[0163]
需要说明的是,上述实施例是以cpu作为处理器,以cpu中的核作为执行进程任务的最小单位为例进行说明的。在具体实现时,也可以在gpu等处理器上实现。即上述实施例中的cpu,可以替换为gpu,当gpu运行的进程或线程之间需要传递数据时,也可以通过硬件队列的方式传输,同样能够达到提高效率、提升性能的目的。此外,对于其它的,与cpu、gpu类似的处理器,例如gpgpu、tpu或dpu等具有计算能力的处理器或芯片,只要是用来实现不同通信子模块之间的数据传输时,都可以采用上述实施例的实现方式来实现,不再赘述。
[0164]
下面通过具体的例子,对本技术实施例提供的传输数据的方法做进一步的说明。
[0165]
通常情况下,一个hpc应用,如天气预报软件运行的时候会启动很多个进程。当其中多个进程需要交换数据的时候,就需要使用mpi集合通信操作,集合通信的操作包括但不限于mpi_allreduce、mpi_bcast或mpi_reduce等操作。
[0166]
以mpi_allreduce为例,allreduce将集合通信拆解成多对一的归约操作(reduce)和一对多的广播操作(broadcast)。allreduce的具体过程分为扇入(fanin)和扇出(fanout)两个阶段,fanin是指多对一的汇聚阶段,fanout是指一对多的广播阶段。通过allreduce,每个进程之间都是一个点对点的通讯。
[0167]
图1c即为一种实现allreduce的示意图。如图1c所示,基于比较并交换(compare and swap,cas)原子操作实现allreduce的过程为:对于扇入阶段,根进程接收来自子进程的数据,并通过判断计数器(counter)是否等于子进程的数目以确定是否所有子进程的数据都已到达。其中,counter是利用cas的原子加操作实现。在扇出阶段,根进程将归约后的数据传送至共享内存区域,通过标志位“flag_sh”通知所有子进程消息已经到达。子进程通过轮询“flag_sh”标志位判断数据是否达到,当数据到达时,从共享内存区域拷贝数据。所述归约是指对于接收到的数据进行算数操作,包括但不限于求和、取最大值或交换等等,具体的操作类型是由业务逻辑确定的。
[0168]
图4a为本技术实施例提供的通过硬件队列实现allreduce中多对一通信的一种示意图。结合图3a所示的方法,如图4a所示,本技术实施例提供的方法在fanin阶段的实现过程包括:
[0169]
1,子进程1,2和3分别通过核1,2和3将需要发送给根进程的数据发送到根进程的硬件队列0中;
[0170]
2,根进程通过核0从其硬件队列0获取数据;
[0171]
3,根进程通过核0进行归约操作。
[0172]
图4a所示的实现方式中,以子进程3通过核3先将数据发送到根进程的硬件队列0中,子进程2通过核2再将数据发送到根进程的硬件队列0中,最后,子进程1通过核1将数据发送到根进程的硬件队列0中为例进行说明。子进程3发送的数据先进入硬件队列0,然后依次是子进程2发送的数据和子进程1发送的数据。按照硬件队列先进先出的原则,根进程0通过核0先读取子进程3发送到硬件队列0的数据,再读取子进程2发送到硬件队列0的数据,最后读取子进程0发送到硬件队列1的数据。
[0173]
相对于图1c所示的实现方式,本技术实施例通过硬件队列来实现多个子进程通过多对一的并行计算,每个子进程将各自的数据发送到根进程的硬件队列,根进程通过硬件队列的状态变化(例如硬件队列长度的变化)判断数据是否到达。各个子进程不需要发送通知消息,降低了子进程与根进程之间的通信时延。尤其在与根进程与子进程分别位于不同的die中,或根进程的共享缓存与子进程的共享缓存不同时,由于不需要发送通知消息给根进程,能够显著降低因发送通知消息所造成的时延。并且,根进程不需要counter计数器进行计数以判断计数是否达到所有子进程的数量,避免因计数所带来的资源占用以及时间消耗,通信性能相应得到提升。
[0174]
在另一种可能的实现方式中,上述子进程1,2,3可以将待发送的数据发送到每个子进程的硬件队列中,由根进程轮询各个子进程的硬件队列,并获取相应的数据。或者,子进程1,2,3也可以将待发送的数据发送到一个独立的硬件队列中,由根进程从该独立的硬件队列中获取相应的数据。
[0175]
图4b为本技术实施例提供的通过硬件队列实现allreduce中一对多通信的一种示意图。结合图3b所示的方法,如图4b所示,本技术实施例提供的方法在fanout阶段,实现一对多通信过程包括:
[0176]
1,根进程通过核0将需要发送给子进程的数据发送至每个子进程的硬件队列;
[0177]
2,子进程1,2和3分别通过核1,2和3检查各自的硬件队列长度;
[0178]
3,各个子进程1,2和3分别通过核1,2和3接收根进程发送的数据。
[0179]
图4b所示的实现方式是以各个子进程的硬件队列只被写入根进程发送的数据为例,显示根进程将数据发送到各个子进程的硬件队列,各个子进程从各自的硬件队列获取根进程发送的数据的过程。例如,根进程通过核0将数据发送到子进程1的硬件队列1中,由于硬件队列1中只有根进程通过核0发送的数据,子进程1通过核1直接从硬件队列1中获取根进程发送的数据。可以理解,当硬件队列1中还有其它数据时,子进程1按照先进先出的方式获取硬件队列1中的数据,即子进程1也可以按照先进先出的方式从硬件队列1中获取根进程发送的数据。
[0180]
相对于图1c所示的实现方式,本技术实施例通过硬件队列来实现根进程向多个子
进程发送数据的一对多并行计算,根进程将数据发送至每个子进程的硬件队列,各个子进程通过硬件队列的状态变化(例如硬件队列长度的变化)判断数据是否到达。根进程不需要通过标志位“flag_sh”通知所有子进程消息已经到达,能够降低通信的时延。尤其是根进程与子进程分别位于不同的die中,或根进程的共享缓存与子进程的共享缓存不同时,由于不需要发送通知消息给子进程,能够显著降低因发送通知消息所造成的时延。并且各个子进程不需要轮询标志位“flag_sh”的状态以判断是否接收到根进程发送的数据,避免因轮询状态位所带来的资源占用以及时间消耗,通信性能相应得到提高。
[0181]
在另一种可能的实现方式中,上述根进程可以通过核0将待发送的数据写入根进程的硬件队列中,各个子进程1,2和3分别通过核1,2和3轮询根进程的硬件队列,并获取相应的数据。或者,根进程也可以通过核0将待发送的数据写入一个独立的硬件队列中,各个子进程1,2和3分别通过核1,2和3轮询该独立的硬件队列,并获取相应的数据。
[0182]
需要说明的是,上述是以硬件队列作为进程间传递数据的方式。在具体实现时,也可以通过每个核对应的寄存器实现进程间数据的传递。核向其对应的寄存器或硬件队列中写入数据或读取数据,读写效率相同或基本相同。通常情况下,寄存器的存储空间相对较小,硬件队列的存储空间相对较大,通过硬件队列更容易实现本技术实施例所提供的技术方案。
[0183]
图5为本技术实施例提供的一种集合通信的方法的流程示意图。如图5所示,所述方法包括:
[0184]
步骤500:第二通信子模块,将需要发送给第一通信子模块的数据,发送到硬件队列中,所述硬件队列是运行所述第一通信子模块的第一处理器中的硬件队列或运行所述第二通信子模块的第二处理器中的硬件队列;
[0185]
步骤502:所述第一通信子模块在所述硬件队列被写入数据的状态被触发时,从所述硬件队列获取所述数据;其中,所述第二通信子模块是多个第二通信子模块中的一个,所述多个第二通信子模块通过并行的方式与所述第一通信子模块通信;或所述第一通信子模块是多个第一通信子模块中的一个,所述多个第一通信子模块通过并行的方式与所述第二通信子模块通信。
[0186]
图5所示的方法可以参考上述图3a或图3b所示的实现方式来实现。例如,在图3a所示的实现方式中,所述第一通信子模块可以是根进程,所述第二通信子模块可以是子进程,所述第一处理器是die0,所述第二处理器是die1;在图3b所示的实现方式中,所述第一通信子模块可以是子进程,所述第二通信子模块可以是根进程,所述第一处理器是die0,所述第二处理器是die1。
[0187]
图5所示的方法能够通过硬件队列实现不同子模块之间的数据的传递,能够降低先发送数据后发送通知消息时所带来的时延,并能够避免轮询通知消息,提升了业务的性能。尤其是根进程与子进程分别位于不同的die中,或根进程的共享缓存与子进程的共享缓存不同时,因发送通知消息、轮询通知消息所造成的时延是成倍增加的,通过图5所示的方法能够显著降低因发送通知消息所造成的时延。
[0188]
图6为申请实施例提供的一种系统600的结构示意图,所述系统600包括第一处理单元601和第二处理单元602;
[0189]
所述第二处理单元602,用于将发送给第一处理单元601的数据发送到硬件队列
中,所述硬件队列是所述第一处理单元601所在的处理器中的硬件队列或所述第二处理单元602所在的处理器中的硬件队列;
[0190]
所述第一处理单元601,用于在所述硬件队列被写入数据的状态被触发时,从所述硬件队列获取所述数据;其中,所述第二处理单元是多个第二处理单元中的一个,所述多个第二处理单元通过并行的方式与所述第一处理单元通信;或所述第一处理单元是多个第一处理单元中的一个,所述多个第一处理单元通过并行的方式与所述第二处理单元通信。
[0191]
图6所示的系统可以参考上述图3a或图3b所示的实现方式来实现。例如,图3a所示的系统即为系统600的一种实现方式,所述第一处理单元601可以是die0中的核0,所述第二处理单元602可以是die0中的核1,也可以是die1中的核2或核3;图3b所示的系统也可以为系统600的一种实现方式,第一处理单元601可以是die0中的核1,也可以是die1中的核2或核3,所述第二处理单元602可以是die0中的核0。
[0192]
图6所示的系统,可以是同一个处理器中不同die之间实现数据传输时的实现方案,例如一个计算机设备中的一个cpu中不同核之间传输数据时的实现方案。也可以是不同处理器之间实现数据传输时的实现方案,例如一个计算机设备中的不同cpu间传输数据时的实现方案。还可以是其它位于不同计算机设备中的核之间实现数据传输时的实现方案。
[0193]
通过图6所示的系统通过硬件队列实现数据的传递,能够降低先发送数据后发送通知消息时所带来的时延,并能够避免发送通知消息以及轮询通知消息,提升了业务的性能。尤其是根进程与子进程分别位于不同的die中,或根进程的共享缓存与子进程的共享缓存不同时,通过图6所示的系统能够显著降低因发送通知消息所造成的时延。
[0194]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0195]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
[0196]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
[0197]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0198]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何
熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献