首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

利用FPGA加速分布式计算

利用FPGA加速分布式计算

高校和私企正在应用分布式平台来解决日益复杂的科学算法,而不足安装速度更快、耗电更大的超级计算机来解决。针对SETI@home这样的项目,他们则使用数以千计的个人计算机来计算数据。当前的分布式计算网络一般使用CPU或GPU来计算项目数据。
  
FPGA也正被像COPACOBANA这样的项目所采用,该项目使用120个赛灵思FPGA通过暴力处理来破解DES加密文件。不过在这个案例中,FPGA都被集中布置在一个地方,这种方案不太适合那些预算紧张的大学或企业。过去没有将FPGA当作分布式计算工具,是因为它们的使用需要借助 PC,才能用新的比特流不断地重新配置整个FPGA。不过,有了赛灵思部分重配置技术,为分布式计算网络设计基于FPGA的客户端已经完全町行。
  
汉堡应用技术大学的研究小组为这样的客户端创建了一个原型,并将其实现在单个FPGA上。设计由静态和动态两大部分组成。其中静态部分在FPGA启动时加载,与此同时,用静态部分实现的处理器从网络服务器下载动态部分。动态部分属部分重配置区域,提供共享的FPGA资源。采用这种配置,FPGA可以位于世界上的任何地方,用较低的预算为计算项目捉供强大的计算能力。
  
分布式SoC网络
  
由于具有信号并行处理能力,FPGA能够使用比微处理器慢8倍的时钟频率低8倍的功耗实现比微处理器快三倍的数据吞吐量。为利用FPGA强大的计算能 力实现高数据输入速率,设计人员一般将算法实现为流水线,比如DES加密。汉堡应用技术大学的研究小组开发分布式SoC网络(DSN)原型的目的足加快算 法的速度和使用分布式FPGA资源处理大型数据集。其网络设计采用“客户端—代理—服务器”架构,可以将所有注册的片上系统(SoC)客户端分配给每一个网络参与方的计算项目(如图1所示)。这枉将每一个SoC客户端连接到唯一的项日的“客户端—服务器”架构中是无法实现的。
  
另外,选择“代理—服务器”架构可以将每个FPGA的TCP/IP连接数量减少到一个。DSNFPGA负责运算使用专用数据集的算法,而“代理—服务 器”则负责管理SoC客户端和项日客户端。代理调度连接的SoC客户端,让每个项目在相同的时间几乎拥有相同的计算能力,或者在SoC的数量少于计算请求的项目时分时复用SOC客户端。
  
项目客户端提供部分重配置模块(PRM)和激励输入数据集。在连接到“代理—服务器”之后,项目客户端将PRM比特文件发送给服务器,然后由服务器将 它们分配给带有空闲的部分可重配置区域(PRR)的SoC客户端。SoC客户端的静态部分是一个基于MicroBlaze的微控制器,用接收到的PRM动 态重新配置PRR。接下来,项目客户端开始通过“代理—服务器”发送数据集并从SoC客户端接收计算的结果。根据项目客户端的需要,它可以比较不同的计算结果,或根据计算目的评估计算结果。
  
SoC客户端
  
这个小组为赛灵思Virtex-6FPGA(XC6V-LX240T)开发了SoC客户端。MicroBlaze处理器负责运行客户端软件,客户端软件负责管理部分可重配置以及比特流和数据交换(如图2所示)。用户逻辑封装PRR的处理器本地总线(PLB)外设用以连接静态部分和动态部分。在动态部分 驻留的足接收到的PRM提供的加速器IP核使用的FPGA共享资源。DDR存储器有更高的数据吞吐量和无限制的写入访问次数,为存储接收到的数据和计算完 成的数据,该研究组选择了DDR3存储器而非CompactFlash。PRM存储在专用数据段内,以控制其大小,避免与其它数据集发生冲突。该数据段大 小为10MB,足以存储完整的FPGA配置。因此每一个PRM都应该与这个数据段的大小匹配。
  
为接收和管理数据集,不同的数据段被创建。这些数据段的大小有50MB,能够为比如图像或加密文本文件等提供足够的寻址空间。管理这些数据段主要依靠10个管理结构。该管理结构包括每个数据集对的起始/终点地址,以及指示结果数据集的标志。
  
为将静态部分连接到PRR,需要对赛灵思EDK提供的IP连接进行评估,比如快速单向链路(FSL)、PLB从和PLB主等。这里选择将PLB主从结 合使用,以取得便于配置的IP,可以在无需MicroBlaze提供支持的情况下发送和接收数据请求,从而大幅降低每个字传输占用的时钟周期。
  
对客户端—服务器通信,FPGA的内部以太网IP硬核是处理器系统静态部分不可或缺的外没。借助本地链路TEMAC对存储器控制器的软件直接存储器访 问(SDMA)功能,可减轻数据和比特文件传输带来的PLB载荷。在接收1,518个字节的帧后,SDMA生成中断请求,调用1wip read()函数来处理这段数据。Lwip write()函数告知SDMA通过到TEMAC的发送通道执行DMA传输功能。

把Xikernel(一种用于赛灵思嵌入式处理器的内核)当作SoC客户端软件的底层实时操作系统加以实现,可以方便使用用于TCP/IP服务器连接 的套接字模式发挥轻量级TCP/IP栈(LwIP)库的作用。图3概述了客户端线程的初始化、建立、发送和处理顺序。SoC客户端线程初始化到服务器的连接,并接收存储在DDR3存储器中的PRM比特流(“pr”),从而应用X1LMFS文件系统。随后Xps hwicap(硬件内部配置接入点)用PRM重新配置PRR。最后,由总线主外设设置一个状态位,命令SoC客户端向服务器发送请求。服务器用数据集 (“dr”)做出响应,SoC客户端把该数据集存储在板载存储器上。这些数据文件包含有内容顺序,比如“outpuUength+“ol”+data to compute”。outpullength足字节长度,用来保留结果数据的存储范围,后接字符对“ol'’。对首个接收到的“dr”消息,会生成一个计 算线程和一个发送线程。
  
计算线程将输入—结果数据集的地址发送到PRR外设的从接口,并启动PRM的自动数据集处理功能。管理结构为每个数据集提供这些地址,并在确保结果数 据完全可用后设置“完成”标志。在目前的客户端软件概念版本中,计算线程和发送线程通过该结构通信,由发送线程反复检查完成位,并将1wip write()调用存储在存储器中的结果。 
 
在测试SoC客户端时,我们发现如果在PRR重配置过程中启用全部中断,Xilkernel的定时器会产生调度函数访问MicroBlaze,使重配 置过程随机发生卡住的状况。如果禁用全部中断,或在没有Xilkernel的支持下,对S。C客户端的MicroBlaze处理器使用独立的软件模块,就不会发生这种情况。
  
配备例化PRM的总线主控外设
  
为在PRM和外部存储器之间实现自控激励数据和结果的交换,这里将总线主外设构建为一个带数据路径和控制路径的处理器元件(如图4所示)。在数据路径 中,我们在两个深度均为16个字的FIFO模块之间嵌入PRM接口,以补偿通信和数据传输延迟。数据路径的两个FIPO均直接连接到PLB的总线主接口。 这样,我们通过有限状态机(FSM)的直接数据传输,大幅降低时间。由于不采用软件,所以MicroBlaze的寄存器文件中不发生中间数据存储。本 RISC处理器的“加载—存储”架构一直需要占用两个总线传输周期,用于从某个地址加载CPU寄存器,然后将寄存器的内容存储到另一个PLB连接的设备。 由于从MicroBlaze到存储器控制器的DXCL数据高速缓存链路构成PLB的旁路,因此这些“加载—存储”周期在时序上不能得到改善。这是因为接收 到的数据和发送的计算结果都足逐字一次性处理,没有发挥高速缓存的作用。由此PRR外设的活动与MicroBlaze主软件的处理脱钩,因而PRR数据传 输不会导致更多的Xilkernel环境切换,但仍然不可避免地出现两个工设备竞争总线访问的情况。
  
外设的从接门含有四个基于软件驱动的寄存器,可为控制路径提供输入和输出数据集的起始地址和终点地址。另一个软件寄存器为FSM设定“起始”位,用于初始化主数据传输周期。完整的数据处理周期的状态经第五个软件寄存器的地址提供给客户端软件。
  
根据控制路径的FSM的状态图可以看出,应该采取让到PLB的写入周期优先的策略(图5)。从OUT FIFO提取数据优先于向IN FIFO写入数据,防止OUT FIFO为满时,阻止PRM处理算法。读取或写入外部存储器可交替进行,因为每次只能使用一种总线访问方式。当来白客户端的汁算线程的软件复位启动 FSM(图3)时,第一件事就足从外部存储器读取(状态READ REQ)。自此,总线主设备就受状态STARTED提供的转换条件所提供的决策逻辑的控制。
  
Mealy FSM输出(标记Exit/)让地址计数器在总线传输完成时递增。这里两个计数器都直接导入到FSM代码中。一般情况下我们倾向于将定时器和地址计数器分 开实现为仅用FSM输出使能的单独时钟进程,以便让计数器的保持小规模的转换逻辑以及尽量避免将多路复用器输入用于计数器状态反馈。对于此点,XST综合 编泽器的结果将RTL原理图清楚地体现为并行于可加载计数器的FSM抽象,其中的时钟使能输入由预期状态解码逻辑驱动。尽管行为级的VHDL编码方式更容 易让人理解,使用FPGA资源和简单原语也不会影响功能。
  
用PlanAhead设置动态部分
  
FPGA中静态和动态部分的配置这一设计流程足一个复杂的开发过程,需要用PlanAhead物理设计约束工具进行多步操作。第一步就足给在 ML505开发板上实现的由PetaLinux驱动的动态重配置平台编写设计流程脚本。就当前迭代而言,将PRR直接集成到外设的用户逻辑中的设计步骤与 过去通过添加总线宏和器件控制寄存器(DCR)用作PRM的PLB接门、添加PLB—DCR桥接器实现总线宏的做法相比更实际。
  
内部的部分重配置区域的命名方法通过为其指定实例名PRR,并将实例名相连(prm interface.vhd)。对我们希望囊括在所需的PRR中的全部FPGA资源而言,我们用设置左下方坐标和右上方坐标的方法来划定一个矩形区域。
  
这种特殊的方法只能覆盖Slice和BRAM,因为可用的DSP元件属于专用时钟区域,归多端口存储器控制器(MPMC)设计使用。
  
为避免ISE生成的PRM网表使用专属资源,我们将综合选项设置为:dsp utilization ratm:0;use dsp48=falses iobuf=false。最后,从FPGA编辑器观察到静态部分的布局完全与PRR分开,PRR在本例巾占用的资源极少(图6)。
  
配备图像处理PRM的SoC客户端
  
我们使用在PRM中实现的Sobel/中值过滤器验证SoC客户端的运算能力及其TCP/IPB艮务器通信功能(图7)。我们使用赛灵思系统生成器 (System Generator)开发图像处理邻域运算。赛灵思系统生成器让我们享有Simulink仿真和自动RTL代码生成的便利。解串器将输入的像素流转换成 3x3像素阵列,然后依次排列成一个覆盖整个图像的掩膜,为滤波器的并行乘积加总提供输入,或为后续的中值过滤器比较提供输入。过滤器的输入和输出像素向 量的宽度为4位,故我们插入一个PRM封装器,以多路复用同步FIFO提供的32位输入向量的8个四位元。使用MATLAB脚本,我们将 800x600PNG图像转换为四位灰度像素,用作PRM的输入激励。在过滤器的输出端,8个四位寄存器顺序写入和级联,将字传输给OUT-FIPO(图 4)。
  
表3是SoC客户端三个运算步骤(接收PRM比特文件、重配置PRR、 图像处理序列)的时序测量结果。我们用数字示波器在XGpio_WriteReg()调用触发的GPIO输出处测量第一次到最后一次数据传输周期,采集接收与图像处理周期。
  
重配置时间间隔都是一样的,因为没有Xilkernel调度事件干扰基于软件的HWICAP操作。受FSM控制的HWlCAP操作在没有MicroBlaze互动的情况下,可以超过112 KBps的重配置速度实现更短的用时,甚至在启用中断的情况下也不例外。
  
在从代理向SoC客户端发送PRM的过程中,连接很快中断。因为每传输100个字节仅1毫秒的延迟,SoC客户端的通信非常畅通。由于与图像处理周期 同步,正常的Xilkernel线程导致PLB访问竞争,因此SoC客户端在典型状态下运行。二值化序列的用时为600x800/100MHz=4.8毫 秒,因为只需要进行一次比较。这个序列嵌套在两次经PLB的图像传输中,根据功能性总线仿真的结果,每个字至少需要使用五个时钟周期, 故:2x5x600x800/(8x100MHz):6毫秒。由于所有测量的数据传输值都大于我们先前的预估值,我们需要对由总线读取、FIFO写入和清 空、图像处理流水线和总线写入组成的完整时序链条的构成进行详细分析。
  
部分重配置的力量
  
在运算复杂算法时,发挥分布式汁算网络的力量是理想的选择。这些网络的流行设计目前仅限于使用CPU和GPU。基于FPGA的分布式SoC网络架构原型运用FPGA的并行信号处理特性来计算复杂算法。
  
赛灵思部分重配置技术足运用分布在世界各地的FPGA共享资源的关键。在我们的架构中,SoC客户端的静态部分用更新的加速器以自控方式对FPGA的 动态部分进行重配置。因此,必须改进SoC客户端,使之能够使用使能中断运行HWICAP,以实现完全的反应能力。这个方向的第一步足实现FSM控制的重 配置,不给处理器带来负担。不过还需要分析PLB传输影响以及MPMC瓶颈问题。
  
为管理SoC客户端,使用与LwIP链接的Xilkernel确保重配置驱动程序、动态部分的总线接口及其它应用的线程保持同步。我们进一步重点分析客户端—服务器系统的时序和动态部分的处理周期,以期发现有更高数据吞吐量和可靠通信能力的软件/RTL模型配置。
  
SoC客户端的下一阶段的设计必须考虑AX14总线功能。一般来说PRM交换可视为与一组软件任务共同执行的额外硬件任务。最后且同样重要的足,我们仍然在优化服务器的软件设计,以期达到更高的客户满意度。
返回列表