微软出于如下目的设计了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的概率。
众所周知,FPGA最大的问题就在可编程性,它需要专门的语言(RTL)与器件才能实现。为了让catapult支持更多的应用,RTL分为shell和role两层。其中shell是基础层,用来实现一些大家都需要的功能,比如数据清洗,CPU-to-FPGA通信,FPGA-to-FPGA通信,数据迁移,重配置,心跳检测等等。而role则是每个应用自己特殊的功能。
先放上大图:
它具有如下特点:
从下图也可以看出,catapult的PE也采用了脉动阵列的方式来提高计算密度。
一个软件的每个阶段都具有特殊性,因此都可以看作一个特殊都DSA可以解决都目标。Search就是这样都一个业务,它设计到都环节多,并且每个环节特性不完全一样,并且都需要较大都资源。一般来说,Search算法可以分为如下三大块内容(当然具体都会更复杂):
每个阶段都根据其特性进行了特殊化设计。
前面都设计有一些不足,最大问题是上面独立的网络不支持Ethernet/IP的处理,这样不能适用于网络加速这个场景,同时由于专有硬件线路会比较昂贵,因此FPGA网络被限制在48这个数量上,最后当出现问题时专有网络需要重新路由会对性能有影响。
因此catapult第二代做的最大改进就是将FPGA放置在CPU和网卡之间。既能支持Ethernet/IP加速网络,又能通过前面的方案加速计算。
同时还有三点相关的升级: