用于GPU发起的通信的网络分组模板化的制作方法

文档序号:23804003发布日期:2021-02-03 07:19阅读:86来源:国知局
用于GPU发起的通信的网络分组模板化的制作方法
用于gpu发起的通信的网络分组模板化


背景技术:

[0001]
本发明是在美国劳伦斯
·
利弗莫尔国家安全局的pathforward项目(美国能源部授予的主要合同编号de-ac52-07na27344,分包合同编号b620717)的政府支持下完成的。美国政府具有本发明中的某些权利。
[0002]
相关技术说明
[0003]
通用处理器(诸如中央处理单元(cpu))通常执行软件应用程序的输入/输出(i/o)操作。在包括多个处理器的系统中,cpu可能是唯一可以生成网络消息的处理器。除了通用处理器之外,该系统还可以包括数据并行处理器。数据并行处理器具有高度并行的执行架构。数据并行处理器可以包括图形处理单元(gpu)、数字信号处理器(dsp)等等。数据并行处理器在等待cpu代表其来协调网络通信时会导致计算延迟。在具有cpu和gpu的计算系统中,cpu通常被称为“主机”。在这些系统中,就网络操作而言,gpu是二等公民。这限制了gpu发起网络操作的能力,并且要求cpu参与gpu启动的任何网络操作。使用主机为gpu生成网络消息可能会涉及从gpu到主机以及从主机到网络接口的若干次背对背往返,从而导致性能降低。
附图说明
[0004]
通过结合附图参考以下描述,可以更好地理解本文描述的方法和机制的优点,在附图中:
[0005]
图1是计算系统的一个实现方式的框图。
[0006]
图2是计算系统的另一实现方式的框图。
[0007]
图3示出了将网络控制路径从cpu卸载到gpu的一个实现方式的时序图。
[0008]
图4示出了用于存储网络分组模板的队列的一个实现方式的图。
[0009]
图5示出了网络分组模板的一个实现方式的图。
[0010]
图6示出了网络分组模板的另一实现方式的图。
[0011]
图7是示出用于创建和使用网络分组模板的方法的一个实现方式的通用流程图。
[0012]
图8是示出用于确定何时将网络分组模板添加到队列中的方法的一个实现方式的通用流程图。
[0013]
图9是示出用于确定何时将网络分组模板添加到队列中的方法的另一实现方式的通用流程图。
具体实施方式
[0014]
在以下描述中,阐述了众多具体细节以提供对本文所呈现方法和机制的透彻理解。然而,本领域普通技术人员应认识到,可在没有这些具体细节的情况下实践各种实现方式。在一些情况下,并未详细示出众所周知的结构、部件、信号、计算机程序指令和技术,以避免混淆本文描述的方法。应当理解,为了说明的简单和清楚起见,附图中所示的元件不一定按比例绘制。例如,一些元件的尺寸可相对于其他元件被放大。
[0015]
本文公开了用于实现网络分组模板化的各种系统、装置以及方法。第一处理器(例
如,中央处理单元(cpu))根据模板创建网络分组,并且用静态数据填充网络分组的第一字段子集。接下来,第一处理器将网络分组存储在存储器中。第二处理器(例如,图形处理单元(gpu))发起内核的执行并且在内核完成执行之前检测网络通信请求。响应于检测到网络通信请求,第二处理器用运行时数据填充网络分组的第二字段子集。然后,第二处理器生成网络分组已准备好被处理的通知。网络接口控制器(nic)响应于检测到所述通知而使用从第一字段子集和从第二字段子集检索到的数据来处理网络分组。
[0016]
在一个实现方式中,循环缓冲器被维持在可由第一和第二处理器访问的存储器中。循环缓冲器存储多个网络分组。在一个实现方式中,第一处理器周期性地检查循环缓冲器的状态,并且如果现有网络分组的数目低于阈值,则第一处理器将一个或多个网络分组添加到循环缓冲器。当将网络分组添加到循环缓冲器时,第一处理器填充被添加到循环缓冲器的每个网络分组的第一字段子集。在一个实现方式中,第一字段子集包括网络控制位字段和存储器访问密钥字段。在一个实现方式中,第二字段子集包括源偏移字段、目的地偏移字段以及操作类型字段。
[0017]
现在参考图1,示出了计算系统100的一个实现方式的框图。在一个实现方式中,计算系统100至少包括处理器105a至105n、输入/输出(i/o)接口120、总线125、一个或多个存储器控制器130、网络接口控制器(nic)135和一个或多个存储器装置140。在其他实现方式中,计算系统100包括其他部件并且/或者计算系统100以不同方式布置。处理器105a至105n表示系统100中包括的任何数目的处理器。在一个实现方式中,处理器105a是通用处理器,诸如中央处理单元(cpu)。在一个实现方式中,处理器105n是具有高度并行架构的数据并行处理器。数据并行处理器包括图形处理单元(gpu)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic)等等。在一些实现方式中,处理器105a至105n包括多个数据并行处理器。
[0018]
一个或多个存储器控制器130表示可由处理器105a至105n和耦接到i/o接口120的i/o装置(未示出)访问的任何数目和类型的存储器控制器。一个或多个存储器控制器130耦接到任何数目和类型的一个或多个存储器装置140。一个或多个存储器装置140表示任何数目和类型的存储器装置。例如,一个或多个存储器装置140中的存储器的类型包括动态随机存取存储器(dram)、静态随机存取存储器(sram)、nand闪存存储器、nor闪存存储器、铁电随机存取存储器(feram)等。在一个实现方式中,给定的存储器装置140包括循环缓冲器150,以用于存储由第一处理器105a根据网络分组模板生成的新创建的网络分组。第一处理器105a用静态信息填充每个新创建的网络分组。在一个实现方式中,给定的存储器装置140在第二处理器105n本地。当第二处理器准备好发起网络传输时,第二处理器105n用动态的运行时信息更新存储在循环缓冲器150中的网络分组,并且然后第二处理器105n通知nic 135网络分组已准备好被处理。nic 135处理网络分组并且在网络145上执行所请求的网络通信。如本文所使用的,网络分组是具有多个字段的格式化的数据结构,其中该数据结构由第一处理器105a创建并且由第二处理器105b更新。换句话说,网络分组是格式化的数据结构,其具有被第一处理器105a写入的第一字段子集以及被第二处理器105n写入和/或更新的第二字段子集。
[0019]
i/o接口120表示任何数目和类型的i/o接口(例如,外围部件互连(pci)总线、pci扩展(pci-x)、pcie(pci快速)总线、吉比特以太网(gbe)总线、通用串行总线(usb))。各种类
型的外围装置(未示出)耦接到i/o接口120。此类外围装置包括(但不限于)显示器、键盘、鼠标、打印机、扫描仪、操纵杆或其他类型的游戏控制器、媒体记录装置、外部存储装置、网络接口卡等。网络接口控制器(nic)135跨网络145接收和发送网络消息。在一个实现方式中,给定的处理器105n生成用于nic 135处理网络分组的请求。在一个实现方式中,nic 135在不涉及处理器105a的情况下处理由处理器105n生成的请求。在此实现方式中,处理器105a是cpu并且处理器105n是gpu。在其他实现方式中,其他类型的处理器能够执行这些动作。
[0020]
网络145表示任何类型的网络或网络的组合,包括无线连接、直接局域网(lan)、城域网(man)、广域网(wan)、内联网、互联网、有线网络、分组交换网络、光纤网络、路由器、存储区域网络,或其他类型的网络。lan的示例包括以太网网络、光纤分布式数据接口(fddi)网络和令牌环网络。在各种实现方式中,网络145还包括远程直接存储器访问(rdma)硬件和/或软件、传输控制协议/互联网协议(tcp/ip)硬件和/或软件、路由器、中继器、交换机、电网和/或其他部件。
[0021]
在各种实现方式中,计算系统100是计算机、膝上型计算机、移动装置、游戏控制台、服务器、流式传输装置、可穿戴装置或者各种其他类型的计算系统或装置中的任一种。应注意,计算系统100的部件的数目随实现方式的不同而不同。例如,在其他实现方式中,存在与图1中示出的数目相比更多或更少的每种部件。还应注意的是,在其他实现方式中,计算系统100包括图1中未示出的其他部件。附加地,在其他实现方式中,计算系统100以与图1中所示不同的方式进行结构化。
[0022]
现在转到图2,示出了计算系统200的另一实现方式的框图。在一个实现方式中,系统200包括gpu 205、系统存储器225和本地存储器230。系统200还包括其他部件,这些部件并未示出以避免使附图变得模糊。gpu 205至少包括命令处理器235、分派单元250、计算单元255a至255n、存储器控制器220、全局数据共享270、一级(l1)高速缓存265以及二级(l2)高速缓存260。在其他实现方式中,即使在图2中仅示出一个实例和/或仅一个实例以其他合适的方式组织,gpu 205也可能包括其他部件、省略所示出的部件中的一个或多个、具有部件的多个实例。
[0023]
在各种实现方式中,计算系统200执行各种类型的软件应用程序中的任一种。在一个实现方式中,作为执行给定软件应用程序的一部分,计算系统200的主机cpu(未示出)启动要在gpu 205上执行的内核。如本文所使用的,术语“内核”或“计算内核”被定义为包括可执行指令的功能或任务,可执行指令作为一个或多个线程在一个或多个计算单元上被启动和执行。命令处理器235从主机cpu接收内核,并将内核发布到分派单元250,以分派到计算单元255a至255n。在计算单元255a至255n上执行的内核内的线程通过用运行时信息更新存储在循环缓冲器240中的网络分组并且然后通知nic(未示出)来发起网络通信。nic响应于接收到相应的通知来处理给定的网络分组。尽管图2中未示出,但是在一个实现方式中,计算单元255a至255n也在每个计算单元255a至255n内包括一个或多个高速缓存和/或本地存储器。
[0024]
现在转到图3,示出了将网络控制路径从cpu卸载到gpu的一个实现方式的时序图300。在一个实现方式中,cpu 320在gpu 325上启动内核335,并且然后gpu 325独立于cpu 320执行内核335。当gpu 325执行内核335时,cpu 320能够执行其他任务。在一些实现方式中,cpu 320耦接到其他gpu,并且cpu 320能够在其他gpu上启动内核,这些内核与gpu 325
上的内核335并行执行。cpu 320根据模板生成网络分组,并且填充每个网络分组的字段的一部分。然后,cpu 320将每个网络分组存储在gpu 325和nic 315可访问的位置。cpu 320提前生成网络分组,而无需等待来自gpu 325的明确请求。
[0025]
在内核335执行期间并且无需等待内核335完成,gpu 325填充给定网络分组的字段的其余部分,并且然后gpu 325将网络分组请求发送到网络接口控制器(nic)315,如发送框340所示。应注意,gpu 325将此网络请求发送到nic 315,而无需cpu 320的任何参与。nic 315处理网络分组请求,并将请求放置在网络上,同时内核335继续执行,如放置框345所示。尽管在图3中未示出,但应注意,内核335能够将多个网络分组请求发送到nic 315,在内核335执行期间由nic 315处理所述多个网络分组请求。在稍后的时间点,内核335的执行完成,这由完成框350表示。
[0026]
现在转到图4,示出了用于存储网络分组的队列400的一个实现方式的图。在一个实现方式中,队列400是循环队列,其中基于先进先出(first in first out,fifo)原理执行操作,并且最后位置连接回到第一位置以形成圆圈。应注意,“循环队列”在本文中也被称为“循环缓冲器”。在其他实现方式中,使用各种其他类型的数据结构中的任一种来实现队列400。在一个实现方式中,队列400由包括cpu、gpu和nic的计算系统使用。
[0027]
在一个实现方式中,cpu 415将网络分组添加到队列400,其中根据网络分组模板来生成每个网络分组。如本文所使用的,“网络分组模板”被定义为由第一处理器创建的通信分组的结构,但是具有要由第二处理器填充和/或更新的一个或多个空字段。换句话说,“网络分组模板”定义了通信分组的结构,但是通信分组的内容的至少一部分将由第二处理器填充。通常,cpu 415在将分组存储在队列400中的可用槽位处之前将用静态信息(例如,网络控制位、存储器访问密钥(rkey))填充网络分组的字段的一部分。在第二处理器将第二字段子集写入网络分组之后,将通知传送到nic 420以处理网络分组。换句话说,一旦第二处理器完成了所有字段的填写并且为nic 420生成了通知,则网络分组准备就绪。在一个实现方式中,第二处理器通过将通知写入门铃寄存器来通知nic 420网络分组准备就绪。在其他实现方式中,第二处理器使用其他技术将通知传送到nic 420。
[0028]
在一个实现方式中,cpu 415周期性地将新创建的网络分组添加到队列400。例如,cpu 415周期性地检查队列400的状态。在一个实现方式中,每个队列条目包括有效指示符,以指示该队列条目是否存储了有效网络分组。应注意,“队列条目”在本文中也称为“队列槽位”。在一个实现方式中,如果队列400中存在任何未使用的(即,可用的)槽位,如有效指示符所示,则cpu 415将一个或多个网络分组添加到队列400的这些空条目。在另一实现方式中,如果当前存储在队列400中的网络分组的数目小于阈值,则cpu 415将一个或多个网络分组添加到队列400的可用槽位。在各种实现方式中,基于可用槽位的数目,cpu 415添加到队列400中的415个网络分组的数目是固定的、可编程的,或者是以其他合适的方式确定的。
[0029]
在一个实现方式中,nic 420维持指向队列400中待处理的下一位置的指针。在nic 420接收到通知并且处理网络分组之后,nic 420使指针递增以指向队列中的下一位置。类似地,gpu 425维持指向队列400中的一个位置的指针,该位置存储了准备好被nic 420修改然后处理的网络分组。在一个实现方式中,由gpu 425维持的指针与由nic 420维持的指针偏移一个队列元素。类似地,在一个实现方式中,cpu 415维持一个指针,该指针指向队列400中用于存储新创建的网络分组的可用位置。
[0030]
在一个实现方式中,cpu 415查询队列400的条目以确定是否存在任何条目可用于存储新创建的网络分组。在一个实现方式中,如果cpu 415在队列400中检测到可用条目,则cpu 415生成新的网络分组并将网络分组存储在可用条目中。在另一实现方式中,如果cpu 415在队列400中检测到可用条目并且满足第一条件,则cpu 415生成新的网络分组并将网络分组存储在可用条目中。在一个实现方式中,第一条件是队列400具有少于阈值数目的准备好被gpu 425使用的网络分组。在其他实现方式中,第一条件是各种其他类型的条件中的任一种。在各种实现方式中,cpu 415提前并且在关键路径之外创建网络分组。以这种方式,当gpu 425需要生成网络分组时,gpu 425实时访问存储在队列400上的网络分组,并且设置网络分组供nic 420立即使用,而无需cpu 415的任何参与。
[0031]
现在参考图5,示出了网络分组模板505的一个实现方式的图。在各种实现方式中,如本文所述的网络分组模板包括具有各种静态和运行时信息的多个指示符和/或字段。例如,在一个实现方式中,网络分组模板505包括有效指示符510、分组就绪指示符515以及多个字段520a至520n。在其他实现方式中,网络分组模板505包括其他数目和/或类型的指示符和字段并且/或者网络分组模板505以其他合适的方式进行结构化。
[0032]
在一个实现方式中,有效指示符510指示条目是否存储了有效网络分组。有效网络分组是已经由第一处理器(例如,cpu)创建和初始化并且准备好被第二处理器(例如,gpu、存储器中处理(processing in memory,pim)装置)更新的分组。在一个实现方式中,分组就绪指示符515指定条目何时存储准备好被nic处理的网络分组。在各种实现方式中,字段520a至520n存储各种网络通信设置中的任一种。在一个实现方式中,当根据网络分组模板505创建网络分组时,第一处理器对第一字段子集520a至520n进行编程,并且当第二处理器需要发起网络传输时,对第二字段子集520a至520n进行实时编程。
[0033]
现在转到图6,示出了网络分组模板605的另一实现方式的图。在一个实现方式中,网络分组模板605包括有效指示符610和分组就绪指示符615。网络分组模板605还包括网络控制位620和存储器访问密钥625。在一个实现方式中,当根据模板605创建网络分组并将网络分组存储在可由第二处理器(例如,gpu)访问的存储器中的队列(例如,图4的队列400)上时,第一处理器(例如,cpu)填写用于网络控制位620和存储器访问密钥625的字段。尽管未示出,但是在其他实现方式中,网络分组模板605还包括一个或多个其他字段,当在队列中创建和存储网络分组时,字段由第一处理器填充。
[0034]
网络分组模板605还包括由第二处理器动态地用运行时信息填充的各种字段。例如,在一个实现方式中,网络分组模板605包括由第二处理器用运行时信息填充的源偏移630、目的地偏移635以及操作类型640。源偏移630指定在源缓冲器或源存储器装置中的何处开始数据传送。目的地偏移635指定在目的地缓冲器或目的地存储器装置中的何处存储所传送的数据。操作类型640指定要执行的操作的类型(例如,读、写、原子的)。应注意,在其他实现方式中,网络分组模板605包括由第二处理器动态地用运行时信息填充的其他数目和类型的字段。而且,在进一步的实现方式中,网络分组模板605以其他合适的方式进行结构化。
[0035]
现在参考图7,示出了用于创建和使用网络分组模板的方法700的一个实现方式。出于论述的目的,按顺序次序示出此实现方式中的步骤和图8的那些步骤。然而,应注意,在所描述的方法的各种实现方式中,所描述的要素中的一个或多个同时执行,以不同于所示
的次序执行,或者被完全省略。还可根据需要执行其他另外的元件。本文所述的各种系统或装置中的任一者被配置为实现方法700。
[0036]
第一处理器根据模板创建网络分组,并且填充该网络分组的第一字段子集(框705)。在一个实现方式中,第一处理器是cpu。第一处理器将网络分组存储在可由第二处理器访问的位置(框710)。在一个实现方式中,第一处理器在没有从第二处理器接收到对网络分组模板的明确请求的情况下执行步骤705和710。这允许步骤705和710提前并且在关键路径之外执行。在一个实现方式中,没有为由第一处理器存储的网络分组设置就绪标志,以指示所述网络分组尚未准备好被nic处理。未设置就绪标志还指示第二处理器仍需要在网络分组准备就绪之前向网络分组添加更多数据。
[0037]
而且,第一处理器在第二处理器上启动内核(框715)。在一个实现方式中,第二处理器是gpu。应注意,步骤715有时与步骤705和710并行执行,或者在步骤705和710之前执行。接下来,在内核执行期间,第二处理器响应于由内核检测到网络通信请求而填充网络分组的第二字段子集(框720)。然后,第二处理器通知nic:网络分组已准备好被处理(框725)。接下来,nic使用从第一字段子集和从第二字段子集检索到的数据来处理网络分组(框730)。在框730之后,方法700结束。
[0038]
现在转到图8,示出了用于确定何时将网络分组模板添加到队列中的方法800的一个实现方式。第一处理器监测存储网络分组的队列的状态(框805)。如果检测到针对队列的第一条件(条件框810,“是”分支),则第一处理器创建一个或多个网络分组并将其添加到队列(框815)。在一个实现方式中,第一条件是队列的占用水平低于阈值,其中占用水平被指定为存储在队列中并准备好被第二处理器填充的有效网络分组的数目。在一个实现方式中,阈值由第二处理器编程,该第二处理器更新存储在队列中的网络分组。在此实现方式中,第二处理器基于第二处理器当前正在执行的内核的状态来调整阈值。例如,在一个实现方式中,如果第二处理器执行正在生成相对大量网络请求的内核,则第二处理器动态地降低阈值以确保第一处理器在队列上保留大量网络分组。在其他实现方式中,第二处理器基于一个或多个其他因素来调整阈值。
[0039]
在另一实现方式中,第一条件是队列具有一个或多个用于存储网络分组的可用槽位。在其他实现方式中,第一条件是各种其他类型的条件中的任一种。如果未检测到针对队列的第一条件(条件框810,“否”分支),则第一处理器在再次检查队列的状态之前等待可编程的时间量(框820)。在一个实现方式中,可编程的时间量由第二处理器基于与当前正在执行的内核相关联的一个或多个因素来确定。在框820之后,方法800返回到框805。
[0040]
现在参考图9,示出了用于确定何时将网络分组模板添加到队列中的方法900的另一实现方式。在具有第一处理器(例如,cpu)和第二处理器(例如,gpu)的系统中,第二处理器监测存储网络分组的队列的状态(框905)。如果检测到针对队列的第一条件(条件框910,“是”分支),则第二处理器为第一处理器生成中断以创建一个或多个网络分组并将其添加到队列(框915)。响应于接收到该中断,第一处理器创建一个或多个网络分组并将其添加到队列(框920)。
[0041]
在一个实现方式中,第一条件是队列的占用水平低于阈值,其中占用水平被指定为存储在队列中并且准备好被第二处理器填充一个或多个字段的有效网络分组的数目。在另一实现方式中,第一条件是队列具有一个或多个用于存储网络分组的可用槽位。在其他
实现方式中,第一条件是各种其他类型的条件中的任一种。如果未检测到针对队列的第一条件(条件框910,“否”分支),则第二处理器在再次检查队列的状态之前等待可编程的时间量(框925)。在框925之后,方法900返回到框905。
[0042]
在各种实现方式中,使用软件应用程序的程序指令来实现本文所述的方法和/或机制。例如,可由通用或专用处理器执行的程序指令是预期的。在各种实现方式中,此类程序指令由高级编程语言表示。在其他实现方式中,程序指令从高级编程语言编译成二进制形式、中间形式或其他形式。替代地,写入描述硬件的行为或设计的程序指令。此类程序指令由诸如c的高级编程语言表示。替代地,使用诸如verilog的硬件设计语言(hdl)。在各种实现方式中,程序指令存储在多种非暂时性计算机可读存储介质中的任一种上。在使用期间,计算系统可访问存储介质,以将程序指令提供到计算系统以用于程序执行。一般来讲,此类计算系统至少包括一个或多个存储器和被配置为执行程序指令的一个或多个处理器。
[0043]
应当强调的是,上述实现方式仅是实现方式的非限制性示例。一旦完全明了以上公开内容,许多变化和修改对于本领域技术人员而言将变得显而易见。以下权利要求意图解释为包含所有此类变化和修改。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1