用于现场可编程门阵列设备的通信的制作方法

文档序号:16208135发布日期:2018-12-08 07:22阅读:208来源:国知局
用于现场可编程门阵列设备的通信的制作方法
近年来,为了满足日益增长的高性能和高能效的要求,在数据中心等各种计算系统中部署了大量的现场可编程门阵列(fpga)设备。在许多使用场景中,fpga设备要与不同类型的其他设备通信,例如其他fpga设备、处理设备(例如中央处理单元(cpu)、图形处理单元(gpu)等)、存储设备(例如内存、板载动态随机存储器(dram)等)。这些不同的设备可能位于与fpga设备相同的计算机中或者位于远程的计算机中。因此,需要用于支持fpga设备的通信的有效方案。技术实现要素:提出了一种用于支持现场可编程门阵列(fpga)的通信的方案。在fpga设备的实现中,该fpga设备包括应用模块和多个协议栈模块。多个协议栈模块可操作以基于不同的通信协议经由fpga设备的物理接口访问多个目标设备。该fpga设备还包括通用访问模块,可操作以从应用模块接收第一数据和多个目标设备中的第一目标设备的第一标识,第一目标设备充当第一数据的目的地。通用访问模块还可操作以基于第一标识和预定的第一路由信息,将第一数据发送给多个协议栈模块中的第一协议栈模块,第一协议栈模块经由物理接口可访问第一目标设备。通过通用访问模块的引入,为应用模块提供了统一和直接的通信。提供
发明内容部分是为了简化的形式来介绍对概念的选择,其在下文的具体实施方式中将被进一步描述。
发明内容部分无意标识要求保护的主题的关键特征或主要特征,也无意限制要求保护的主题的范围。附图说明图1示出了能够实施本公开的多个实现的计算环境的框图;图2示出了常规的fpga设备的结构框图;图3示出了根据本公开的一些实现的fpga设备的结构框图;图4示出了根据本公开的一些实现的图3的fpga设备中的通用访问模块的示例结构;图5示出了根据本公开的一些实现的图4的通用访问模块中的连接器的示例结构;图6示出了根据本公开的一些实现的通用访问模块中的消息的报头格式的示意图;图7示出了根据本公开的一些实现的包含fpga设备的计算设备的结构框图;图8示出了根据本公开的另一些实现的fpga设备的结构框图;以及图9示出了根据本公开的一些实现的用于fpga设备的通信的过程的流程图。这些附图中,相同或相似参考符号用于表示相同或相似元素。具体实施方式现在将参照若干示例实现来论述本公开。应当理解,论述了这些实现仅是为了使得本领域普通技术人员能够更好地理解且因此实现本公开,而不是暗示对本主题的范围的任何限制。如本文所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实现”和“一种实现”要被解读为“至少一个实现”。术语“另一个实现”要被解读为“至少一个其他实现”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。示例环境图1示出了能够实施本公开的多个实现的计算环境100的框图。在计算环境100中,多个计算设备102、104和106经由设备间联网结构160互连。这些计算设备组成的系统可以用于各种计算、处理、存储等目的。在计算设备102、104和106中的一个或多个计算设备中包括各种处理和存储设备。图1示出了计算设备102的具体结构。如图所示,计算设备102包括多个fpga设备110-1和fpga设备110-2(在下文中被统称或单独称为fpga设备110)、一个或多个处理设备120和一个或多个存储设备130。计算设备102中的设备110、120和130可以经由设备内联网结构140互连。在一些实现中,设备内联网结构140还可以经由网络接口卡(nic)150连接到设备间联网结构160,从而实现与其他计算设备的通信。在一些实现中,每个fpga设备110可以被放置在子板(也被称为fpga设备板)上,该子板上可以具有各种物理接口。一个或多个fpga设备板可以被安装到计算设备102的母板上,以实现与计算设备102的其他设备的物理接口的互连以及设备间的互连。在另外一些实现中,fpga设备板也可以具有与设备间联网结构160的直接连接。例如,如图1所示,fpga设备110-2具有连接到设备内联网结构140的物理接口。对于fpga设备110-2,除了连接到设备内联网结构140的物理接口之外,还可以具有不同的物理接口直接连接到设备间联网结构160。在计算设备102中,处理设备120能够根据存储设备130中存储的程序来执行各种处理。处理设备120的示例可以包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、控制器等。处理设备120可以是单核或多核处理设备。存储设备130可以包括多个计算机存储介质,包括但不限于易失性和非易失性介质、可拆卸和不可拆卸介质。存储器130可以是易失性存储器(例如寄存器、高速缓存、随机访问存储器(ram)、动态ram(dram))、非易失性存储器(例如,只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、闪存、硬盘、固态硬盘(ssd))或其某种组合。在一些实现中,计算设备102、104和106中的任何设备可以被实现为服务终端或用户终端。服务终端可以是各种服务提供方提供的服务器、大型计算设备等。用户终端诸如是任意类型的移动终端、固定终端或便携式终端,包括移动手机、多媒体计算机、多媒体平板、互联网节点、通信器、台式计算机、膝上型计算机、笔记本计算机、上网本计算机、平板计算机等。虽然图1仅示出了计算设备102的具体结构,在一些实现中,设备104和106也可以具有计算设备102所示出的组件中的一些或全部组件,也可以包括不同的组件。图1示出的计算设备102的组件的数目、组成和连接关系仅是示例。在其他实现中,计算设备102可以包括不同数目的fpga设备、处理设备和存储设备或者仅包括这些设备中的一些。计算设备102中的各个设备的连接方式也可以不同。在图1的计算环境100中,fpga设备110可能需要和计算设备102内的其他fpga设备、处理设备和存储设备通信,以交换数据。此外,fpga设备110还可能与其他计算设备104、106内的fpga设备、处理设备和存储设备通信。例如,在基于fpga的分布式数据库系统或者高速分布式存储系统中,fpga设备需要频繁地访问本地和远程存储设备。在基于fpga的大数据分析系统中,则要求fpga设备与本地或远程处理设备(例如cpu)的频繁通信。此外,很多机器学习系统可能采用多个fpga设备来加速计算能力,在这过程中,数据和中间计算结果将在fpga设备之间不断地被传送。fpga设备要与之通信的设备可以被称为目标设备。目标设备作为通信对象,也可以被称为fpga设备的资源设备(或简称资源)。存在许多应用场景需要fpga设备与目标设备的通信。通常,fpga设备110具有不同的物理接口可以连接到计算设备102内的目标设备和连接到其他计算设备(进而连接到该设备中的目标设备)。由于目标设备的类型和位置不同并且所采用的物理接口不同,fpga设备110中被部署不同的协议栈模块,用于支持经由不同物理接口与不同目标设备的通信。图2示出了常规的fpga设备110的具体结构框图。如图所示,fpga设备110被部署有多个协议栈模块220-1至220-4(在下文中被统称或单独称为协议栈模块220),不同协议栈模块基于不同通信协议来配置,用于支持经由相应物理接口230-1、230-2和230-3(在下文中被统称或单独称为物理接口230)与目标设备通信。物理接口230可以提供与目标设备的相应物理接口的互连。在fpga设备110中,存在一个或多个应用模块210-1和210-2(在下文中被统称或单独称为应用模块210)。应用模块也可以简称为应用,是fpga设备中被设计用于诸如各种计算、处理、分析等各种任务的部分。应用模块210在需要时可建立与协议栈模块220的连接,以便经由协议栈模块220将数据从相应物理接口传输至目标设备或者从目标设备获得数据。基于目标设备的位置和类型的不同,应用模块210选择不同的协议栈模块220。以下简单介绍不同的fpga设备110可能具有的物理接口230以及一些已有的协议栈模块220。物理接口230通常包括双倍数据速率(doubledatarate,ddr)控制器接口、快速外围组件互连(peripheralcomponentinterconnectexpress,pcie)接口、以及四小型可插拔(quadsmallform-factorpluggable,qsfp)接口或qsfp+接口中的一个或多个。ddr控制器接口用于fpga设备110访问板载dram(与存储设备130不同,未被示出)。pcie接口用于fpga设备110与本机的处理设备120、存储设备130或其他fpga设备110通信。pcie接口通信可以通过三种不同路径,包括ddr控制器、根复合体(rootcomplex)和pcie交换器来实现与上述设备的通信。qsfp或qsfp+接口是联网接口。fpga设备110可以通过qsfp或qsfp+接口连接到设备间联网结构160以作为该联网结构的单独节点,从而实现与其他计算设备的通信。存在各种协议栈模块可以被部署到fpga设备110中,用于支持fpga设备110与目标设备的通信。这些协议栈模块可以根据不同开发者的需要和偏好来设计和部署,并且基于各自的通信协议来实现不同的通信目的。有些协议栈模块还可以使用相同的物理接口。在一些实现中,协议栈模块230的示例可以包括但不限于:ddr协议栈模块,用于处理经由ddr控制器接口的通信,从而访问板载dram(与fpga设备处于同一块板上);直接存储器访问(directmemoryaccess,dma)协议栈模块,用于通过pcie接口从本机的内存读取数据和/或向内存写入数据;fpga/主机协议栈模块,用于通过pcie接口与本地cpu通信;fpga/gpu直接协议栈模块,用于使得fpga设备110通过pcie接口与gpu和gpu内存直接地通信;轻量级传输层(lightweighttransportlayer,ltl)协议栈模块,是一种轻量级网络栈,用于通过联网协议(例如以太网)实现fpga设备110与其他计算设备上的fpga设备的之间的通信,该协议栈模块可以使用qsfp或qsfp+接口;以及量化阻塞通知(quantizedcongestionnotification,qcn)协议栈模块、例如ieee802.1qauqcn协议栈模块也可以被实现在fpga设备110上用于通过以太网实现不同计算设备的fpga设备之间的通信,该协议栈模块可以使用qsfp或qsfp+接口。通过上述协议栈模块可以看出,取决于fpga设备110的不同应用模块210要通信的目标设备的类型和所处的位置,要建立应用模块210与相应的协议栈模块230的连接,使得应用模块210可以利用连接到的协议栈模块230所使用的物理接口来向目标设备发送和从目标设备接收数据。这样的fpga设备通信过程存在通信效率和扩展性等方面的局限性。具体而言,不同协议栈模块提供的接口不同,因而应用模块与协议栈模块之间的连接建立往往需要开发人员根据协议栈模块所基于的通信协议来手动设计。这就要求开发人员对不同协议栈模块的通信协议和接口设计非常了解,并且预先设计好应用模块的可能的通信。这不仅增加了通信的成本、而且也不利于fpga通信的扩展。而且,协议栈模块对物理接口的使用是独占式使用,也就是一个物理接口在一个时段内仅能服务一个协议栈模块。对于需要经由同一物理接口进行通信的协议栈模块而言将造成显著的时延。此外,由于协议栈模块之间的通信是独立的,如果fpga设备缺乏与目标设备的直接连接,将不能够与该目标设备进行通信。这在fpga设备110期望与其他计算设备上的目标设备通信时更经常出现。例如,如果fpga设备110期望向另一计算设备上的dram传输数据但是却没有与该dram的直接连接(经由网络),因此fpga设备110将不得不借助本机的cpu来中转数据,这相比于纯硬件的数据通信而言在速度和稳定性方面都有所降低。利用通用访问模块的fpga通信根据本公开的示例实现,提出了一种用于支持fpga设备的通信的方案。在该方案中,fpga设备包括通用访问模块,用于提供fpga设备的各个应用模块与不同协议栈模块的统一和直接通信,使得fpga设备可以访问本机和远程的目标设备。统一性体现在,该通用访问模块为fpga设备内的一个或多个应用模块提供单一接口来访问目标设备。通用访问模块并非一个额外的协议栈模块或物理连接,而是可以被认为是在fpga设备所包括的协议栈模块之上的抽象叠加层。该通用访问模块可以根据应用模块的通信来选择多个协议栈模块中的相应协议栈模块来实现通信。直接通信体现在,除了fpga设备通过物理接口直接互连的目标设备之外,通用访问模块还可以在本地计算设备和远程计算设备之间提供对目标设备的直接访问,而无论fpga设备是否具有与这些设备的直接连接。基于这样的统一和直接通信的特性,通用访问模块也可以被称为直接通用访问(dua)模块或dua叠加层。以下参考附图来说明本公开的基本原理和若干示例实现。图3示出了根据本公开的一些实现的fpga设备300的结构框图。在一些实现中,该fpga设备300可以被实现为计算环境100中的一个或多个计算设备102、104和106中的fpga设备。在图3的实现中,fpga设备300可以包括一个或多个应用模块310-1和310-2(在下文中被统称或单独称为应用模块310),多个协议栈模块320-1至320-4(在下文中被统称或单独称为协议栈模块320),以及一个或多个物理接口330-1至330-3(在下文中被统称或单独称为物理接口330)。应当理解,图3示出的应用模块、协议栈模块和物理接口的数目仅是示例性的。在其他实现中,fpga设备300可以包括更多或更少的应用模块(例如,单个应用模块),更多或更少的物理接口(例如,单个物理接口)以及其他数目的协议栈模块320。多个协议栈模块320可操作以基于不同的通信协议经由fpga设备300的物理接口330访问多个目标设备。协议栈模块320的示例可以包括例如以上提及的ddr协议栈模块、dma协议栈模块、fpga/主机协议栈模块、fpga/gpu直接协议栈模块、ltl协议栈模块、qcn协议栈模块中的一个或多个。物理接口330可以包括例如ddr控制器接口、pcie接口和qsfp接口或qsfp+接口中的一个或多个。取决于协议栈模块的设计,相应的物理接口可以被使用。在一些实现中,多个协议栈模块320(例如,协议栈模块320-3和320-4)可以经由单个物理接口330(例如,物理接口330-1)访问不同的目标设备。取决于fpga设备300所具有的物理接口330以及fpga设备300所处的计算设备以及计算环境中的互连结构,可访问的目标设备可以是fpga设备300所处的计算设备和/或远程计算设备中的fpga设备、各种处理设备和存储设备。在本公开的实现中,“可访问”的目标设备指的是经由fpga设备的任一物理接口330可以直接连接或间接连接(例如,通过其他设备中继)到的设备。fpga设备300可能期望向这些设备发送/写入数据,和/或从这些设备接收/读出数据。根据本公开的实现,fpga设备300还包括通用访问模块302。通用访问模块302用于为应用模块310和协议栈模块320提供统一接口。通用访问模块302负责将应用模块310对不同目标设备的通信转发给相应的协议栈模块320。因此,即使fpga设备300中包括多个协议栈模块320,应用模块310仍然可以通过通用访问模块302的统一接口来实现通信。由此,通用访问模块302充当了应用模块310与协议栈模块320之间的路由器,利用已有的协议栈模块320和物理接口310来支持应用模块310的数据通信。通过这种方式,应用模块310可以透明地与多个目标设备通信,而不需要事先了解这些目标设备在本地或远程计算设备或者是否存在与这些目标设备的可能的通信连接。为了实现与本地计算设备和/或远程计算设备中的不同目标设备的连接,在fpga设备300的应用模块310及其应用要访问的目标设备之间可以提供寻址和路由。在本公开的实现中,可以为不同目标设备分配不同标识,用于对目标设备寻址。这样的标识可以被称为通用标识(uid)。对于作为通信的发起方,fpga设备300也可以被分配相应的uid。在一些实现中,可以将目标设备和fpga设备300所处的计算设备(例如服务器)的互联网协议(ip)地址作为的它们的uid的一部分,并且为了进一步区分各个计算设备中的不同目标设备和fpga设备300,再为它们在设备内设置唯一的标识符。在另外一些实现中,为了还可以在具有多个应用模块310的fpga设备300内部区分应用模块310,同一fpga设备300内的不同应用模块310可以被分配不同的uid。对于作为目标设备的fpga设备而言,它的不同应用模块310也可以被分配不同的uid。除了寻址的标识之外,通用访问模块302还利用路由信息来将应用模块310的数据路由至可访问目标设备的协议栈模块320,或者将协议栈模块320获得的数据路由给相应的应用模块310。路由信息可以被预先存储在通用访问模块302,用于指示当数据的目的地是某个目标设备时,应当将数据转发到哪个协议栈模块320。在一些简单路由路径的情况中,路由信息可以被预先配置在通用访问模块302中。在另外一些实现中,针对不同的数据通信,路由信息可以由具有处理能力的设备或模块计算,然后被返回给通用访问模块302。对于路由的管理将在以下详细讨论。以下将介绍在不同的通信情况下通用访问模块302的操作。在一些实现中,应用模块310期望访问某个目标设备的数据。通用访问模块302从应用模块310接收数据和多个目标设备中的第一目标设备的标识。为了解释说明的目的,从应用模块310接收的数据和标识称为第一数据和第一标识。通过该第一标识,通用访问模块302可以确定第一目标设备充当第一数据的目的地。应用模块310可能在各种情况下需要访问第一目标设备并且因此提供第一数据。例如,应用模块310可能需要向本地或远程计算设备的处理设备或fpga设备发送数据,或者可能期望向本地或远程计算设备的存储设备写入数据或读取数据。在发送或写入数据的情况中,第一数据包括应用模块310实际要发送或写入的数据,在读取存储数据的情况中,第一数据可以包括标识对存储设备的某部分数据的读取请求的信息。为了路由第一数据,通用访问模块302基于第一标识和预定的路由信息(被称为第一路由信息)将第一数据发送给对应的协议栈模块320(被称为第一协议栈模块320)。预定的第一路由信息可以包括第一标识与第一协议栈模块320之间的映射,因为第一协议栈模块320可以经由它连接到的物理接口330访问作为目的地的第一目标设备。在一些实现中,通用访问模块302可以将第一数据封装为消息并且路由给第一协议栈模块320。在接收到通用访问模块302发送的第一数据(或者以消息形式的第一数据之后),第一协议栈模块320可以按照自身的通信协议来处理接收到的数据或消息,并且向连接到的物理接口传输消息。本公开的实现对于协议栈模块的操作没有限制。在一些实现中,fpga设备300的应用模块310在发送第一数据时,还可以将应用模块310的标识(被称为第四标识)发送给通用访问模块302。第四标识可以随第一数据的发送一起被发送给第一协议栈模块320,以标识第一数据的源。在一些实现中,通用访问模块302可以将目的地是应用模块310的数据转发给应用模块310。这可以发生在目标设备主动或者基于应用模块310的请求(例如读取请求)而向应用模块310提供数据的情况中。具体地,通用访问模块302从协议栈模块320(被称为第二协议栈模块320)接收数据和标识。为了解释和说明的目的,此处的数据和标识分别被称为第二数据和第二标识。第二标识是fpga设备300中的特定应用模块310的标识,因而指示应用模块310是第二数据的目的地。通用访问模块302基于第二标识和预定的路由信息(被称为第二路由信息)将第二数据发送给应用模块310。第二路由信息可以包括第二标识与应用模块310之间的映射。除了作为应用模块310和协议栈模块320之间的路由器之外,在另外一些实现中,通用访问模块302还可以作为不同协议栈模块320之间的中继或路由器,用于执行在不同协议栈模块320之间的数据交换。在这些实现中,通用访问模块302从一个协议栈模块320接收数据和标识。为了解释和说明的目的,此处的数据和标识分别被称为第三数据和第三标识。第三标识是目标设备(被称为第二目标设备)的标识,指示第二目标设备是第三数据的目的地。通用访问模块302基于第三标识和预定的路由信息(被称为第三路由信息),将第三数据发送给对应的协议栈模块320(被称为第三协议栈模块320)。第三路由信息可以包括第三标识与第三协议栈模块320之间的映射,因为第三协议栈模块320可以经由它连接到的物理接口330访问作为目的地的第二目标设备。在协议栈模块320之间的数据转发可能在以下场景中发生:发送第三数据的fpga设备无法直接地连接至第二目标设备,但是可以连接到fpga设备300(或者通过其他设备再连接到fpga设备300),而fpga设备300支持对第二目标设备的访问。在这种场景下,fpga设备300被用作发送第三数据的fpga设备与第二目标设备之间的中继或路由器。具体地,第三数据首先从发送第三数据的fpga设备(或者通过其他设备)通过fpga设备300的一个物理接口被传送到fpga设备300的一个协议栈模块320(例如,320-2)。之后,接收到第三数据的协议栈模块320将数据提供给通用访问模块302,由通用访问模块302再将第三数据转发给可访问第二目标设备的第三协议栈模块320(例如,320-3),以便由第三协议栈模块320经由它连接到的物理接口将第三数据发送出去。第三协议栈模块320连接到的物理接口可以直接连接到第二目标设备,也可能还需要通过其他设备或联网结构的转发才能到达第二目标设备。fpga设备300中接收和发送第三数据的物理接口可以相同或不同,然而执行相应接收和发送的协议栈模块不同。根据上述过程可知,通用访问模块302的使用无需修改原有协议栈模块320的寻址方式,而是提供了在协议栈模块320之上的基于uid的寻址。因此,协议栈模块320仍然可以按照自身的通信协议来工作。通用访问模块302可以仅负责fpga设备300内的应用模块310和协议栈模块320之间的数据路由。在fpga设备300中引入通用访问模块302可以不影响协议栈模块320、fpga设备300的本地计算设备中的设备内网络连接以及计算设备之间的网络连接中的数据通信。通用访问模块302和协议栈模块320可以组成fpga设备300的数据平面340,用于应用模块310经由物理接口与目标设备的数据通信。在上述基于通用访问模块302的通信中,第一、第二和第三标识包括对应的目标设备和fpga设备中的应用模块的uid。在另外一些实现中,如果应用模块310与目标设备之间存在不同的通信连接,还可以利用标识来进一步区分这些连接。在这种情况中,除了利用设备或应用模块的uid来标识数据的目的地之外,还可以附加地使用连接的标识来标识数据的源和目的地之间的不同连接。为了区分的目的,连接的标识在本文中有时被称为第五标识。连接的标识可以被理解为应用模块310和目标设备之间用于针对不同业务类型的数据通信的“端口”的标识,并且因此可以由数据的源处的端口标识(被称为源连接标识或源端口标识)和数据的目的地处的端口标识组成(被称为目的地连接标识或目的地端口标识)。应当理解,应用模块310和目标设备不一定具有实际的端口用于连接,连接标识仅为了指示针对相应通信而建立的特定连接。在连接建立之后,应用模块310和目标设备之间的数据可以被认为在由连接标识所指示的连接中被传送和接收。应用模块310与目标设备之间可存在不同的通信连接,并且可以根据需要动态地建立和关闭。在一些实现中,通信发起方(例如,应用模块310)可以获知通信的目的地连接标识,并且还可能获知源连接标识。在另外一些实现中,源连接标识可能未知,可以根据通信的发起方(例如,应用模块310)的请求来被分配。源连接标识的分配可以由具有处理能力的处理设备(例如cpu)来执行。连接建立以及连接标识的示例将在下文中讨论。下文将详细介绍通用访问模块302的示例实现以及由处理设备为通用访问模块302提供的路由和连接管理。通用访问模块的示例实现如以上提及的,通用访问模块302提供了统一接口,用于实现应用模块310与多个协议栈模块320的通信。在通信中,通用访问模块302充当路由器的角色,将数据从应用模块310或协议栈模块320路由到其他协议栈模块320或应用模块310。在一些实现中,通用访问模块302可以包括多个连接器和将多个连接器互连的交换结构。每个连接器与一个应用模块310或协议栈模块320相连。图4示出了通用访问模块302的示例结构。如图所示,通用访问模块302包括多个连接器402-1至402-6,分别连接到应用模块310-1和310-2以及协议栈模块320-1至320-4。多个连接器402-1至402-6可以具有相同的输入/输出(i/o)接口,从而方便扩展以容纳更多的应用模块和协议栈模块。多个连接器402-1至402-6在下文中可以被统称为或单独称为连接器402。多个连接器402通过交换结构410互连。各个连接器402可以被认为是交换结构410的端口。交换结构410可以是交叉交换机(crossbarswitch),用于将源端口(连接器)输入的数据转发到目的地端口(连接器)。每个连接器402被设置在应用模块310或协议栈模块320与交换结构410之间。数据在通用访问模块302中可以以消息的形式被传送,该消息可以被称为dua消息。通用访问模块302通过连接器402提供统一接口,使得通用访问模块302对于应用模块310和/或协议栈模块320透明。在一些实现中,连接到连接器402的应用模块310或协议栈模块320可以利用类似于伯克利软件分布(berkeleysoftwaredistributionsocket,bsd)套件(socket)的通信原语(primitive)来发起与连接器402的通信。这样的原语可以包括多种类型。第一种类型的原语可以是连接建立/关闭原语,包括连接(connect)、监听(listen)和关闭(close),用于指示应用模块310开始和关闭与某个目标设备的连接。第二种类型的原语包括数据传输原语,包括发送(send)、接收(recv)、写入(read和读取(read)原语。发送或接收原语用于指示向计算设备(例如处理设备和其他fpga设备)发送数据或从计算设备接收数据;而写入或读取原语用于指示向存储设备写入数据或从存储设备读取数据。还可以存在一种配置(config)原语,用于支持应用模块310配置通信参数。这些原语在通用访问模块302中的具体应用将在下文描述。应当理解,以上描述的通信原语仅仅是一些具体示例,并且在一些实现中可以仅采用上述原语中的一部分。在另外的实现中,还可以定义各种其他通信原语来促进通用访问模块302与应用模块310和/或协议栈模块320的通信。每个连接器402提供基于上述原语的dua消息发送和接收。图5示出了连接器402的示例i/o接口。连接器402可以包括请求接口510(作为输入接口),用于从连接的应用模块310或协议栈模块320接收dua消息,并且还包括响应接口(作为输出接口)520,用于向连接的应用模块310或协议栈模块320传输dua消息。请求接口510和响应接口520分别通过不同的硬件插口或端口接收和发送dua消息。由于被实现在fpga设备300中,连接器402支持硬件形式的通信。也就是说,请求接口510和响应接口520同时地工作,不断地接收和发送消息。在图5中还详细示出了连接器402的请求接口510和响应接口520的不同端口可能发送/接收的信息。如图所示,请求接口510包括端口511至517,用于实现从应用模块310或协议栈模块320到连接器402的信息接收。从端口511至514接收到的信息可以组成连接器402的输入dua消息,而其他端口的信息用于协助请求接口510对dua消息的接收。以下介绍不同端口处的信息。端口511接收应用模块310或协议栈模块320的类型信息,指示所发送的dua消息的类型。如果请求接口510的请求(输入)由应用模块310触发,则接收到的dua消息的类型可以基于上述不同的通信原语,例如连接、监听、连接关闭、发送、接收、写入、读取和配置等。如果请求接口510的请求(输入)由协议栈模块320触发并且涉及协议栈模块之间的数据传送,则类型被设置为转发“forward”。在其他情况下,如果请求接口510的请求(输入)由协议栈模块320触发,类型的设置为与应用模块310基于不同通信原语触发的类型类似。端口512和513分别从应用模块310或协议栈模块320接收dua的数据信息以及该数据的长度信息。如果请求接口510的请求(输入)包含实际要被传送的数据(例如,类型为发送、写入或转发),可以从端口512和513接收到相应的信息。端口514接收应用模块310或协议栈模块320发送的标识(id)信息。标识信息标识要访问(要发送、读取和写入)的数据的目的地设备(如以上讨论的第一、第二、第三标识)。在一些情况下,标识信息标识数据的源设备(如以上讨论的第四标识)。目的地设备或源设备(在一些情况下是fpga设备的应用模块)的标识可以如以上提及的被称为uid。标识信息还可以包括指示数据的源与数据的目的地之间的连接的标识,包括连接的源标识和目的地标识。端口514处的id可以被表示为<srcuid:srcinst,dstuid:dstinst>,其中srcuid和dstuid分别是消息的源设备(或其中的应用模块)和目的地设备(或其中的应用模块)的标识。srcinst和dstinst组成从源设备(或其中的应用模块)到目的地设备(或其中的应用模块)的连接的标识。srcinst和dstinst有时可以被认为是数据的源处的端口标识和数据的目的地处的端口标识,这两个端口组成要传输的数据的连接。在一些实现中,在应用模块310还未建立与目标设备的连接时,从应用模块310发送的连接建立请求消息中id的srcinst可能是未知的,因此相应位置可以被设置为预定值(例如全零值)。在信息接收过程中,连接器402可以将从端口511至514接收到的信息,类型、长度和id信息组成dua消息的报头部分,并且将数据作为dua消息的数据部分。报头部分的格式如图6所示。在图5和图6中都指示了类型、长度、id和数据的可能占据的比特/字节的长度,但应当理解这都是示例的。在实际应用中,可以根据需要设置这些信息的大小。请求接口510还包括端口515,用于连接器402向连接的应用模块310或协议栈模块320指示连接器402是否处于忙碌状态。如果该端口未被设置,则应用模块310或协议栈模块320可以发送信息。该端口可以避免同一应用模块310或协议栈模块320的不同连接的竞争。端口517也可以用于指示连接器402准备好接收。端口516用于应用模块310或协议栈模块320向连接器402指示其他端口发送给连接器402的信息是有效的。连接器402的响应接口520也可以包括端口521至527,用于实现从连接器402向应用模块310或协议栈模块320的信息发送。端口521至524上的信息与请求接口510的端口511和514上的信息类似,组成从连接器402输出的dua消息。端口525是事件端口,用于向应用模块310或协议栈模块320返回先前的dua消息(请求接口510处)的完成状态(例如,成功或失败)。端口526向应用模块310或协议栈模块320指示连接器402当前发送的信息是有效的,并且端口527被设置时指示应用模块310或协议栈模块320准备好发送消息。通过参照图5的描述,连接器402可以经由自身的端口从应用模块310或协议栈模块320接收信息或向该模块发送信息,这些信息由连接器402封装为dua消息的形式(可能包括报头和数据部分)。除了接收和发送dua消息以及其他辅助信息之外,连接器402还维护和查询路由信息。连接器402可以仅维护本身涉及的路由,例如涉及与其连接的应用模块或协议栈模块的路由信息。连接器402基于路由信息确定dua消息的输出端口(输出的连接器402),并且通过交互结构410使得dua消息被转发到相应的连接器402,进而转发给相连的应用模块310或协议栈模块320。以上参照图5至图6描述了通用访问模块302中的连接器402的统一接口。在上文描述中,在数据传输过程中,通用访问模块302涉及的不同通信情况包括由应用模块310发起的数据传输以及从协议栈模块320到应用模块310或其他协议栈模块320的数据传输。其他过程,例如应用模块310可能的连接建立、监听、关闭和配置过程也可以涉及通用访问模块302的转发。从连接器402的角度来看,这些过程涉及的传输被划分为两类:来自通用访问模块302外部的信息和在通用访问模块302内部(从交互结构410)的信息。针对这两类过程,简要描述连接器402内部的消息传送过程。当连接器402从通用访问模块302外部接收到数据时,连接器402可以查询路由信息来确定对数据的处理。通过检查端口511处的类型信息来确定该数据来自应用模块310或协议栈模块320。如果类型为转发(forward),则意味着该数据已经是dua消息格式,并且因此连接器402通过路由信息将dua消息传递给交换结构410,以从其他连接器402传递给其他协议栈模块320。如果类型不是转发,在查询路由信息和将端口512的数据发送给交换结构410之前,连接器402将数据封装为dua消息(即将端口511、513、514处的类型、长度和id信息作为dua消息的报头,如图6所示)。如果数据来自应用模块310并且端口513的id不包含应用模块310的源标识(srcuid)和连接的源标识(srcinst),连接器402还可以将srcuid和srcinst添加到dua消息的报头。当连接器402接收到在通用访问模块302内部(从交互结构410)的信息(dua消息的形式),连接器402可以检查dua消息的目的地id(即dstuid和dstinst)是否是其连接到的应用模块310或协议栈模块320的标识。如果是的话,连接器402从dua消息中转译出原始数据(即dua消息的数据部分),并且使用数据和dua消息的报头部分来设置响应接口520的对应端口。如果目的地id不是其连接到的应用模块310或协议栈模块320的标识,连接器402将dua消息的类型设置为转发类型,并且将整个dua消息发送给相连的协议栈模块320。协议栈模块320将整个dua消息作为输入数据来处理。在一些实现中,通用访问模块302的交换结构410总是将输入的dua消息转发到对应的输出端口(对应的连接器402)。在一些实现中,来自一个或多个连接器402的输入dua消息可以被分割为分片,并且通过交互结构410转发到对应的输出端口。分片然后在交换结构的输出端口处被重组,然后被发送给对应的连接器402。返回参照图4,在以上描述中,协议栈模块320可以被设计为支持通用访问模块302的连接器402的请求和响应接口(或i/o接口)510和520。如果一个或多个协议栈模块320不支持这样的i/o接口,还可以在协议栈模块320与连接器402之间设置转译器,以使得协议栈模块320可以通过这些转译器容易地连接到通用访问模块302。如图4所示,在协议栈模块320-1至320-3与相应的连接器402-3值402-4之间分别设置了转译器420-1至420-3(下文中被统称为或单独称为转译器)。协议栈模块320-4可以本身就已被设计为能够连接到连接器402。转译器420可以根据其连接的协议栈模块320而被单独地设计。例如,如果协议栈模块320-1是dma协议栈模块,用于经由pcie接口访问存储设备,那么转译器420-1将来自连接器402-3的响应接口的信息转换为存储器操作。如果从连接器402-3接收到类型为读取(read)的数据(即应用模块310-1或310-2发起对存储设备的读取操作),那么转译器420-1可以调用协议栈模块320-1发出读取请求,读取请求的寻址地址根据从连接器402-3的id端口接收到的id来确定、特别是由该id中的dstinst来确定。转译器420-1也可以将id存储,以便当接收到所读取的数据时,将数据连同id一起发送回连接器402-3。通过上文讨论,借助连接器402和交互结构410(以及可能借助转译器420),通用访问模块302可以支持在应用模块310和协议栈模块320之间的数据路由。然而,应当理解,图4至图6仅给出了通用访问模块302的结构以及所采用的消息格式的一个具体示例。在其他实现中,还可以以其他方式设计通用访问模块302的路由功能。各种当前已有的或将来待开发的路由方法可以被采用来实现通用访问模块302。路由和连接管理在基于通用访问模块302的fpga设备数据通信之前,可能需要确认应用模块310要建立用于通信的连接是否有效和提供相应的路由信息。这样的过程被称为路由和连接管理过程。路由和连接管理可以利用处理效率更高的处理设备、例如cpu来实现。该处理设备可以与fpga设备300位于同一计算设备内并且与fpga设备可通信。图7示出了涉及示例计算设备700的示意图,其中部署了fpga设备300、处理设备720、另一fpga设备710以及存储设备730。fpga设备300是以上关于图3讨论的fpga设备的一个具体示例。存储设备730用于支持fpga设备300中的通用访问模块302的连接和路由管理。为了降低经由数据平面340与处理设备720通信连接和路由,在一些实现中,fpga设备300还包括控制模块(或控制代理(ca))702,用于在连接和路由管理方面与处理设备720通信。ca702可以经由如图4和图5所描述的连接器402来与通用访问模块302通信。在一些实现中,fpga设备710与fpga设备300类似,并且因此也可以包括基于通用访问模块302的数据平面740和用于与处理设备720通信的ca712。处理设备720可以管理计算设备700上的设备,并且响应于来自fpga设备的应用模块的连接建立请求而验证连接是否有效(例如目标设备标识和/或目的地连接标识是否有效,或者应用模块是否有权建立连接)。在确定连接有效的情况下,处理设备720可以分配可能的源连接标识(例如,srcinst)以及确定从该应用模块到目的地设备之间的路由路径。为了实现这些功能,处理设备720可以确定和维护计算设备700中的所有可访问资源。在一些实现中,fpga设备300和/或720中包含多个应用模块(以及可能的板载dram)都被认为是单独的资源,并且因而可以由fpga设备300和/或720上的ca702或712管理。fpga设备以及其他设备上的资源可以被汇总到处理设备720处。处理设备720可以存储计算设备700中的可访问资源及其寻址地址(即uid)。可访问资源指的是可作为fpga设备或其他通信发起方的目的地的设备。例如,在图7的示例中,计算设备700可以维护以下表1所列出的资源列表。该表指示了可访问资源、它们可能所处的fpga板(对于fpga设备上的资源而言)以及用于寻址的标识(uid)。表1可访问资源fpga板uid板载dramfpga300192.168.0.2:1:1应用模块310-1fpga300192.168.0.2:1:2应用模块310-2fpga300192.168.0.2:1:3板载dramfpga710192.168.0.2:2:1处理设备730\192.168.0.2:0:1………………如以上提及的,各个计算设备中的可访问资源的uid可以由计算设备的ip地址和为计算设备内的多个资源设置的唯一标识符组成。例如,在表1列出的uid中,192.168.0.2标识计算设备700的ip地址,并且进一步的标识(1:1、2:1、0:1)用于区分fpga板上的不同资源和计算设备700的其他资源。在一些实现中,每个设备或应用模块的uid可以由处理设备720预先分配并且被该设备或应用模块获知。例如,处理设备720可以将所分配的uid传送给fpga设备300和710上的ca702和712,并且由ca702和712缓存和/或通知给相应的设备或应用模块。在一些实现中,如果计算设备700中存在资源变更,例如在某个处理设备故障或被拆除、应用模块从fpga设备中被添加或删除、fpga设备的插拔等情况中,处理设备720均可以相应地更新表1并且为可能的新设备分配uid。uid的维护可用于fpga设备300的应用模块310的连接和路由管理。当应用模块310期望与某个目标设备通信时,可以由处理设备720确定在整个计算设备700、甚至与计算设备700可通信的其他计算设备组成的系统中是否可以存在从应用模块310到目标设备的路由路径。如果存在并且如果这样的路由路径以及该路由路径涉及的目标设备的连接端口(dstinst所标识)是有效的,处理设备720可以为应用模块310建立到目标设备的连接。在一些实现中,处理设备720还可以为该连接分配源连接标识(srcinst)。所分配的连接的标识可用于应用模块310的通信。具体地,应用模块310向通用访问模块302发送针对应用模块310到目标设备之间的连接的连接建立请求(连接器402接收到的类型信息为连接(connect)类型)。该连接建立请求至少包括目标设备的标识(即,dstuid),并且还可能包括目的地连接标识(即,dstinst)。在该情况下,dstuid和dstinst可以被设置在由连接器402的数据端口传送的数据中。通用访问模块302可以将该请求发送给处理设备720,例如经由fpga设备300中的ca702发送给处理设备720。通用访问模块302中与应用模块310连接的连接器402基于从端口接收到的类型信息为连接类型,将组成的dua消息转发连接到ca702的连接器402。与应用模块310连接的连接器402还将dua消息的报头中的dstuid设置为ca702的uid,将srcuid设置为应用模块310的uid,从而使得交换结构410可以将dua消息发送给与ca702连接的连接器402。在一些实现中,srcuid可以由应用模块310包括在连接建立请求中发送给通用访问模块302。在一些实现中,与ca702连接的连接器402还将与连接建立请求相关联的dstuid和dstinst包括在连接建立请求中并且将它们一起封装到dua消息的数据部分。该dua消息(经由响应接口)被传送给ca702。ca702将通用访问模块302转发的连接建立请求(以dua消息的形式)发送给处理设备720。ca702可以从dua消息的数据部分中提取出dstuid和dstinst并且提供给处理设备720以便处理设备720能够为进行请求的应用模块310与相应目标设备之间建立连接和分配路由信息。处理设备720基于接收到的指示应用模块310要通信的目标设备的标识(destuid)和发起该请求的源(即应用模块310)的标识(srcuid),验证是否存在从应用模块310到目标设备的可通信连接。例如,在图7的示例中,假设应用模块310-1请求与处理设备730建立连接。处理设备720确定应用模块310-1可以由协议栈模块320-1经由物理接口330-3和设备内联网结构760连接到存储设备730,如图7的路径750所示。在这样的确定下,处理设备720可以为该连接分配源连接标识。srcinst标识用于在应用模块310中标识该连接。由应用模块310已知的dstinst用于在目标设备(例如存储设备730)中标识连接。如果处理设备720确定应用模块310到目标设备之间的连接是有效的,则处理设备720可以向fpga设备300上的ca702返回针对连接建立请求的响应。所分配的源连接标识(srcinst)以及可能的目的地连接标识(dstinst)可以被包括在该响应中。通用访问模块302可以从ca702获得针对应用模块310的连接建立请求的响应中并且将该响应发送给进行请求的应用模块310。在上述连接建立过程中,处理设备720从系统的角度确定请求的应用模块310与目标设备之间的连接是否有效且可以建立。处理设备720可以通过例如表1的资源寻址表确定应用模块310是有效的设备。处理设备720还可以维护计算设备700内部可作为目标设备的资源以及这些资源与计算设备700外部的其他目标设备之间的互连信息表。该互连信息表指示每个fpga设备经由它的任意物理接口可能连接到本机或远程的其他fpga设备、处理设备或存储设备。以下表2给出了这样的互连表关系表的示例。表2基于表2提供的互连信息,处理设备720可以确定fpga设备300中应用模块310与fpga设备710之间可以建立连接。fpga设备300和710可以将自身的互连情况报告给处理设备720。当fpga设备内部和计算设备700的联网情况发生变化时,处理设备720可以获知该改变并且相应地更新所维护的互连信息。应当理解,表2仅给出了处理设备720维护的互连信息的一种示例形式。处理设备720还可以采用其他形式来建立互连信息。如果处理设备720验证从应用模块310到目标设备的连接有效,则意味着存在从应用模块310到目标设备之间的路由路径。路由路径的确定也基于应用模块310的标识和要通信的目标设备的标识。该路由路径可能涉及从应用模块310到目标设备之间的多个设备、协议栈模块、物理接口、联网结构等多跳路由。处理设备720可以将指示不同跳的路由信息发送给相关的设备。例如,处理设备720可以将指示fpga设备300内的部分路径的路由信息发送给fpga设备300中的通用访问模块302(经由ca702)。发送给fpga设备300的路由信息可以被缓存在通用访问模块302中,具体地,被缓存在所涉及的连接器402中。该路由信息可以包括应用模块310的标识(以及连接的标识)与协议栈模块320之间的映射。基于该路由信息,通用访问模块302可以获知当接收到应用模块310针对相应连接的数据时,如何转发到对应的协议栈模块320,以使得该数据可到达目标设备。在一些实现中,如果为应用模块310和目标设备确定的路由路径还涉及另外的设备,处理设备720还可以将指示在其他设备内的其余路由路径的其他路由信息发送给另外的设备。这样的情况存在于应用模块310所在的fpga设备300与目标设备不存在直接连接的情况,此时可能需要中间设备、包括中间的fpga设备中继应用模块310的数据。为了保证数据的路由,处理设备720可以将相应的路由信息也发送给所涉及的设备。通过处理设备720来为应用模块310建立连接和确定路由信息,可以利用处理设备720的高效处理能力来为应用模块310尽可能地确定出到达本机或远程目标设备的路由路径。在路由管理过程中,指示总的路由路径的信息被划分为与各个设备相关的路由信息并且发送给相关的设备使用,这可以进一步节省各个设备的存储空间并且提高路由效率。在一些实现中,当为应用模块310建立的连接之后,如果存在从fpga设备300所处的计算设备700到远程设备的连接(例如由ltl协议栈模块经由qspf+物理接口到另一计算设备的ltl协议栈模块),那么计算设备与计算设备之间的通信可以被配置为隧道通信。该隧道通信可以由fpga设备的一个或多个应用模块310的多个连接(如果存在的话)共享。在隧道通信中,不同连接的数据或消息以数据流的形式被传送到计算设备,并且进而被发送给计算设备内部的目标设备,诸如其中包括的fpga设备、处理设备和/或存储设备等。在一些实现中,应用模块310还可以请求关闭所建立的连接。对于连接的关闭的请求可以从应用模块310经由通用访问模块302、ca702而被发送给处理设备720。处理设备720可以根据应用模块310的请求释放相应的连接,从而可以将为该连接分配的连接标识重新分配给其他连接。处理设备720可以经由ca702向通用访问模块302发送连接关闭的成功响应。通用访问模块302因此可以删除为该连接存储的路由信息。通用访问模块302还可以将连接关闭的成功响应发送给应用模块310,因此应用模块310可以停止使用该连接。在一些情况下,如果存在连接的故障(例如该连接的路由路径上的目标设备、fpga设备的物理接口、通用访问模块或协议栈模块等发生故障),处理设备720也可以关闭该连接。以上描述了处理设备720对fpga设备300的连接和路由管理的支持。处理设备720和fpga设备300上的ca702可以被认为是fpga设备通信的控制平面,用于提供对fpga设备通信的控制方面的支持。在一些实现中,计算设备700中的另一fpga设备710也可以被部署有与fpga设备300的数据平面340类似的数据平面740,用于提供内部的应用模块与协议栈模块之间的统一和直接通信。在这种情况中,fpga设备740也可以包括ca712,用于与处理设备720交互以实现对通信的控制。在一些实现中,替代采用独立的处理设备720来支持连接和路由管理,可以由fpga设备300中的ca702充当处理设备,用于实现与以上关于处理设备720描述的类似功能,例如为应用模块310的通信建立连接、计算路由路径和断开连接等等。物理接口的复用在上文中讨论了通用访问模块302的示例实现和对基于通用访问模块302的通信的连接和路由管理支持。如以上提及的,被设置在应用模块310与协议栈模块320之间的通用访问302可以被被认为是在协议栈模块之上的抽象叠加层。在一些实现中,还可以在协议栈模块320之下设置一个层(或模块),用于提供协议栈模块320与物理接口330之间的复用。图8示出了这样的一个示例实现。如图8所示,接口复用模块810被设置在fpga设备300的协议栈模块320与物理接口330之间。接口复用模块810可操作以基于预定调度策略来调度物理接口330发送协议栈模块320的消息。与作为dua叠加层的通用访问模块302相比较,该接口复用模块810可以被称为dua底层。由于协议栈模块320基于各种各样的设计,多个协议栈模块320可能经由fpga设备300的同一物理接口330来发送数据给不同的目标设备。例如,在图3和图8的示例中,协议栈模块320-3和320-4均要经由物理接口330-1发送消息。在基于通用访问模块330的通信中,通用访问模块330可能同时向不同协议栈模块320发送数据(dua消息)。协议栈模块320基于相应的通信协议将接收到的数据封装为相应的消息以供发送。如果多个协议栈模块320同时要经由同一物理接口330发送消息,接口复用模块810可以充当复用器的角色,调度物理接口330发送每个协议栈模块320的数据。接口复用模块810可以采用各种调度策略来确定物理接口330应当被调度被哪个协议栈模块320发送数据。这样的调度策略包括但不限于公平共享策略、加权共享测量、严格优先级策略等等。当接口复用模块810从物理接口330接收到要被传送给协议栈模块320的数据时,接口复用模块810可以充当解复用器,将从同一物理接口接收到的消息转发给相应的协议栈模块。针对一个物理接口330仅服务一个协议栈模块320的情况,例如物理接口320-2与协议栈模块320-2以及物理接口320-3与协议栈模块320-1,接口复用模块810无需执行消息的复用和解复用。上文描述了根据本公开的示例实现的fpga设备,并且提供了各种基于通用访问模块、处理设备和接口复用模块等的示例实现。根据这些实现,fpga设备中在执行数据通信时,可以获得多方面的优势。例如,通过通用访问模块的引入,为应用模块提供了统一接口来经由不同协议栈模块执行数据通信。应用模块因此无需根据底层的协议栈模块的不同来变化应用模块的接口设计,简化了通信过程。此外,通用访问模块的路由功能(以及由处理设备支持的路由管理)可以为应用模块提供直接访问。应用模块无需事先获知要通信的目标设备的位置、类型以及是否存在直接连接。根据本公开的实现的fpga设备还可以提供良好的后向兼容。fpga设备中已有的协议栈模块可以容易地工作而无需改变已规定的通信过程,并且该fpga设备也可以被部署在任何fpga板、计算设备和具有不同的联网结构的计算环境中。该fpga设备也能够提供良好的扩展性,各种新设计的协议栈模块和应用模块都可以被容纳到该fpga设备中并且良好工作。此外,通用访问模块和/或接口复用模块促进了对较大数目的应用模块和协议栈模块的同时通信,使得该fpga设备在效率和时延方面也得到显著改进。进一步地,根据本公开的实现的fpga设备还能够提供关于安全性方案的优势。例如,在一些情况下,由于物理硬件(例如pcie的地址)可以在没有安全检查的情况下被直接访问,这样会导致物理地址的数据恶意被篡改以及安全性问题。通过本公开的实现中fpga设备所包括的dua叠加层对于访问数据的检查,可以防止非法访问的发生。附加地,在基于本公开的实现的fpga设备通信中,还可以隔离潜在的恶意应用模块。例如,通过dua叠加层和dua底层对于流量的控制,避免了一个应用模块的恶意发送而导致其他的应用模块无法发送的情况发生。示例过程图9示出了根据本公开的一些实现的用于fpga设备的通信的过程900的流程图。该过程900可以由根据本公开的实现的fpga设备来实现中,例如如图3、图7和图8所示的fpga设备300。在910,fpga设备300从应用模块接收第一数据和多个目标设备中的第一目标设备的第一标识。第一目标设备充当第一数据的目的地。在920,fpga设备300基于第一标识和预定的第一路由信息,将第一数据发送给多个协议栈模块中的第一协议栈模块,第一协议栈模块经由物理接口可访问第一目标设备。这些实现可以由fpga设备300中的通用访问模块302实现。在一些实现中,过程900可以进一步包括:从多个协议栈模块中的第二协议栈模块接收第二数据和应用模块的第二标识,应用模块充当第二数据的目的地;基于第二标识和预定的第二路由信息将第二数据发送给应用模块。这些实现可以由fpga设备300中的通用访问模块302实现。在一些实现中,过程900可以进一步包括:从另外的协议栈模块接收第三数据和多个目标设备中的第二目标设备的第三标识,第二目标设备充当第三数据的目的地;以及基于第三标识和预定的第三路由信息,将第三数据发送给多个协议栈模块中的第三协议栈模块,第三协议栈模块经由物理接口可访问第二目标设备。这些实现可以由fpga设备300中的通用访问模块302实现。在一些实现中,过程900可以进一步包括:从应用模块接收fpga设备中的应用模块的第四标识和应用模块与第一目标设备的连接的第五标识;以及将第一数据与第一标识、第四标识和第五标识相关联地发送给第一协议栈模块。这些实现可以由fpga设备300中的通用访问模块302实现。在一些实现中,过程900可以进一步包括:从应用模块接收针对应用模块与第一目标设备的连接的连接建立请求,连接建立请求至少包括第一标识;获得针对连接建立请求的响应,响应包括第五标识;以及向应用模块发送针对连接建立请求的响应。这些实现可以由fpga设备300中的通用访问模块302实现。在一些实现中,第五标识的获得可以通过fpga设备300的处理模块、例如ca702来实现。ca702可以响应于连接建立请求来分配第五标识,也可以通过与fpga设备300本机的中央处理设备(例如cpu)720的交互来获得第五标识。在一些实现中,过程900可以进一步包括:基于第一标识和第四标识,确定从fpga设备的应用模块到第一目标设备的路由路径;以及确定指示路由路径中在fpga设备内的部分路径的第一路由信息。这些实现可以由fpga设备300中的ca702来实现。在另外一些实现中,路由路径的确定和路由信息的确定可以由与fpga设备300本机的中央处理设备(例如cpu)720来执行,并且fpga设备300的通用访问模块302可以获得路由信息。在一些实现中,过程900可以进一步包括:将指示路由路径中在另外设备内的其余路径的其余路由信息发送给另外设备。这些实现可以由fpga设备300中的ca702来实现。在另外一些实现中,其他路由信息的发送可以由与fpga设备300本机的中央处理设备(例如cpu)720来执行。在一些实现中,过程900可以进一步包括:基于预定调度策略来调度物理接口发送来自第一协议栈模块的消息,消息从第一数据生成。这些实现可以由fpga设备300中的接口复用模块810来实现。在一些实现中,fpga设备300被包括在第一计算设备中,并且多个目标设备选自包括以下的组:被包括在第一计算设备中另一fpga设备、处理设备或存储设备;或者被包括在远程的第二计算设备中的fpga设备、处理设备或存储设备。示例实现方式以下列出了本公开的一些示例实现方式。在一个方面,提供了一种现场可编程门阵列(fpga)设备。该fpga设备包括:应用模块;多个协议栈模块,可操作以基于不同的通信协议经由fpga设备的物理接口访问多个目标设备;以及通用访问模块,可操作以:从应用模块接收第一数据和多个目标设备中的第一目标设备的第一标识,第一目标设备充当第一数据的目的地;以及基于第一标识和预定的第一路由信息,将第一数据发送给多个协议栈模块中的第一协议栈模块,第一协议栈模块经由物理接口可访问第一目标设备。在一些实现中,通用访问模块进一步可操作以:从多个协议栈模块中的第二协议栈模块接收第二数据和应用模块的第二标识,应用模块充当第二数据的目的地;以及基于第二标识和预定的第二路由信息将第二数据发送给应用模块。在一些实现中,通用访问模块进一步可操作以:从另外的协议栈模块接收第三数据和多个目标设备中的第二目标设备的第三标识,第二目标设备充当第三数据的目的地;以及基于第三标识和预定的第三路由信息,将第三数据发送给多个协议栈模块中的第三协议栈模块,第三协议栈模块经由物理接口可访问第二目标设备。在一些实现中,通用访问模块进一步可操作以:从应用模块接收fpga设备中的应用模块的第四标识和应用模块与第一目标设备的连接的第五标识;以及将第一数据与第一标识、第四标识和第五标识相关联地发送给第一协议栈模块。在一些实现中,通用访问模块进一步可操作以:从应用模块接收针对应用模块与第一目标设备的连接的连接建立请求,连接建立请求至少包括第一标识;将连接建立请求发送给处理设备;从处理设备接收针对连接建立请求的响应,响应包括第五标识;以及向应用模块发送针对连接建立请求的响应,响应包括第五标识。在一些实现中,处理设备被包括在fpga设备中,或者处理设备与fpga设备分离并且与fpga设备可通信地耦合。在一些实现中,处理设备被配置为:基于第一标识和第四标识,确定从fpga设备的应用模块到第一目标设备的路由路径;以及将指示路由路径中在fpga设备内的部分路径的第一路由信息发送给通用访问模块。在一些实现中,处理设备进一步被配置为:将指示路由路径中在另外设备内的其余路径的其余路由信息发送给另外设备。在一些实现中,通用访问模块包括多个连接器和将多个连接器互连的交换结构,多个连接器分别与应用模块和多个协议栈模块相连。在一些实现中,该fpga设备进一步包括:接口复用模块,被设置在多个协议栈模块和物理接口之间并且可操作以:基于预定调度策略来调度物理接口发送来自第一协议栈模块的消息,消息从第一数据生成。在一些实现中,fpga设备被包括在第一计算设备中,并且多个目标设备选自包括以下的组:被包括在第一计算设备中另一fpga设备、处理设备或存储设备;或者被包括在远程的第二计算设备中的fpga设备、处理设备或存储设备。在另一方面,提供了一种在现场可编程门阵列(fpga)设备处实现的方法。fpga设备包括应用模块和多个协议栈模块,多个协议栈模块,可操作以基于不同的通信协议经由fpga设备的物理接口访问多个目标设备。方法包括:从应用模块接收第一数据和多个目标设备中的第一目标设备的第一标识,第一目标设备充当第一数据的目的地;以及基于第一标识和预定的第一路由信息,将第一数据发送给多个协议栈模块中的第一协议栈模块,第一协议栈模块经由物理接口可访问第一目标设备。在一些实现中,该方法进一步包括:从多个协议栈模块中的第二协议栈模块接收第二数据和应用模块的第二标识,应用模块充当第二数据的目的地;以及基于第二标识和预定的第二路由信息将第二数据发送给应用模块。在一些实现中,该方法进一步包括:从另外的协议栈模块接收第三数据和多个目标设备中的第二目标设备的第三标识,第二目标设备充当第三数据的目的地;以及基于第三标识和预定的第三路由信息,将第三数据发送给多个协议栈模块中的第三协议栈模块,第三协议栈模块经由物理接口可访问第二目标设备。在一些实现中,该方法进一步包括:从应用模块接收fpga设备中的应用模块的第四标识和应用模块与第一目标设备的连接的第五标识;以及将第一数据与第一标识、第四标识和第五标识相关联地发送给第一协议栈模块。在一些实现中,该方法进一步包括:从应用模块接收针对应用模块与第一目标设备的连接的连接建立请求,连接建立请求至少包括第一标识;获得针对连接建立请求的响应,响应包括第五标识;以及向应用模块发送针对连接建立请求的响应,响应包括第五标识。在一些实现中,该方法进一步包括:基于第一标识和第四标识,确定从fpga设备的应用模块到第一目标设备的路由路径;以及确定指示路由路径中在fpga设备内的部分路径的第一路由信息。在一些实现中,该方法进一步包括:将指示路由路径中在另外设备内的其余路径的其余路由信息发送给另外设备。在一些实现中,该方法进一步包括:基于预定调度策略来调度物理接口发送来自第一协议栈模块的消息,消息从第一数据生成。在一些实现中,该方法fpga设备被包括在第一计算设备中,并且多个目标设备选自包括以下的组:被包括在第一计算设备中另一fpga设备、处理设备或存储设备;或者被包括在远程的第二计算设备中的fpga设备、处理设备或存储设备。本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)等等。用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实现的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1