CN116028238A - 计算引擎通信方法及装置 - Google Patents
计算引擎通信方法及装置 Download PDFInfo
- Publication number
- CN116028238A CN116028238A CN202211347106.XA CN202211347106A CN116028238A CN 116028238 A CN116028238 A CN 116028238A CN 202211347106 A CN202211347106 A CN 202211347106A CN 116028238 A CN116028238 A CN 116028238A
- Authority
- CN
- China
- Prior art keywords
- communication
- equipment
- computing
- host
- address
- 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.)
- Pending
Links
- 230000006854 communication Effects 0.000 title claims abstract description 244
- 238000004891 communication Methods 0.000 title claims abstract description 243
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000004364 calculation method Methods 0.000 claims abstract description 147
- 230000006870 function Effects 0.000 claims abstract description 130
- 230000005540 biological transmission Effects 0.000 claims description 23
- 238000004458 analytical method Methods 0.000 claims description 20
- 238000012790 confirmation Methods 0.000 claims description 13
- 230000001133 acceleration Effects 0.000 description 11
- 238000012545 processing Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 230000005971 DNA damage repair Effects 0.000 description 2
- 102000002706 Discoidin Domain Receptors Human genes 0.000 description 2
- 108010043648 Discoidin Domain Receptors Proteins 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001152 differential interference contrast microscopy Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- 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/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本申请公开了计算引擎通信方法及装置,应用于计算引擎通信技术领域,包括:获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数;利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端,以实现所述设备端计算引擎与所述目标接收端中计算引擎之间的通信。能够避免主机端计算引擎分配通信任务,释放主机端计算引擎的算力,并且,适应于同一节点内不同计算引擎以及不同节点之间计算引擎的通信场景。
Description
技术领域
本申请涉及计算引擎通信技术领域,特别涉及计算引擎通信方法及装置。
背景技术
随着传统的摩尔定律的发展,算力的发展经历了从提升单个处理器的主频、提升单个芯片内处理器的数量,再到提升单个算力网络内芯片的数量(例如大规模的云计算网络)。目前芯片制程所带来的红利几乎消失殆尽,依靠堆砌芯片数量也遇到了算力不匹配、能耗居高不下等一系列问题。针对目前多样化、巨型化的计算任务,在同一套***内部署多种不同架构的计算引擎例如,CPU(即Central Processing Unit,中央处理器)、GPU(即Graphics Processing Unit,图像处理单元)、FPGA(即Field Programmable Gate Array,现场可编程与门阵列)等,根据各种不同架构的计算引擎各自的特性,或是服务于同一个任务的不同环节,或是服务于不同的任务,实现算力的最大化利用,已经成为了业界的共识和发展趋势。
由于传统的计算机体系结构***中网络软件协议栈和网络硬件设备的历史遗留问题的存在,在一个具有多元异构多计算引擎的***中,各类计算节点的引擎芯片、PCIE(即Peripheral Component Interconnect Express,传输控制协议)或局部互联总线、网卡之间彼此独立,相互通信效率和计算效能变得十分低效,并且自由度和灵活性不高,使得目前大型算力网络,不仅仅有计算设备算力性能的问题,还要面对不同架构的计算引擎之间低效通信所变相导致的瓶颈。现有的不同计算引擎之间的通信方案,通常分为节点内部的通信方案以及不同节点间的通信方案,并且,通信任务通常需要主机端的计算引擎,主机端的计算仍负担较多工作。
发明内容
有鉴于此,本申请的目的在于提供计算引擎通信方法及装置,能够避免主机端计算引擎分配通信任务,释放主机端计算引擎的算力,并且,适应于同一节点内不同计算引擎以及不同节点之间计算引擎的通信场景。其具体方案如下:
第一方面,本申请公开了一种计算引擎通信方法,应用于第一设备端,包括:
获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数;
利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端,以实现所述设备端计算引擎与所述目标接收端中计算引擎之间的通信。
可选的,所述获取主机端计算引擎发送的设备端程序数据,包括:
通过RDMA模块获取主机端计算引擎发送的设备端程序数据;其中,所述RDMA模块与所述设备端计算引擎集成在同一芯片中;
相应的,所述基于所述通信函数将所述计算结果发送至目标接收端,包括:基于所述通信函数,并通过所述RDMA模块将所述计算结果发送至目标接收端。
可选的,所述通过RDMA模块获取主机端计算引擎发送的设备端程序数据,包括:
通过RDMA模块获取主机端计算引擎发送的目标数据、参数信息以及设备端程序数据;其中,所述参数信息包括所述目标数据写入所述第一设备端的内存的首地址以及长度信息;
基于所述参数信息将所述目标数据写入所述内存;
相应的,所述利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对所述目标数据进行计算以得到计算结果,包括:
利用设备端计算引擎执行所述设备端程序数据,基于所述参数信息从所述内存中读取所述目标数据,并基于所述计算任务函数对所述目标数据进行计算以得到计算结果。
可选的,所述基于所述通信函数,并通过所述RDMA模块将所述计算结果发送至目标接收端,包括:
基于所述通信函数将所述目标接收端的标识信息写入通信表,并通知表解析引擎;
通过所述表解析引擎从所述通信表中获取所述目标接收端的标识信息,并获取所述标识信息对应的IP地址;
通过所述RDMA模块基于所述IP地址将所述计算结果发送至目标接收端。
可选的,还包括:
将所述计算结果写入内存中的数据区域,并将写入地址、数据长度写入所述通信表;
通过所述表解析引擎从所述通信表中获取所述写入地址、所述数据长度,并将所述写入地址、所述数据长度以及所述IP地址写入所述RDMA模块中的存储器。
可选的,所述通过所述RDMA模块基于所述IP地址将所述计算结果发送至目标接收端,包括:
通过所述RDMA模块检测所述存储器,并在所述存储器不为空时,从所述存储器中读取出所述写入地址、所述数据长度以及所述IP地址,根据所述写入地址和所述数据长度从所述内存中读取所述计算结果,基于所述IP地址将所述计算结果发送至目标接收端。
可选的,所述获取所述标识信息对应的IP地址,包括:
从IP标识对照表中获取所述标识信息对应的IP地址。
可选的,还包括:
通过所述RDMA模块,向主机端发送发现消息,以便所述主机端基于各设备端的发现消息为所述各设备端分别分配IP地址以及标识信息;
获取所述主机端发送的所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息;
将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息保存至所述IP标识对照表。
可选的,所述通过所述RDMA模块,向主机端发送发现消息之后,还包括:
通过所述RDMA模块,获取所述主机端为所述第一设备端分配的IP地址以及标识信息,并向所述主机端回复确认信息,以便所述主机端在收到所述各设备端回复的确认信息后,保存所述各设备端的IP地址以及标识信息,并将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息发送给所述各设备端;
其中,确认信息携带所述主机端为相应设备端分配的IP地址以及标识信息。
可选的,所述目标接收端为主机端或第二设备端;
若所述目标接收端为多个第二设备端,则所述基于所述通信函数将所述目标接收端的标识信息写入通信表,包括:
基于所述通信函数将多个所述第二设备端的标识信息均写入通信表。
可选的,若所述目标接收端为第二设备端,所述第二设备端通过自身的RDMA模块接收所述计算结果,并将所述计算结果保存在自身的内存中。
可选的,在基于所述通信函数将所述计算结果发送至第二设备端之后,还包括:
向所述第二设备端发送传输结束信息,以便所述第二设备端的RDMA模块在接收到所述传输结束信息后,将所述计算结果在内存中的首地址和长度信息返回给所述第二设备端的计算引擎。
可选的,还包括:
在执行所述设备端程序数据的过程中,若执行到目标程序指令,则等待接收第三设备端的数据,并在接收到第三设备端的数据之后,继续执行后续操作。
第二方面,本申请公开了一种计算引擎通信方法,应用于主机端,包括:
通过主机端计算引擎向设备端发送设备端程序数据,以便所述设备端的设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端;
其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数。
第三方面,本申请公开了一种计算引擎通信装置,应用于第一设备端,包括:
通信引擎,用于获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数;
设备端计算引擎,用于执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端。
可见,本申请先获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数,之后利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端,以实现所述设备端计算引擎与所述目标接收端中计算引擎之间的通信。也即,本申请中,基于通信需求创建通信函数,并对包含通信函数以及计算任务函数的程序代码编译,得到设备端程序数据,设备端获取主机端计算引擎发送的设备端程序代码之后,设备端计算引擎在执行设备端程序代码的过程中完成计算任务和通信任务,将计算结果发送至目标接收端,这样实现了主机端中计算引擎与设备端中计算引擎、以及设备端中计算引擎与目标接收端中计算引擎的通信,无需主机算计算引擎分配通信任务,释放主机端计算引擎的算力,并且,适应于同一节点内不同计算引擎以及不同节点之间计算引擎的通信场景。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种计算引擎通信方法流程图;
图2为本申请公开的一种具体的分布式通信引擎架构示意图;
图3为本申请公开的一种计算引擎通信装置结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
由于传统的计算机体系结构***中网络软件协议栈和网络硬件设备的历史遗留问题的存在,在一个具有多元异构多计算引擎的***中,各类计算节点的引擎芯片、PCIE或局部互联总线、网卡之间彼此独立,相互通信效率和计算效能变得十分低效,并且自由度和灵活性不高,使得目前大型算力网络,不仅仅有计算设备算力性能的问题,还要面对不同架构的计算引擎之间低效通信所变相导致的瓶颈。以常见的传统的CPU和GPU之间的通信为例(其它各种xPU类似),在单个设备内部,当有数据需要在应用内存空间和GPU内存空间传输时,需要跨越***内核空间和PCIE总线,即需要多复制一次,这一般是依靠CPU来完成的。当有数据需要在设备A和设备B的应用内存空间传递时,数据首先需要从设备A的应用内存空间拷贝至设备A的***内核空间,然后从设备A的***内核空间发送至设备A网络设备空间,设备B的接收到数据之后,需要将其从设备B的网络设备空间发送至设备B的***内核空间,然后从设备B的***内核空间拷贝至设备B的应用内存空间。当有数据需要在设备A的GPU内存空间和设备B的GPU内存空间传递时,数据至少首先需要从设备A的GPU内存空间拷贝至设备A的***内核空间,然后从设备A的***内核空间发送至设备A网络设备空间,设备B的接收到数据之后,需要将其从设备B的网络设备空间发送至设备B的***内核空间,然后从设备B的***内核空间拷贝至设备B的GPU内存空间。普通情况一般需要4次数据传输和复制。可以看出,传统计算网络的通信架构,是造成异构算力网络低效和低速的重要因素。可见,不传统方案中,不同架构的计算引擎之间,重复且不必要的数据拷贝过程导致了低效问题,并且,虽然单个设备中具有多个计算引擎,但是数据的传输控制完全由CPU主导,GPU只是作为该***的一个协处理器分担了部分计算工作。解决上述问题的关键点有两个,一是要尽可能的减少不必要的跨芯片拷贝数据的次数;二是要充分发挥各个计算引擎的在传输数据时的主观能动性,每个计算引擎都不再是协处理器,每个计算引擎都能自由的与其他任何类型的计算引擎进行自主通信,释放CPU的算力以服务于真正的核心业务。
目前,为了解决上述问题,出现了一些技术方案:
例如对于单节点内部的GPU与CPU之间的通信,NVIDIA从2010年开始推出了GPUDirect Shared Memory(即直接共享内存)技术,逐渐发展了GPU Direct P2P(Peer-to-Peer,点对点)、NVLink,以及最新的NVSwitch技术。其中,NVLink是NVIDIA为解决单节点GPU与GPU之间传输数据时受PCIe传输速率限制而开发的一套总线协议,基于该总线协议,在物理连接也开发了对应的硬件总线实现;但是由于该方法主要是为了解决单节点内部GPU之间单对单的高速互联的问题,高度依靠电路定制,对于跨节点的GPU之间的通信无能为力;而从NVLink的实现方式上可知,其数据传输依赖于GPU与GPU之间的直接电路物理链路绑定,完全不能远距离通信。而NVSwitch是NVIDIA设计的一块独立的通信芯片,它将多个NVLink加以整合,在单个节点内以NVLink的较高速度实现单节点内的多对多的GPU通信,从而进一步提高互联性能;如12个NVSwitch连接16个GPU,实现这些GPU之间的0跳任意互联。NVSwitch是基于NVLink的专用数据芯片,因此NVLink所具有的局限性在NVSwitch上仍然存在,节点机器完全定制,且节点间近距离连接,无法分布式部署。
对于不同节点之间的GPU的通信,目前的解决方案基本上都是通过RDMA网络实现,通过RDMA网络,硬件网卡可以直接在用户空间读取所需要发送的数据,无需经过***内核空间,减少数据的拷贝次数,因此可以极大的降低网络延时和CPU在数据拷贝上的开销,提高传输速率。目前基于RDMA(即Remote Direct Memory Access,远程直接内存访问)的多节点GPU通信的解决方案,2017年NVIDIA发布了最新的GPU Direct RDMA Async(即GPU直接RDMA异步)技术,允许GPU和第三方设备之间直接同步,而CPU不参与GPU应用程序的关键通信路径,数据直接从GPU内存向RDMA NIC(即Network Interface Controller,网络接口控制器)发送,对端的RDMA NIC接收后直接传输到GPU内存,减少了CPU的参与和数据拷贝的次数。其工作过程如下:1)CPU通过NVIDIA公司的CUDA API(即Application ProgrammingInterface,应用程序接口)派发计算和通信任务给GPU;2)GPU完成计算任务后,自动执行通信任务直接向RDMA NIC触发通信操作;3)RDMA NIC通过RDMA网络,直接从GPU的内存或者主机内存中拷贝数据到RDMA NIC中;4)RDMA NIC发送数据;从该技术的过程中可知,除了开始主机分发计算和通信任务的阶段,其余过程均不需要主机参与。在第3步发送数据的过程中,数据仅被拷贝了一次。但是该方案存在的问题是,GPU和RDMA NIC作为两个独立的设备,GPU需要通过PCIe来触发RDMA NIC的数据搬移,PCIe作为一种物理链路,使得GPU和RDMANIC存在着一定的物理距离限制和绑定,数据传输虽然减少了暂存次数,但物理PCIE跨节点信号传输路径没有变化。并且该技术方案作为商业公司闭源的解决方案,难以根据实际情况再次修改。
除了GPU之外,另一个常见的异构计算引擎为FPGA,对基于FPGA的计算引擎,Intel开发了IKL(即Inter-Kernel Links,内核间链接)以实现节点内或节点间FPGA之间的异构通信。其中User Kernel是用户通过OpenCL语言编写的实现具体计算任务的模块,编写UserKernel时主要使用以下两个主要函数:write_channel_intel(channel_id,data)和read_channle_intel(channel_id)来实现不同FPGA之间的通信。这两个函数会将需要发送的数据从User Kernel通过IKL I/O Channel(即通道)发送给Inter-Kernel Logic RTL IP,该IP会将数据打包,最终转发给Ethernet Switch,即网卡。从IKL实现FPGA间的通信的方式可知,其主要有以下几个缺点:1)在OpenCL中用于发送和接收数据的write_channel_intel和read_channle_intel函数,是基于channel_id进行的,配置繁琐且每个通道仅支持固定的点对点的通信;2)为了实现可靠的通信,Inter-Kernel Logic RTL IP需要实现类似于TCP/IP协议栈的超时重传、分片、丢包重传等复杂的控制功能,占用的大量的FPGA资源,且占用的资源随着channel_id的数量增加而增加,目前根据不同的FPGA板卡型号,最大支持的channel_id的数量为48~256个;该通信方式仅支持FPGA与FPGA之间的网络通信,并不支持FPGA与主机端之间的网络通信,且FPGA与FPGA之间通信时,仅支持交换FPGA板卡上的数据,并不能交换主机端内存中的数据;
基于上述内容,可以发现目前的主要技术方案主要有如下缺点:1)对于单节点内部的计算引擎之间的通信,均是通过传统的PCIe或者类NVLink形式的具有物理链路距离限制的方式实现的,不能大规模的分布式部署;2)对于节点间的计算引擎之间的通信,即使是GPU Direct RDMA Async技术也需要主机在第一步的时候分配通信任务,此外也未能完全解耦GPU与RDMA NIC之间的物理链路,仍需要通过PCIe链路触发数据搬运,在部署此类GPU时,需要占用较大的物理空间和更高的能耗;而基于FPGA的Intel IKL则是更倾向于实现一种同种设备之间点对点传输,且由于channle_id的数量限制,导致某个设备交换数据的对象数量有着严重的限制,传输局限且效率极差,此外,该方案不支持节点内的NIC直接读取本节点内主机端端的内存发送给对端;3)无论是基于GPU基于FPGA计算引擎的解决方案,绝大多数都是闭源的、特化的解决方案,很难对其进行修改,缺乏一定的泛用性。
参见图1所示,本申请实施例公开了一种计算引擎通信方法,应用于第一设备端,包括:
步骤S11:获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数。
其中,主机端计算引擎为CPU,并且,本申请实施例中,使用OpenCL语言描述的具体计算任务,得到计算任务函数,此外,本申请实施例中设备端程序数据与普通的设备端OpenCL程序的区别在于,集成了自定义的通信函数库,该自定义的通信函数库中的函数,在编写代码时,根据任务的通信需求,添加对应的通信函数到cl文件的OpenCL代码中,与cl文件一起编译,形成了最终的设备端的二进制代码,也即设备端程序数据。
进一步的,本申请实施例可以通过RDMA模块获取主机端计算引擎发送的设备端程序数据;其中,所述RDMA模块与设备端计算引擎集成在同一芯片中。这样,通过将负责RDMA网络通信的模块与计算引擎集成至一个芯片中,进一步加速了计算引擎与通信引擎之间的联系,消除了现有技术中物理链路距离限制的问题,方便大规模的分布式部署。设备端计算引擎为xPU(即通用计算引擎),各种计算引擎,包括GPU、NPU(即Neural-networkProcessing Unit,嵌入式神经网络处理器)、DPU(即Data Processing Unit,中央处理器分散处理单元)、IPU(即Infrastructure Processing Unit,基础设施处理器)的统称。本申请实施例可以在同一FPGA芯片中集成RDMA模块以及计算引擎。
并且,在一种实施方式中,可以通过RDMA模块获取主机端计算引擎发送的目标数据、参数信息以及设备端程序数据;其中,所述参数信息包括所述目标数据写入所述第一设备端的内存的首地址以及长度信息;基于所述参数信息将所述目标数据写入所述内存。其中,内存可以为DDR(即DDR SDRAM,Double Data Rate Synchronous Dynamic RandomAccess Memory,双倍速率同步动态随机存储器)。
步骤S12:利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端,以实现所述设备端计算引擎与所述目标接收端中计算引擎之间的通信。
在一种实施方式中,可以利用设备端计算引擎执行所述设备端程序数据,基于所述参数信息从所述内存中读取所述目标数据,并基于所述计算任务函数对所述目标数据进行计算以得到计算结果。基于所述通信函数,并通过所述RDMA模块将所述计算结果发送至目标接收端。
其中,基于所述通信函数,并通过所述RDMA模块将所述计算结果发送至目标接收端,具体包括以下步骤:
步骤00:基于所述通信函数将所述目标接收端的标识信息写入通信表,并通知表解析引擎。
其中,表解析引擎与RDMA模块均为底层硬件IP(即intellectual property,知识产权),在一种实施方式中可以通过HDL(即Hardware Description Language,硬件描述语言)语言编写自定义IP,得到表解析引擎与RDMA模块。可见,本申请中,上层软件的自定义通信库可以基于常见的C/C++语言实现的,而底层硬件IP则通过HDL代码实现,本申请实施例提供的方案,具有良好的通用性和可移植性。
并且,本申请实施例可以在创建通信函数时,可以指定相应的目标接收端。具体的,可以基于设备的标识信息进行指定。
步骤01:通过所述表解析引擎从所述通信表中获取所述目标接收端的标识信息,并获取所述标识信息对应的IP地址。
并且,本申请实施例还将所述计算结果写入内存中的数据区域,并将写入地址、数据长度写入所述通信表;通过所述表解析引擎从所述通信表中获取所述写入地址、所述数据长度,并将所述写入地址、所述数据长度以及所述IP地址写入所述RDMA模块中的存储器。其中,存储器可以为FIFO(即First Input First Output,先进先出)存储器。
其中,本申请实施例可以从IP标识对照表中获取所述标识信息对应的IP地址。
进一步的,在具体的实施方式中,在驱动初始化阶段,可以通过所述RDMA模块,向主机端发送发现消息,以便所述主机端基于各设备端的发现消息为所述各设备端分别分配IP地址以及标识信息;获取所述主机端发送的所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息;将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息保存至所述IP标识对照表。其中,在通过所述RDMA模块,向主机端发送发现消息之后,可以通过所述RDMA模块,获取所述主机端为所述第一设备端分配的IP地址以及标识信息,并向所述主机端回复确认信息,以便所述主机端在收到所述各设备端回复的确认信息后,保存所述各设备端的IP地址以及标识信息,并将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息发送给所述各设备端。其中,确认信息携带所述主机端为相应设备端分配的IP地址以及标识信息。
需要指出的是,在上电时,每个设备端实际上是一台DHCP(即Dynamic HostConfiguration Protocol,动态主机配置协议)客户端,即RDMA模块会发送DHCP发现信息来寻找DHCP服务器,即向广播IP地址255.255.255.255发送特定的广播信息,主机端作为DHCP服务器,会接收来自各个设备端的DHCP发现消息,并分别向每个设备端分配设备端的IP地址、设备端标识等信息。每个设备端的RDMA模块在接收到主机端分配给自己的信息之后,均会回复一个确认信息,确认信息也会包含主机端分配给自己的所有信息,以向主机端声明该设备端将使用这些信息进行通信,主机端在接收到来自各个设备端的确认信息之后,将分配给所有设备端的信息以及主机端的IP和标识信息,以自定义的格式,发送给每个设备端,同时也在主机端中保留一份。每个设备端的RDMA模块在接收到主机端发送过来的包含所有设备的通信信息后,将其保存在IP标识对照表中。
进一步的,本申请实施例中,一个节点可以包括主机端和至少一个设备端,若同一网络中包括多个节点,可以确定一个节点中的主机端进行IP地址以及标识信息的分配,也即,分配网络中其他主机端以及所有设备端的IP地址以及标识信息,最终,每个主机端以及每个设备端均存在包括全网所有主机端以及所有设备端的IP地址以及标识信息的IP标识对照表。
这样,在同一个网络中的任意一个设备都能自动发现和获取网络中所有设备的通信信息,无需人工干预,具有扩展性和灵活性,为实现高自由度的任意分布式算力网络拓展提供了物理基础。
并且,本申请实施例中,IP标识对照表和信息表的地址均是确定的,写入了设备端程序数据以及主机端程序数据,其中主机端程序数据为在主机端执行的程序数据。在一种实施方式中,主要由C/C++编写的程序,使用C/C++标准库和OpenCL在主机端的API函数,得到最终的主机端程序数据。
步骤02:通过所述RDMA模块基于所述IP地址将所述计算结果发送至目标接收端。
在具体的实施方式中,可以通过所述RDMA模块检测所述存储器,并在所述存储器不为空时,从所述存储器中读取出所述写入地址、所述数据长度以及所述IP地址,根据所述写入地址和所述数据长度从所述内存中读取所述计算结果,基于所述IP地址将所述计算结果发送至目标接收端。
其中,所述目标接收端为主机端或第二设备端;若所述目标接收端为多个第二设备端,则基于所述通信函数将多个所述第二设备端的标识信息均写入通信表,通过表解析引擎将计算结果发送至多个第二设备端。
并且,若所述目标接收端为第二设备端,所述第二设备端通过自身的RDMA模块接收计算结果,并将计算结果保存在自身的内存中,并且,在第一设备端基于通信函数将所述计算结果发送至第二设备端之后,还可以向所述第二设备端发送传输结束信息,以便所述第二设备端的RDMA模块在接收到所述传输结束信息后,将所述计算结果在内存中的首地址和长度信息返回给所述第二设备端的计算引擎,以便第二设备端的计算引擎根据计算结果在内存中的首地址和长度信息,进行后续操作。
并且,第一设备端在执行所述设备端程序数据的过程中,若执行到目标程序指令,则等待接收第三设备端的数据,并在接收到第三设备端的数据之后,继续执行后续操作。其中,目标程序指令为基于通信函数编译得到的程序指令。可以理解的是,多个第二设备端也是执行到相应的程序指令,等待接收第一设备端的计算结果。
可以理解的是,本申请实施例可以为任意不同架构的计算引擎之间的主动互联提供通信方案,消除了节点间和节点内通信之间的区分界限,并且不需要CPU的分配通信任务,并具有了一对多的通信能力,无论是XPU与XPU之间还是XPU与主机端之间,仅需在数据传输过程中搬移一次数据,具有较高的效率和效能。
例如,参见图2所示,图2为本申请实施例提供的一种具体的分布式通信引擎架构示意图。以完全软件的可编程硬件FPGA器件为例,该架构中存在两种计算引擎——主机端的普通CPU,以及加速卡(即设备端)中基于RISC-V处理器扩展功能而来的GPU。其中,加速卡为FPGA板卡,其中包括FPGA芯片,RDMA模块与GPU集成至该芯片,除了FPGA芯片外,还有一系列的外设,例如网口、DDR等,主机端和设备端无主从关系。主机端程序为主要由C/C++编写的程序,其中使用了C/C++标准库和OpenCL在主机端端的API函数;设备端程序,主要是使用OpenCL语言描述的具体计算任务,并集成了自定义的通信函数库,该自定义的通信函数库中的函数,在编写代码时,根据任务的通信需求,添加对应的通信函数到cl文件的OpenCL代码中,与cl文件一起编译,形成了最终的设备端的二进制代码。上层CL编译器和xPU芯片共同确定双方通信表、IP标识对照表的地址,并写入上述二进制代码。也即,预先确定主机端与设备端通信所需的双方通信表、IP标识对照表的地址,写入主机端程序数据,以及设备端程序数据。并且,通过HDL语言编写自定义的IP,包括RDMA、表解析引擎等,配合上层的C/C++语言实现的自定义通信函数库以及一些标准的协议库,实现任意计算引擎之间的基于公共以太网协议的任意互联,且完全不需要主机控制通信过程。
进一步的,上述分布式通信引擎架构的主要工作过程包括:
(1)驱动初始化阶段:RDMA模块实现了RDMA NIC的功能,自动完成以下工作:a)在上电时,各个加速卡实际上是一台DHCP客户端,即RDMA模块会发送DHCP发现信息来寻找DHCP服务器,即向广播IP地址255.255.255.255发送特定的广播信息;b)主机端作为DHCP服务器,会接收来自各个加速卡的DHCP发现消息,并分别向每个加速卡分配加速卡的IP地址、设备ID等信息;c)每个加速卡的RDMA模块在接收到主机端分配给自己的信息之后,均会回复一个确认信息,确认信息也会包含b)中分配给自己的所有信息,以向主机端声明该加速卡将使用这些信息进行通信;d)主机端在接收到来自各个加速卡的确认信息之后,将分配给所有加速卡的信息以及主机端的IP和ID信息,以自定义的格式,发送给每个加速卡,同时也在主机端中保留一份;e)每个加速卡的RDMA模块在接收到上一步主机端发送过来的包含所有设备的通信信息后,将其保存在IP标识对照表中。
(2)主机端下载相关数据给加速卡:在主机端端执行编译好的主机端二进制程序,该程序中的一系列的OpenCL API函数会进行查找设备、初始化设备参数等一系列工作;此外,该程序还会发送以下三类数据给加速卡:计算所需要的初始数据、一些参数(例如初始数据在该加速卡DDR中的首地址、长度等,这些参数本身在加速卡DDR中的地址是固定的)、和磁盘上编译好的设备端二进制程序数据(该数据在加速卡DDR中的首地址也是固定的,与具体任务无关);主机端通过RDMA以太网将这些数据发送至加速卡中;
(3)加速卡与主机端通信的两个场景如下:
a)加速卡读取主机端的数据:通常在上述(2)中主机端已下载相关数据给加速卡,加速卡中的GPU计算所需要的数据已经下载至加速卡的DDR中了,不需要GPU再去主机端读取数据。
b)加速卡向主机端写入数据:在加速卡中的GPU计算完成后,会将计算结果写入加速卡DDR中的数据区域,并将写入的地址、长度、对端(即目标接收端)的ID等保存在通信表中;然后GPU通知表解析引擎,表解析引擎从通信表取出信息,并标记通信表中已取出的信息防止重复取出;表解析引擎根据获取的信息中对端的ID,向IP标识对照表查询该ID对应的IP地址;表解析引擎获取ID所对应的IP地址后,将这些信息写入RDMA模块中的一个FIFO中;RDMA模块在检测到FIFO不为空时,会不断的取出其中的信息,根据信息中的加速卡DDR地址、长度从加速卡DDR中读取对应的数据,然后根据IP地址,将数据发送给对端;在数据发送完成后,加速卡还向主机端发送传输完成信息。
(4)加速卡之间的读写与加速卡和主机端之间的读写有所区别;前者是成对出现的,即当一端执行写入时,必定有另一端或多端执行对应的读操作:假设加速卡2和加速卡3需要读取加速卡1的数据,即在加速卡2和加速卡3中的GPU执行任务到某个阶段后,可能会需要加速卡1的数据,发生这种情况的根本原因是,这两个加速卡中的GPU都执行到了由自定义通信函数库中read函数编译生成的程序指令,该程序指令表示GPU需要等待接收来自Device ID=1(即加速卡的设备ID为1)的数据,才能继续执行后续任务;
a)在加速卡1中,GPU完成计算后,将计算结果写入加速卡1DDR中的数据区域,并将写入的地址、长度、对端的ID等保存在DDR中地址固定的通信表中,由于需要发送的设备端有2个,因此,这里向通信表中写入两条对端ID不同的信息,然后GPU通知表解析引擎,表解析引擎从通信表取出这2条信息;表解析引擎根据获取的信息中2个对端的ID(即设备ID=2和3),向IP标识对照表查询该ID对应的IP地址,表解析引擎获取2个ID所对应的IP地址后,将两条信息及其IP写入RDMA模块中的一个FIFO中;RDMA模块在检测到FIFO不为空时,会不断的取出其中的信息,据信息中的加速卡DDR地址、长度从加速卡DDR中读取对应的数据,然后根据IP地址,将数据发送给对端设备(即加速卡2和加速卡3);在数据发送完成后,还分别给加速卡2和加速卡3发送一个数据传输结束的信息;
b)在加速卡2和加速卡3中,各自的GPU执行到read函数编译生成的指令之后,则会等待指令中给出的设备ID发送数据,当加速卡2和加速卡3的RDMA模块接收到加速卡1发送过来的数据,将其保存在各自的DDR中,在接收到加速卡1发过来的传输结束的信息之后,会将接收到的数据在DDR中的首地址和长度返回给各自的GPU,GPU根据数据所在的首地址和长度,即可进行后续操作。
需要指出的是,在其他的通信引擎架构中,可能会出现这样一种情况:由于加速卡1和加速卡2之间不能直接通信,加速卡1会将自己计算出来的中间结果,先发送回主机端中的某个地址,然后主机端再通知加速卡2,让加速卡2来读取主机端中该地址的数据;由于本通信架构中加速卡之间可以之间通信,因此不会存在这种情况。
这样,通过高级语言编写上层软件的自定义通信函数库,和HDL语言编写的底层xPU硬件IP,基于物理的FPGA芯片为例,实现了一种不同架构的计算引擎之间高效、通用的通信引擎。根据底层xPU的具体类型(本例中是基于RISC-V扩展而来GPU),通过标准的高层语言编写自定义通信函数库,结合HDL语言编写的RDMA模块、表解析引擎等,该通信引擎中通过将负责RDMA网络通信的模块与计算引擎集成至一个芯片中,进一步加速了计算引擎与通信引擎之间的联系,并且在同一RDMA网络内实现了实现了任意不同架构的计算引擎之间的主动互联,完全不需要CPU的控制参与通信控制,并具有了一对多的通信能力;无论是加速卡与加速卡之间还是加速卡与主机端之间,仅需在数据传输过程中搬移一次数据,有效的解决了计算引擎之间通信低效、低速的问题。本申请提供的方案,适用于各种xPU计算引擎,如GPU、NPU、IPU、DPU、VPU等。
进一步的,本申请实施例例公开了一种计算引擎通信方法,应用于主机端,包括:
通过主机端计算引擎向设备端发送设备端程序数据,以便所述设备端的设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端;
其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数。
可见,本申请中,基于通信需求创建通信函数,并对包含通信函数以及计算任务函数的程序代码编译,得到设备端程序数据,设备端获取主机端计算引擎发送的设备端程序代码之后,设备端计算引擎在执行设备端程序代码的过程中完成计算任务和通信任务,将计算结果发送至目标接收端,这样实现了主机端中计算引擎与设备端中计算引擎、以及设备端中计算引擎与目标接收端中计算引擎的通信,无需主机算计算引擎分配通信任务,释放主机端计算引擎的算力,并且,适应于同一节点内不同计算引擎以及不同节点之间计算引擎的通信场景。
参见图3所示,本申请实施例公开了一种计算引擎通信装置,应用于第一设备端,包括:
通信引擎11,用于获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数;
设备端计算引擎12,用于执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端。
可见,本申请先获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数,之后利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端,以实现所述设备端计算引擎与所述目标接收端中计算引擎之间的通信。也即,本申请中,基于通信需求创建通信函数,并对包含通信函数以及计算任务函数的程序代码编译,得到设备端程序数据,设备端获取主机端计算引擎发送的设备端程序代码之后,设备端计算引擎在执行设备端程序代码的过程中完成计算任务和通信任务,将计算结果发送至目标接收端,这样实现了主机端中计算引擎与设备端中计算引擎、以及设备端中计算引擎与目标接收端中计算引擎的通信,无需主机算计算引擎分配通信任务,释放主机端计算引擎的算力,并且,适应于同一节点内不同计算引擎以及不同节点之间计算引擎的通信场景。
其中,通信引擎11为,RDMA模块,所述RDMA模块与所述设备端计算引擎集成在同一芯片中;
相应的,所述设备端计算引擎12,具体用于基于所述通信函数,并通过所述RDMA模块将所述计算结果发送至目标接收端。
进一步的,RDMA模块,具体用于获取主机端计算引擎发送的目标数据、参数信息以及设备端程序数据;其中,所述参数信息包括所述目标数据写入所述第一设备端的内存的首地址以及长度信息;基于所述参数信息将所述目标数据写入所述内存;
相应的,所述设备端计算引擎12,具体用于利用设备端计算引擎执行所述设备端程序数据,基于所述参数信息从所述内存中读取所述目标数据,并基于所述计算任务函数对所述目标数据进行计算以得到计算结果。
进一步的,所述设备端计算引擎12,基于所述通信函数将所述目标接收端的标识信息写入通信表,并通知表解析引擎;通过所述表解析引擎从所述通信表中获取所述目标接收端的标识信息,并获取所述标识信息对应的IP地址;所述RDMA模块,用于基于所述IP地址将所述计算结果发送至目标接收端。
进一步的,所述RDMA模块还用于将所述计算结果写入内存中的数据区域,并将写入地址、数据长度写入所述通信表;相应的,所述设备端计算引擎12,用于通过所述表解析引擎从所述通信表中获取所述写入地址、所述数据长度,并将所述写入地址、所述数据长度以及所述IP地址写入所述RDMA模块中的存储器。所述RDMA模块,用于检测所述存储器,并在所述存储器不为空时,从所述存储器中读取出所述写入地址、所述数据长度以及所述IP地址,根据所述写入地址和所述数据长度从所述内存中读取所述计算结果,基于所述IP地址将所述计算结果发送至目标接收端。
进一步的,所述获取所述标识信息对应的IP地址,包括:从IP标识对照表中获取所述标识信息对应的IP地址。
相应的,所述RDMA模块,还用于向主机端发送发现消息,以便所述主机端基于各设备端的发现消息为所述各设备端分别分配IP地址以及标识信息;获取所述主机端发送的所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息;将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息保存至所述IP标识对照表。
其中,所述RDMA模块,还用于在向主机端发送发现消息之后,获取所述主机端为所述第一设备端分配的IP地址以及标识信息,并向所述主机端回复确认信息,以便所述主机端在收到所述各设备端回复的确认信息后,保存所述各设备端的IP地址以及标识信息,并将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息发送给所述各设备端。
进一步的,所述目标接收端为主机端或第二设备端;
若所述目标接收端为多个第二设备端,则设备端计算引擎基于所述通信函数将多个所述第二设备端的标识信息均写入通信表。
并且,若所述目标接收端为第二设备端,所述第二设备端通过自身的RDMA模块接收所述计算结果,并将所述计算结果保存在自身的内存中。
进一步的,RDMA模块还用于在基于所述通信函数将所述计算结果发送至第二设备端之后,向所述第二设备端发送传输结束信息,以便所述第二设备端的RDMA模块在接收到所述传输结束信息后,将所述计算结果在内存中的首地址和长度信息返回给所述第二设备端的计算引擎。
进一步的,设备端计算引擎在执行所述设备端程序数据的过程中,若执行到目标程序指令,则等待接收第三设备端的数据,并在接收到第三设备端的数据之后,继续执行后续操作。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的计算引擎通信方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (15)
1.一种计算引擎通信方法,其特征在于,应用于第一设备端,包括:
获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数;
利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端,以实现所述设备端计算引擎与所述目标接收端中计算引擎之间的通信。
2.根据权利要求1所述的计算引擎通信方法,其特征在于,所述获取主机端计算引擎发送的设备端程序数据,包括:
通过RDMA模块获取主机端计算引擎发送的设备端程序数据;其中,所述RDMA模块与所述设备端计算引擎集成在同一芯片中;
相应的,所述基于所述通信函数将所述计算结果发送至目标接收端,包括:基于所述通信函数,并通过所述RDMA模块将所述计算结果发送至目标接收端。
3.根据权利要求2所述的计算引擎通信方法,其特征在于,所述通过RDMA模块获取主机端计算引擎发送的设备端程序数据,包括:
通过RDMA模块获取主机端计算引擎发送的目标数据、参数信息以及设备端程序数据;其中,所述参数信息包括所述目标数据写入所述第一设备端的内存的首地址以及长度信息;
基于所述参数信息将所述目标数据写入所述内存;
相应的,所述利用设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对所述目标数据进行计算以得到计算结果,包括:
利用设备端计算引擎执行所述设备端程序数据,基于所述参数信息从所述内存中读取所述目标数据,并基于所述计算任务函数对所述目标数据进行计算以得到计算结果。
4.根据权利要求2所述的计算引擎通信方法,其特征在于,所述基于所述通信函数,并通过所述RDMA模块将所述计算结果发送至目标接收端,包括:
基于所述通信函数将所述目标接收端的标识信息写入通信表,并通知表解析引擎;
通过所述表解析引擎从所述通信表中获取所述目标接收端的标识信息,并获取所述标识信息对应的IP地址;
通过所述RDMA模块基于所述IP地址将所述计算结果发送至目标接收端。
5.根据权利要求4所述的计算引擎通信方法,其特征在于,还包括:
将所述计算结果写入内存中的数据区域,并将写入地址、数据长度写入所述通信表;
通过所述表解析引擎从所述通信表中获取所述写入地址、所述数据长度,并将所述写入地址、所述数据长度以及所述IP地址写入所述RDMA模块中的存储器。
6.根据权利要求5所述的计算引擎通信方法,其特征在于,所述通过所述RDMA模块基于所述IP地址将所述计算结果发送至目标接收端,包括:
通过所述RDMA模块检测所述存储器,并在所述存储器不为空时,从所述存储器中读取出所述写入地址、所述数据长度以及所述IP地址,根据所述写入地址和所述数据长度从所述内存中读取所述计算结果,基于所述IP地址将所述计算结果发送至目标接收端。
7.根据权利要求4所述的计算引擎通信方法,其特征在于,所述获取所述标识信息对应的IP地址,包括:
从IP标识对照表中获取所述标识信息对应的IP地址。
8.根据权利要求7所述的计算引擎通信方法,其特征在于,还包括:
通过所述RDMA模块,向主机端发送发现消息,以便所述主机端基于各设备端的发现消息为所述各设备端分别分配IP地址以及标识信息;
获取所述主机端发送的所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息;
将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息保存至所述IP标识对照表。
9.根据权利要求8所述的计算引擎通信方法,其特征在于,所述通过所述RDMA模块,向主机端发送发现消息之后,还包括:
通过所述RDMA模块,获取所述主机端为所述第一设备端分配的IP地址以及标识信息,并向所述主机端回复确认信息,以便所述主机端在收到所述各设备端回复的确认信息后,保存所述各设备端的IP地址以及标识信息,并将所述各设备端的IP地址以及标识信息、所述主机端的IP地址以及标识信息发送给所述各设备端。
10.根据权利要求4所述的计算引擎通信方法,其特征在于,所述目标接收端为主机端或第二设备端;
若所述目标接收端为多个第二设备端,则所述基于所述通信函数将所述目标接收端的标识信息写入通信表,包括:
基于所述通信函数将多个所述第二设备端的标识信息均写入通信表。
11.根据权利要求5所述的计算引擎通信方法,其特征在于,若所述目标接收端为第二设备端,所述第二设备端通过自身的RDMA模块接收所述计算结果,并将所述计算结果保存在自身的内存中。
12.根据权利要求11所述的计算引擎通信方法,其特征在于,在基于所述通信函数将所述计算结果发送至第二设备端之后,还包括:
向所述第二设备端发送传输结束信息,以便所述第二设备端的RDMA模块在接收到所述传输结束信息后,将所述计算结果在内存中的首地址和长度信息返回给所述第二设备端的计算引擎。
13.根据权利要求1至12所述的计算引擎通信方法,其特征在于,还包括:
在执行所述设备端程序数据的过程中,若执行到目标程序指令,则等待接收第三设备端的数据,并在接收到第三设备端的数据之后,继续执行后续操作。
14.一种计算引擎通信方法,其特征在于,应用于主机端,包括:
通过主机端计算引擎向设备端发送设备端程序数据,以便所述设备端的设备端计算引擎执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端;
其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数。
15.一种计算引擎通信装置,其特征在于,应用于第一设备端,包括:
通信引擎,用于获取主机端计算引擎发送的设备端程序数据;其中,所述设备端程序数据为对包含通信函数以及计算任务函数的程序代码编译得到的程序数据,所述通信函数为基于通信需求创建的函数;
设备端计算引擎,用于执行所述设备端程序数据,基于所述计算任务函数对目标数据进行计算以得到计算结果,并基于所述通信函数将所述计算结果发送至目标接收端。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211347106.XA CN116028238A (zh) | 2022-10-31 | 2022-10-31 | 计算引擎通信方法及装置 |
PCT/CN2023/084813 WO2024093112A1 (zh) | 2022-10-31 | 2023-03-29 | 计算引擎通信方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211347106.XA CN116028238A (zh) | 2022-10-31 | 2022-10-31 | 计算引擎通信方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116028238A true CN116028238A (zh) | 2023-04-28 |
Family
ID=86071157
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211347106.XA Pending CN116028238A (zh) | 2022-10-31 | 2022-10-31 | 计算引擎通信方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116028238A (zh) |
WO (1) | WO2024093112A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117834709A (zh) * | 2024-01-04 | 2024-04-05 | 天津大学 | 面向服务器无感知计算场景的函数间数据直接传递方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828843A (zh) * | 2019-01-30 | 2019-05-31 | 郑州云海信息技术有限公司 | 一种计算节点间数据传输的方法、***及电子设备 |
CN111966504B (zh) * | 2020-10-23 | 2021-02-09 | 腾讯科技(深圳)有限公司 | 图形处理器中的任务处理方法及相关设备 |
CN112306586B (zh) * | 2020-11-20 | 2024-06-18 | 深圳前海微众银行股份有限公司 | 数据处理方法、装置、设备及计算机存储介质 |
CN113849293B (zh) * | 2021-11-30 | 2022-02-22 | 湖北芯擎科技有限公司 | 数据处理方法、装置、***及计算机可读存储介质 |
CN114003392B (zh) * | 2021-12-28 | 2022-04-22 | 苏州浪潮智能科技有限公司 | 一种数据加速计算方法及相关装置 |
-
2022
- 2022-10-31 CN CN202211347106.XA patent/CN116028238A/zh active Pending
-
2023
- 2023-03-29 WO PCT/CN2023/084813 patent/WO2024093112A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117834709A (zh) * | 2024-01-04 | 2024-04-05 | 天津大学 | 面向服务器无感知计算场景的函数间数据直接传递方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2024093112A1 (zh) | 2024-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3667496A1 (en) | Distributed computing system, data transmission method and device in distributed computing system | |
US8676877B2 (en) | Cluster computing using special purpose microprocessors | |
US8065503B2 (en) | Iteratively processing data segments by concurrently transmitting to, processing by, and receiving from partnered process | |
Lawlor | Message passing for GPGPU clusters: CudaMPI | |
US20110125974A1 (en) | Distributed symmetric multiprocessing computing architecture | |
CN111277616A (zh) | 一种基于rdma的数据传输方法和分布式共享内存*** | |
JP5826471B2 (ja) | 自律的サブシステムアーキテクチャー | |
JP5658509B2 (ja) | 自律的メモリアーキテクチャー | |
CN102831018B (zh) | 低延迟先进先出消息交换*** | |
WO2024093112A1 (zh) | 计算引擎通信方法及装置、电子设备、存储介质 | |
CN114201421A (zh) | 一种数据流处理方法、存储控制节点及可读存储介质 | |
JP2009123201A (ja) | データを処理するためのサーバ‐プロセッサ・ハイブリッド・システムおよび方法 | |
CN115080479B (zh) | 传输方法、服务器、设备、裸金属实例及基板管理控制器 | |
CN116541227A (zh) | 故障诊断方法、装置、存储介质、电子装置及bmc芯片 | |
CN117493237B (zh) | 计算设备、服务器、数据处理方法和存储介质 | |
KR100584193B1 (ko) | 그리드 컴퓨팅 시스템에서 파일기반의 mpi초기화방법을 이용한 그리드 mpi 작업 할당 시스템 및그리드 mpi 작업 할당방법 | |
EP3631639A1 (en) | Communications for field programmable gate array device | |
WO2023147094A1 (en) | Code compilation for dynamic peer-to-peer networked code execution | |
CN112925739B (zh) | 应用于众核芯片的通信方法、众核芯片及存储介质 | |
Sanches | Distributed computing in a cloud of mobile phones | |
US9948543B2 (en) | Mechanism to extend the remote get to do async rectangle broadcast on a rectangle with wild cards in the packet header | |
WO2024077999A1 (zh) | 集合通信方法及计算集群 | |
CN116383127B (zh) | 节点间通信方法、装置、电子设备及存储介质 | |
Pickartz et al. | Swift: A transparent and flexible communication layer for pcie-coupled accelerators and (co-) processors | |
JP3644158B2 (ja) | 並列計算機におけるデータ送受信方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |