1. 简介

微软出于如下目的设计了Catapult:

  • 便于部署,不增加实现和调度的复杂度,即使它和DSA的概念有冲突
  • 可扩展性好,有些应用需要一个accelerator所有资源
  • 功耗效率高
  • 没有单点故障的问题
  • 满足当前servers上空间和功耗的限制
  • 不能影响数据中心网络性能和可靠性
  • 需要改善server的cost-performance

2. 硬件规格

主要参数如下:

  • 功耗:25w
  • 制程:28nm
  • Flash:32MiB
  • OffChipMemory:8GiB
  • ALU:3926 8bit
  • OnChipMemory:5MiB
  • 网络:20Gbit/s

样式图如下:

catapult

数据中心的半个rack中有48个服务器,每台服务器插有一块catapult。如前面介绍为了不影响网络环境,有专门的低延迟的20Gbit/s的网络连接这48个catapult,组成一个二维的6*8的环形网络。

为了避免单点故障,在catapult的网络中,支持一个FPGA失败的时候,重新配置整个环境。并且catapult主板对FPGA外的所有内存支持SECDED的保护,这需要这个方案在数据中心中大规模部署。

由于使用了大量内存,catapult会比ASIC跟容易遇到single-event upset(SEUs)的问题。因此,FPGA支持检查并修正SEUs的功能,同时周期性的清洗(scubbing)FPGA的配置状态以降低SEUs的概率。

3. 软件支持

众所周知,FPGA最大的问题就在可编程性,它需要专门的语言(RTL)与器件才能实现。为了让catapult支持更多的应用,RTL分为shell和role两层。其中shell是基础层,用来实现一些大家都需要的功能,比如数据清洗,CPU-to-FPGA通信,FPGA-to-FPGA通信,数据迁移,重配置,心跳检测等等。而role则是每个应用自己特殊的功能。

catapultsoftware

4. 应用一:CNN

先放上大图:

catapultcnn

它具有如下特点:

  • 在线动态配置,而不需要利用FPGA Tools重新编译
  • 最小化内存访问,对CNN数据结构提供了高效的缓存
  • 二维的PEs(Processing Elements)提供了很强大的扩展性

从下图也可以看出,catapult的PE也采用了脉动阵列的方式来提高计算密度。

catapultcnnpe

5. 应用二:Search

一个软件的每个阶段都具有特殊性,因此都可以看作一个特殊都DSA可以解决都目标。Search就是这样都一个业务,它设计到都环节多,并且每个环节特性不完全一样,并且都需要较大都资源。一般来说,Search算法可以分为如下三大块内容(当然具体都会更复杂):

  • Feature Extraction:从文档中提取特征,使用1块FPGA
  • Free-Form Expressions:对特征进行处理,合并,使用2块FPGA
  • Machine-Learned Scoring:对前面两个阶段的数据,利用机器学习方法,计算出代表文档的一个分值,使用3块FPGA

每个阶段都根据其特性进行了特殊化设计。

6. 改进

前面都设计有一些不足,最大问题是上面独立的网络不支持Ethernet/IP的处理,这样不能适用于网络加速这个场景,同时由于专有硬件线路会比较昂贵,因此FPGA网络被限制在48这个数量上,最后当出现问题时专有网络需要重新路由会对性能有影响。

因此catapult第二代做的最大改进就是将FPGA放置在CPU和网卡之间。既能支持Ethernet/IP加速网络,又能通过前面的方案加速计算。

catapultv2

同时还有三点相关的升级:

  • 数据中心网络从10G升级到了40G
  • 给FPGA增加一个rate limiter,避免FPGA应用霸占网络带宽
  • 网络工程师用FPGA来加速网络