迅维网

查看: 2824|回复: 21
打印 上一主题 下一主题

如何评价微软在数据中心使用 FPGA 代替传统 CPU 的做法?

[复制链接]
跳转到指定楼层
1#
发表于 2018-4-12 10:59:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: LAN 来自 LAN

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
如何评价微软在数据中心使用 FPGA 代替传统 CPU 的做法?

2#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
利益相关:微软亚洲研究院实习生,研究方向是 FPGA 在数据中心的应用。

问题「用 FPGA 代替 CPU」中,这个「代替」的说法不准确。我们并不是不用 CPU 了,而是用 FPGA 加速适合它的计算任务,其他任务仍然在 CPU 上完成,让 FPGA 和 CPU 协同工作

本回答将涵盖三个问题:

  • 为什么使用 FPGA,相比 CPU、GPU、ASIC(专用芯片)有什么特点?
  • 微软的 FPGA 部署在哪里?FPGA 之间、FPGA 与 CPU 之间是如何通信的?
  • 未来 FPGA 在云计算平台中应充当怎样的角色?仅仅是像 GPU 一样的计算加速卡吗?

一、为什么使用 FPGA?

众所周知,通用处理器(CPU)的摩尔定律已入暮年,而机器学习和 Web 服务的规模却在指数级增长。人们使用定制硬件来加速常见的计算任务,然而日新月异的行业又要求这些定制的硬件可被重新编程来执行新类型的计算任务。FPGA (Field Programmable Gate Array) 正是一种硬件可重构的体系结构,常年来被用作专用芯片(ASIC)的小批量替代品,然而近年来在微软、百度等公司的数据中心大规模部署,以同时提供强大的计算能力和足够的灵活性

不同体系结构性能和灵活性的比较。

FPGA 为什么快?「都是同行衬托得好」。CPU、GPU 都属于冯·诺依曼结构,指令译码执行、共享内存。FPGA 之所以比 CPU 甚至 GPU 能效高,本质上是无指令、无需共享内存的体系结构带来的福利。

冯氏结构中,由于执行单元(如 CPU 核)可能执行任意指令,就需要有指令存储器、译码器、各种指令的运算器、分支跳转处理逻辑。由于指令流的控制逻辑复杂,不可能有太多条独立的指令流,因此 GPU 使用 SIMD(单指令流多数据流)来让多个执行单元以同样的步调处理不同的数据,CPU 也支持 SIMD 指令。而 FPGA 每个逻辑单元的功能在重编程(烧写)时就已经确定,不需要指令。

冯氏结构中使用内存有两种作用。一是保存状态,二是在执行单元间通信。由于内存是共享的,就需要做访问仲裁;为了利用访问局部性,每个执行单元有一个私有的缓存,这就要维持执行部件间缓存的一致性。对于保存状态的需求,FPGA 中的寄存器和片上内存(BRAM)是属于各自的控制逻辑的,无需不必要的仲裁和缓存对于通信的需求,FPGA 每个逻辑单元与周围逻辑单元的连接在重编程(烧写)时就已经确定,并不需要通过共享内存来通信

说了这么多三千英尺高度的话,FPGA 实际的表现如何呢?我们分别来看计算密集型任务和通信密集型任务。

计算密集型任务的例子包括矩阵运算、图像处理、机器学习、压缩、非对称加密、Bing 搜索的排序等。这类任务一般是 CPU 把任务卸载(offload)给 FPGA 去执行。对这类任务,目前我们正在用的 Altera(似乎应该叫 Intel 了,我还是习惯叫 Altera……)Stratix V FPGA 的整数乘法运算性能与 20 核的 CPU 基本相当,浮点乘法运算性能与 8 核的 CPU 基本相当,而比 GPU 低一个数量级。我们即将用上的下一代 FPGA,Stratix 10,将配备更多的乘法器和硬件浮点运算部件,从而理论上可达到与现在的顶级 GPU 计算卡旗鼓相当的计算能力。

FPGA 的整数乘法运算能力(估计值,不使用 DSP,根据逻辑资源占用量估计)

FPGA 的浮点乘法运算能力(估计值,float16 用软核,float 32 用硬核)

在数据中心,FPGA 相比 GPU 的核心优势在于延迟。像 Bing 搜索排序这样的任务,要尽可能快地返回搜索结果,就需要尽可能降低每一步的延迟。如果使用 GPU 来加速,要想充分利用 GPU 的计算能力,batch size 就不能太小,延迟将高达毫秒量级。使用 FPGA 来加速的话,只需要微秒级的 PCIe 延迟(我们现在的 FPGA 是作为一块 PCIe 加速卡)。未来 Intel 推出通过 QPI 连接的 Xeon + FPGA 之后,CPU 和 FPGA 之间的延迟更可以降到 100 纳秒以下,跟访问主存没什么区别了。

FPGA 为什么比 GPU 的延迟低这么多?这本质上是体系结构的区别。FPGA 同时拥有流水线并行和数据并行,而 GPU 几乎只有数据并行(流水线深度受限)。例如处理一个数据包有 10 个步骤,FPGA 可以搭建一个 10 级流水线,流水线的不同级在处理不同的数据包,每个数据包流经 10 级之后处理完成。每处理完成一个数据包,就能马上输出。而 GPU 的数据并行方法是做 10 个计算单元,每个计算单元也在处理不同的数据包,然而所有的计算单元必须按照统一的步调,做相同的事情(SIMD,Single Instruction Multiple Data)。这就要求 10 个数据包必须一起输入、一起输出,输入输出的延迟增加了。当任务是逐个而非成批到达的时候,流水线并行比数据并行可实现更低的延迟。因此对流式计算的任务,FPGA 比 GPU 天生有延迟方面的优势。

计算密集型任务,CPU、GPU、FPGA、ASIC 的数量级比较(以 16 位整数乘法为例,数字仅为数量级的估计)

ASIC 专用芯片在吞吐量、延迟和功耗三方面都无可指摘,但微软并没有采用,出于两个原因:

  • 数据中心的计算任务是灵活多变的,而 ASIC 研发成本高、周期长。好不容易大规模部署了一批某种神经网络的加速卡,结果另一种神经网络更火了,钱就白费了。FPGA 只需要几百毫秒就可以更新逻辑功能。FPGA 的灵活性可以保护投资,事实上,微软现在的 FPGA 玩法与最初的设想大不相同。
  • 数据中心是租给不同的租户使用的,如果有的机器上有神经网络加速卡,有的机器上有 Bing 搜索加速卡,有的机器上有网络虚拟化加速卡,任务的调度和服务器的运维会很麻烦。使用 FPGA 可以保持数据中心的同构性。

接下来看通信密集型任务。相比计算密集型任务,通信密集型任务对每个输入数据的处理不甚复杂,基本上简单算算就输出了,这时通信往往会成为瓶颈。对称加密、防火墙、网络虚拟化都是通信密集型的例子。

通信密集型任务,CPU、GPU、FPGA、ASIC 的数量级比较(以 64 字节网络数据包处理为例,数字仅为数量级的估计

对通信密集型任务,FPGA 相比 CPU、GPU 的优势就更大了。从吞吐量上讲,FPGA 上的收发器可以直接接上 40 Gbps 甚至 100 Gbps 的网线,以线速处理任意大小的数据包;而 CPU 需要从网卡把数据包收上来才能处理,很多网卡是不能线速处理 64 字节的小数据包的。尽管可以通过插多块网卡来达到高性能,但 CPU 和主板支持的 PCIe 插槽数量往往有限,而且网卡、交换机本身也价格不菲。

从延迟上讲,网卡把数据包收到 CPU,CPU 再发给网卡,即使使用 DPDK 这样高性能的数据包处理框架,延迟也有 4~5 微秒。更严重的问题是,通用 CPU 的延迟不够稳定。例如当负载较高时,转发延迟可能升到几十微秒甚至更高(如下图所示);现代操作系统中的时钟中断和任务调度也增加了延迟的不确定性。
ClickNP(FPGA)与 Dell S6000 交换机(商用交换机芯片)、Click+DPDK(CPU)和 Linux(CPU)的转发延迟比较,error bar 表示 5% 和 95%。来源:[5]

虽然 GPU 也可以高性能处理数据包,但 GPU 是没有网口的,意味着需要首先把数据包由网卡收上来,再让 GPU 去做处理。这样吞吐量受到 CPU 和/或网卡的限制。GPU 本身的延迟就更不必说了。

那么为什么不把这些网络功能做进网卡,或者使用可编程交换机呢?ASIC 的灵活性仍然是硬伤。尽管目前有越来越强大的可编程交换机芯片,比如支持 P4 语言的 Tofino,ASIC 仍然不能做复杂的有状态处理,比如某种自定义的加密算法。

综上,在数据中心里 FPGA 的主要优势是稳定又极低的延迟,适用于流式的计算密集型任务和通信密集型任务。


二、微软部署 FPGA 的实践

2016 年 9 月,《连线》(Wired)杂志发表了一篇《微软把未来押注在 FPGA 上》的报道 [3],讲述了 Catapult 项目的前世今生。紧接着,Catapult 项目的老大 Doug Burger 在 Ignite 2016 大会上与微软 CEO Satya Nadella 一起做了 FPGA 加速机器翻译的演示。演示的总计算能力是 103 万 T ops,也就是 1.03 Exa-op,相当于 10 万块顶级 GPU 计算卡。一块 FPGA(加上板上内存和网络接口等)的功耗大约是 30 W,仅增加了整个服务器功耗的十分之一。

Ignite 2016 上的演示:每秒 1 Exa-op (10^18) 的机器翻译运算能力

微软部署 FPGA 并不是一帆风顺的。对于把 FPGA 部署在哪里这个问题,大致经历了三个阶段:

  • 专用的 FPGA 集群,里面插满了 FPGA
  • 每台机器一块 FPGA,采用专用网络连接
  • 每台机器一块 FPGA,放在网卡和交换机之间,共享服务器网络
微软 FPGA 部署方式的三个阶段,来源:[3]

第一个阶段是专用集群,里面插满了 FPGA 加速卡,就像是一个 FPGA 组成的超级计算机。下图是最早的 BFB 实验板,一块 PCIe 卡上放了 6 块 FPGA,每台 1U 服务器上又插了 4 块 PCIe 卡。

最早的 BFB 实验板,上面放了 6 块 FPGA。来源:[1]

可以注意到该公司的名字。在半导体行业,只要批量足够大,芯片的价格都将趋向于沙子的价格。据传闻,正是由于该公司不肯给「沙子的价格」 ,才选择了另一家公司。当然现在数据中心领域用两家公司 FPGA 的都有。只要规模足够大,对 FPGA 价格过高的担心将是不必要的。

最早的 BFB 实验板,1U 服务器上插了 4 块 FPGA 卡。来源:[1]

像超级计算机一样的部署方式,意味着有专门的一个机柜全是上图这种装了 24 块 FPGA 的服务器(下图左)。这种方式有几个问题:

  • 不同机器的 FPGA 之间无法通信,FPGA 所能处理问题的规模受限于单台服务器上 FPGA 的数量;
  • 数据中心里的其他机器要把任务集中发到这个机柜,构成了 in-cast,网络延迟很难做到稳定。
  • FPGA 专用机柜构成了单点故障,只要它一坏,谁都别想加速了;
  • 装 FPGA 的服务器是定制的,冷却、运维都增加了麻烦。

部署 FPGA 的三种方式,从中心化到分布式。来源:[1]

一种不那么激进的方式是,在每个机柜一面部署一台装满 FPGA 的服务器(上图中)。这避免了上述问题 (2)(3),但 (1)(4) 仍然没有解决。

第二个阶段,为了保证数据中心中服务器的同构性(这也是不用 ASIC 的一个重要原因),在每台服务器上插一块 FPGA(上图右),FPGA 之间通过专用网络连接。这也是微软在 ISCA'14 上所发表论文采用的部署方式。

Open Compute Server 在机架中。来源:[1]

Open Compute Server 内景。红框是放 FPGA 的位置。来源:[1]

插入 FPGA 后的 Open Compute Server。来源:[1]

FPGA 与 Open Compute Server 之间的连接与固定。来源:[1]

FPGA 采用 Stratix V D5,有 172K 个 ALM,2014 个 M20K 片上内存,1590 个 DSP。板上有一个 8GB DDR3-1333 内存,一个 PCIe Gen3 x8 接口,两个 10 Gbps 网络接口。一个机柜之间的 FPGA 采用专用网络连接,一组 10G 网口 8 个一组连成环,另一组 10G 网口 6 个一组连成环,不使用交换机。

机柜中 FPGA 之间的网络连接方式。来源:[1]

这样一个 1632 台服务器、1632 块 FPGA 的集群,把 Bing 的搜索结果排序整体性能提高到了 2 倍(换言之,节省了一半的服务器)。如下图所示,每 8 块 FPGA 穿成一条链,中间用前面提到的 10 Gbps 专用网线来通信。这 8 块 FPGA 各司其职,有的负责从文档中提取特征(黄色),有的负责计算特征表达式(绿色),有的负责计算文档的得分(红色)。

FPGA 加速 Bing 的搜索排序过程。来源:[1]

FPGA 不仅降低了 Bing 搜索的延迟,还显著提高了延迟的稳定性。来源:[4]


本地和远程的 FPGA 均可以降低搜索延迟,远程 FPGA 的通信延迟相比搜索延迟可忽略。来源:[4]

FPGA 在 Bing 的部署取得了成功,Catapult 项目继续在公司内扩张。微软内部拥有最多服务器的,就是云计算 Azure 部门了。Azure 部门急需解决的问题是网络和存储虚拟化带来的开销。Azure 把虚拟机卖给客户,需要给虚拟机的网络提供防火墙、负载均衡、隧道、NAT 等网络功能。由于云存储的物理存储跟计算节点是分离的,需要把数据从存储节点通过网络搬运过来,还要进行压缩和加密。

在 1 Gbps 网络和机械硬盘的时代,网络和存储虚拟化的 CPU 开销不值一提。随着网络和存储速度越来越快,网络上了 40 Gbps,一块 SSD 的吞吐量也能到 1 GB/s,CPU 渐渐变得力不从心了。例如 Hyper-V 虚拟交换机只能处理 25 Gbps 左右的流量,不能达到 40 Gbps 线速,当数据包较小时性能更差;AES-256 加密和 SHA-1 签名,每个 CPU 核只能处理 100 MB/s,只是一块 SSD 吞吐量的十分之一。
网络隧道协议、防火墙处理 40 Gbps 需要的 CPU 核数。来源:[5]

为了加速网络功能和存储虚拟化,微软把 FPGA 部署在网卡和交换机之间。如下图所示,每个 FPGA 有一个 4 GB DDR3-1333 DRAM,通过两个 PCIe Gen3 x8 接口连接到一个 CPU socket(物理上是 PCIe Gen3 x16 接口,因为 FPGA 没有 x16 的硬核,逻辑上当成两个 x8 的用)。物理网卡(NIC)就是普通的 40 Gbps 网卡,仅用于宿主机与网络之间的通信。

Azure 服务器部署 FPGA 的架构。来源:[6]

FPGA(SmartNIC)对每个虚拟机虚拟出一块网卡,虚拟机通过 SR-IOV 直接访问这块虚拟网卡。原本在虚拟交换机里面的数据平面功能被移到了 FPGA 里面,虚拟机收发网络数据包均不需要 CPU 参与,也不需要经过物理网卡(NIC)。这样不仅节约了可用于出售的 CPU 资源,还提高了虚拟机的网络性能(25 Gbps),把同数据中心虚拟机之间的网络延迟降低了 10 倍

网络虚拟化的加速架构。来源:[6]

这就是微软部署 FPGA 的第三代架构,也是目前「每台服务器一块 FPGA」大规模部署所采用的架构。FPGA 复用主机网络的初心是加速网络和存储,更深远的影响则是把 FPGA 之间的网络连接扩展到了整个数据中心的规模,做成真正 cloud-scale 的「超级计算机」。第二代架构里面,FPGA 之间的网络连接局限于同一个机架以内,FPGA 之间专网互联的方式很难扩大规模,通过 CPU 来转发则开销太高。

第三代架构中,FPGA 之间通过 LTL (Lightweight Transport Layer) 通信。同一机架内延迟在 3 微秒以内;8 微秒以内可达 1000 块 FPGA;20 微秒可达同一数据中心的所有 FPGA。第二代架构尽管 8 台机器以内的延迟更低,但只能通过网络访问 48 块 FPGA。为了支持大范围的 FPGA 间通信,第三代架构中的 LTL 还支持 PFC 流控协议和 DCQCN 拥塞控制协议。

纵轴:LTL 的延迟,横轴:可达的 FPGA 数量。来源:[4]

FPGA 内的逻辑模块关系,其中每个 Role 是用户逻辑(如 DNN 加速、网络功能加速、加密),外面的部分负责各个 Role 之间的通信及 Role 与外设之间的通信。来源:[4]

FPGA 构成的数据中心加速平面,介于网络交换层(TOR、L1、L2)和传统服务器软件(CPU 上运行的软件)之间。来源:[4]

通过高带宽、低延迟的网络互联的 FPGA 构成了介于网络交换层和传统服务器软件之间的数据中心加速平面。除了每台提供云服务的服务器都需要的网络和存储虚拟化加速,FPGA 上的剩余资源还可以用来加速 Bing 搜索、深度神经网络(DNN)等计算任务。

对很多类型的应用,随着分布式 FPGA 加速器的规模扩大,其性能提升是超线性的。例如 CNN inference,当只用一块 FPGA 的时候,由于片上内存不足以放下整个模型,需要不断访问 DRAM 中的模型权重,性能瓶颈在 DRAM;如果 FPGA 的数量足够多,每块 FPGA 负责模型中的一层或者一层中的若干个特征,使得模型权重完全载入片上内存,就消除了 DRAM 的性能瓶颈,完全发挥出 FPGA 计算单元的性能。当然,拆得过细也会导致通信开销的增加。把任务拆分到分布式 FPGA 集群的关键在于平衡计算和通信。

从神经网络模型到 HaaS 上的 FPGA。利用模型内的并行性,模型的不同层、不同特征映射到不同 FPGA。来源:[4]

在 MICRO'16 会议上,微软提出了 Hardware as a Service (HaaS) 的概念,即把硬件作为一种可调度的云服务,使得 FPGA 服务的集中调度、管理和大规模部署成为可能。

Hardware as a Service (HaaS)。来源:[4]

从第一代装满 FPGA 的专用服务器集群,到第二代通过专网连接的 FPGA 加速卡集群,到目前复用数据中心网络的大规模 FPGA 云,三个思想指导我们的路线:

  • 硬件和软件不是相互取代的关系,而是合作的关系;
  • 必须具备灵活性,即用软件定义的能力;
  • 必须具备可扩放性(scalability)。


三、FPGA 在云计算中的角色

最后谈一点我个人对 FPGA 在云计算中角色的思考。作为三年级博士生,我在微软亚洲研究院的研究试图回答两个问题:

  • FPGA 在云规模的网络互连系统中应当充当怎样的角色?
  • 如何高效、可扩放地对 FPGA + CPU 的异构系统进行编程?

我对 FPGA 业界主要的遗憾是,FPGA 在数据中心的主流用法,从除微软外的互联网巨头,到两大 FPGA 厂商,再到学术界,大多是把 FPGA 当作跟 GPU 一样的计算密集型任务的加速卡。然而 FPGA 真的很适合做 GPU 的事情吗?前面讲过,FPGA 和 GPU 最大的区别在于体系结构,FPGA 更适合做需要低延迟的流式处理,GPU 更适合做大批量同构数据的处理。

由于很多人打算把 FPGA 当作计算加速卡来用,两大 FPGA 厂商推出的高层次编程模型也是基于 OpenCL,模仿 GPU 基于共享内存的批处理模式。CPU 要交给 FPGA 做一件事,需要先放进 FPGA 板上的 DRAM,然后告诉 FPGA 开始执行,FPGA 把执行结果放回 DRAM,再通知 CPU 去取回。CPU 和 FPGA 之间本来可以通过 PCIe 高效通信,为什么要到板上的 DRAM 绕一圈?也许是工程实现的问题,我们发现通过 OpenCL 写 DRAM、启动 kernel、读 DRAM 一个来回,需要 1.8 毫秒。而通过 PCIe DMA 来通信,却只要 1~2 微秒。

PCIe I/O channel 与 OpenCL 的性能比较。纵坐标为对数坐标。来源:[5]

OpenCL 里面多个 kernel 之间的通信就更夸张了,默认的方式也是通过共享内存。本文开篇就讲,FPGA 比 CPU 和 GPU 能效高,体系结构上的根本优势是无指令、无需共享内存。使用共享内存在多个 kernel 之间通信,在顺序通信(FIFO)的情况下是毫无必要的。况且 FPGA 上的 DRAM 一般比 GPU 上的 DRAM 慢很多。

因此我们提出了 ClickNP 网络编程框架 [5],使用管道(channel)而非共享内存来在执行单元(element/kernel)间、执行单元和主机软件间进行通信。需要共享内存的应用,也可以在管道的基础上实现,毕竟 CSP(Communicating Sequential Process)和共享内存理论上是等价的嘛。ClickNP 目前还是在 OpenCL 基础上的一个框架,受到 C 语言描述硬件的局限性(当然 HLS 比 Verilog 的开发效率确实高多了)。理想的硬件描述语言,大概不会是 C 语言吧。

ClickNP 使用 channel 在 elements 间通信,来源:[5]

ClickNP 使用 channel 在 FPGA 和 CPU 间通信,来源:[5]

低延迟的流式处理,需要最多的地方就是通信。然而 CPU 由于并行性的限制和操作系统的调度,做通信效率不高,延迟也不稳定。此外,通信就必然涉及到调度和仲裁,CPU 由于单核性能的局限和核间通信的低效,调度、仲裁性能受限,硬件则很适合做这种重复工作。因此我的博士研究把 FPGA 定义为通信的「大管家」,不管是服务器跟服务器之间的通信,虚拟机跟虚拟机之间的通信,进程跟进程之间的通信,CPU 跟存储设备之间的通信,都可以用 FPGA 来加速。

成也萧何,败也萧何。缺少指令同时是 FPGA 的优势和软肋。每做一点不同的事情,就要占用一定的 FPGA 逻辑资源。如果要做的事情复杂、重复性不强,就会占用大量的逻辑资源,其中的大部分处于闲置状态。这时就不如用冯·诺依曼结构的处理器。数据中心里的很多任务有很强的局部性和重复性:一部分是虚拟化平台需要做的网络和存储,这些都属于通信;另一部分是客户计算任务里的,比如机器学习、加密解密。我们首先把 FPGA 用于它最擅长的通信,日后也许也会像 AWS 那样把 FPGA 作为计算加速卡租给客户。

不管通信还是机器学习、加密解密,算法都是很复杂的,如果试图用 FPGA 完全取代 CPU,势必会带来 FPGA 逻辑资源极大的浪费,也会提高 FPGA 程序的开发成本。更实用的做法是 FPGA 和 CPU 协同工作,局部性和重复性强的归 FPGA,复杂的归 CPU。

当我们用 FPGA 加速了 Bing 搜索、深度学习等越来越多的服务;当网络虚拟化、存储虚拟化等基础组件的数据平面被 FPGA 把持;当 FPGA 组成的「数据中心加速平面」成为网络和服务器之间的天堑……似乎有种感觉,FPGA 将掌控全局,CPU 上的计算任务反而变得碎片化,受 FPGA 的驱使。以往我们是 CPU 为主,把重复的计算任务卸载(offload)到 FPGA 上;以后会不会变成 FPGA 为主,把复杂的计算任务卸载到 CPU 上呢?随着 Xeon + FPGA 的问世,古老的 SoC 会不会在数据中心焕发新生?

「跨越内存墙,走向可编程世界」(Across the memory wall and reach a fully programmable world.)

参考文献:
[1] Large-Scale Reconfigurable Computing in a Microsoft Datacenter https://www.microsoft.com/en-us/research/wp-content/uploads/2014/06/HC26.12.520-Recon-Fabric-Pulnam-Microsoft-Catapult.pdf
[2] A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services, ISCA'14 https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/Catapult_ISCA_2014.pdf
[3] Microsoft Has a Whole New Kind of Computer Chip—and It’ll Change Everything
[4] A Cloud-Scale Acceleration Architecture, MICRO'16 https://www.microsoft.com/en-us/research/wp-content/uploads/2016/10/Cloud-Scale-Acceleration-Architecture.pdf
[5] ClickNP: Highly Flexible and High-performance Network Processing with Reconfigurable Hardware - Microsoft Research
[6] Daniel Firestone, SmartNIC: Accelerating Azure's Network with. FPGAs on OCS servers.

回复 支持 反对

使用道具 举报

3#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
自己的领域答一下,微软的这篇论文前两天我刚刚看过。
这条新闻是真的。这个项目已经做出来了,并且这篇论文将会出现在2014年的ISCA上。ISCA是计算机架构领域的顶级会议。文章题目叫 “A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services”。现在ISCA还没开,所以论文在ACM上搜不到,过几周应该能搜到了。
通常情况下,用FPGA实现的算法速度可以比CPU快100倍。所以文章里说FPGA处理Bing算法的速度比CPU快40倍也是可信的。最后整个系统级的性能是:在保持latency不变的情况下,吞吐量增加了一倍,在保持吞吐量不变的情况下,latency减小了。整个系统的功耗没有明显增加。
技术难度在于软件硬件接口的设计和整合。FPGA的开发代价是远高于CPU的,所以架构要有一定的灵活,要可以和软件系统简单可靠地接合。另一个难点是系统的可靠性。1600多块FPGA链接在一起,是很容易出现错误(errors, failing hardware, reboots, software updating)。所以如何及时探测错误,如何处理错误,如何保持整个系统的稳定性需要做很多的工作。
算法改造并不是难点。因为考虑到和现有系统的匹配,他们完完全全就是照搬的Bing的软件算法(完全没有一点改动)。
这个工作算是把FPGA应用在数据中心的一个尝试。不只是微软,Amazon,google也参与了这个工作。我相信未来FPGA一定会应用在数据中心。不过现在来看FPGA的开发难度还是太高了点。希望High level synthesize能够让FPGA的开发简化。

回复 支持 反对

使用道具 举报

4#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
问题好快!我也刚看到这则新闻。

可信度没问题,微软一直有一支reconfigrable computing部门,发过不少好文章。去年葡萄牙的FPL2013会议(FPGA领域顶级会议)上keynote4,微软的人做了题为“Reconfigurable Hardware at the World’s Largest Software Company
”的报告。不过可能出于保密当时没有过多介绍有价值的信息。反而keynote3,来自Google的“Accelerating the datacenter”提供了一些思路。

具体架构我们目前不得而知,还等他们自己出来说明(会在9月慕尼黑的FPL2014公布?),但根据FPGA应用最近动向和新闻里的措辞,很有可能是完全不同于目前通用计算的可重编程架构。最近同样醒目的一则新闻是HP的The Machine项目,同样声称大幅改进了计算机架构。

请大家也持续关注FPGA新技术动向,及时分享讨论。

-6月18日更新-------------------------
参考上面 @胡雨松 老师的回答赶紧找来论文拜读,更新一下理解。

该系统名为 Capapult。

40倍?其实是单纯比较某种算法在FPGA和CPU上实现时,FPGA比CPU快40倍。论文中阐述的系统,FPGA只分担了一部分Bing的Ranking任务,加上额外性能开销,最终结果是达到了95%的性能提升。依然是个非常可观的数字。

硬件架构:自制FPGA板(Stratix V D5 FPGA, 8G ECC DRAM),通过PCIe插到现有服务器, 而各个服务器的FPGA间又通过10G/b SAS线连接。总共部署了1,632台FPGA加速的服务器。

其他:具有完善的容错系统。为了更快地和CPU交互,自行开发了带DMA的PCIe接口,支持多线程操作。FPGA内部逻辑由名为shell和role两个模块组成,shell为接口等的固定模块(占23%),role为实现用户逻辑的区域。

回复 支持 反对

使用道具 举报

5#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
说明我等做IC前端的春天要来了:-D,如果真是可重编程的FPGA,那就厉害了,可以大大改善FPGA计算能力比上不足,比下有余的尴尬局面,也能改善FPGA总是沦于流片前的小白鼠这种给他人作嫁衣裳的佣人角色。

回复 支持 反对

使用道具 举报

6#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
先回答问题:
在数据中心中使用FPGA代替通用CPU真的能够实现报导中的效果吗?

--自2003年,Virtex-II Pro的年代,FPGA厂商就一直在考虑将FPGA置于逻辑时序控制之外的领域,从数字信号处理,网络,数据中心,FPGA在逻辑控制之外的能力已经充分得到验证。对于新闻的事实其实我并不清楚,但是从过去的情况来看,至少牛吹的没有那么多。

在技术上的实现细节是怎么样的?难度在哪里?

--举个简单的例子,一段运算在CPU层面需要做的事情是用“编程”的方式来将运算本身翻译为CPU结构可以处理的指令序列,然后一一处理。此时,提高运算能力最简单的方式就是提升CPU的频率或数量(当然,事实上的情况要复杂的多)。
而从FPGA角度来看,一段运算则可以通过模块的堆叠,级联来实现针对算法优化过的硬件结构,在面积足够的情况下,运算任务可以如同流水线一样通过硬件结构得出运算结果。

以乘加运算为例,CPU层面的工作是将乘加运算变成“x乘y,得出z,缓存z,z加a,缓存a”之类的流程。FPGA层面的工作是将合适的乘法器和加法器级联起来,设计数据接口。

所以细节上来看,新闻里描述的工作主要是分析需要处理的运算特点,设计适合运算特点的硬件结构。不清楚搜索的运算特点,但是只要是具有大量可重复运算的算法,FPGA实现起来效率都是比较高的。

这个任务真正的难度,在我看来是市场上广泛缺乏对于硬件最够了解的算法人员,也缺乏对算法足够了解的硬件设计人员。与这点相比,FPGA实现上的性能、功耗等等要求都显得容易多了。

如果多说一些的话,FPGA之所以适合做高性能计算,有几个层面的原因。第一个层面,面对部分特殊的任务,大量相对低速并行的单元比起少量高效单元而言效率更高。第二个层面,FPGA可以通过硬件结构的改变来适应算法的要求。第三个层面,这种改变是可以在运行过程中进行的。

其实我知道一点都没说清楚,这是囿于自身知识能力和表达能力限制的。如果大家希望了解更多可以私信,我介绍一些原来的同事给大家,离开他们的时候他们跟我一样是菜鸟,现在我还是菜鸟而他们已经成为业内专家了。

回复 支持 反对

使用道具 举报

7#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
可信度应该是很高的,我刚读研的时候看过微软研究院招FPGA的实习生,又三年过去了,做出点成果没什么问题。

在数据中心中使用FPGA代替通用CPU真的能够实现报导中的效果吗?
“微软现在正计划采用现场可编程阵列或现场可编程门阵列(FPGA)来代替原有的处理器架构,让微软可以采用自主软件专门修改并为自己服务。”这句话比较笼统,系统中的CPU完全被FPGA代替?还是用FPGA来做固定算法计算,减少CPU的使用?前一种那是FPGA计算机了,系统架构就完全不一样了。不过这种可能应该比较小,这条路很长。后一种的话,就是异构计算的一种了,用FPGA做算法加速,40倍的加速是合理的。
其实这里有意思的是“采用自主软件专门修改并为自己服务”,芯片厂商都有EDK,微软为什么自己做了个开发软件?如果不是唬人的话,这里面有可能意味微软研发了一套基于FPGA适用于WINDOWS下异构计算的开发流程。
这里想要说清楚,就要提到常用的异构计算方式以及其异同了。DSP、GPGPU、FPGA应该是常见异构计算方式,还有一种是重核。
常见的三种,单说计算性能,FPGA完爆剩下两种。FPGA比GPGPU的功耗也不是一个级别的。但是其实用的最多的是GPGPU。上面有答案说,FPGA贵,我觉得不是,高端GPGPU比高端FPGA并不便宜多少,而且耗电量高。限制FPGA使用的其实是开发成本,FPGA经常用在asic的前期验证上,因为FPGA验证比流片验证低,而且前端设计是一样的。但是相对于GPGPU来说,FPGA设计周期要长的的多,而且难度要大。相对于软件来说,FPGA调试也是相当困难。所以说限制FPGA使用的不是价格,用在需要和适合地方,硬件成本不算什么。一个团队早几个月完工,工资还能省一大笔呢。
     如果微软的那个“自主软件”能降低开发难度和周期,那才是真正能推动FPGA发展,还有这个项目的意义所在。
说偏了,不说了........

在技术上的实现细节是怎么样的?难度在哪里?
这个就没法说了,看这个新闻看不出来微软做了什么,也就没法谈细节和难度了。

回复 支持 反对

使用道具 举报

8#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
xilinx经常出的杂志几乎每期都会有xilinx帮助生意伙伴用FPGA设计代替传统方法提高效率的,比如前几期的morgan的快速交易,我想这类的设计工程往往有一个非常大的团队在做专门支持吧,原来要好几天,用xilinx fpga重构后只需要2、3个小时,数据来源 http://www.xilinx.com/publications/archives/xcell/Xcell74.pdf。使用传统CPU确实在一些高吞吐量,高实时性方面有瓶颈,原因是传统CPU的潜力已经挖掘差不多了,而天然并行的FPGA在做同样计算时确实可以轻松提高数十倍效率,而且功耗还很低。说实话新闻应该是真的,但是我们从来没见过,Xcell 杂志,这里每一期都会说一个例子,真真的感觉是雾里看花那种。我也很迷惑,做这些可重构,方向是对的,但是是不是走错路了,一个体现是现在各大FPGA厂商都想放弃之前硬件描述语言来开发FPGA,转而使用autoesl或hls,以及有感于摩根大通用XILINX FPGA做金融超级计算机 来自 Kevin-与非网博客中的c、java自动化转vhdl的。不管怎样,看不出来对我们IC前端有什么利好, @龚黎明,还请前辈指教。以上是我的一个感受,现在在校生,比较迷惑于FPGA方向。

回复 支持 反对

使用道具 举报

9#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
这个很容易理解,算法设计在硬件里面永远是比算法设计在软件里面快的。
基本就是CPU渲染3D和GPU渲染的差别。
当年本科的时候就想过以后有机会做FPGA方向的,可惜一直没什么机会。

回复 支持 反对

使用道具 举报

10#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
FPGA代替CPU这个说法本身就有问题,CPU包括运算器控制器和寄存器,代替了就不符合冯诺伊曼结构了

回复 支持 反对

使用道具 举报

11#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
因为FPGA是功能定制的。
CPU是通用的,冯诺依曼计算架构要把过程变成一条一条指令串行执行,靠很高很高的主频来提高执行速度。这样一来,功耗很高(功耗主要跟主频有关),效率有限。
FPGA可以定制你想要的功能,比如说可并行的东西全部单独做成模块,一个周期就全算出来了,这样就把功耗降下去了效率提上来了。


FPGA做服务器芯片是早几年就有的事,中国的高校都有老师接这种项目。服务器端有很多功能是成熟稳定的,把它们做成芯片,电费和散热费都减掉不少。毕竟CPU要靠堆数量堆电费来满足计算需求,FPGA定制虽然单个成本高,总体成本对比就是优势,时间越长越省钱(电费)。

前两年高端号称要做神经网络芯片,目标市场第一个就是服务器端。原因就是这样,省钱还提高效率。不过后来没消息了……

回复 支持 反对

使用道具 举报

12#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
首先,可信度很高。这是一条可行的技术路线,有先例可循,无(很大)难度,所以只要微软想做,做出来是板上钉钉的。IBM的Netezza一体机早就用FPGA参与商用关系数据库运算了。

其次,能达到加速的效果。很多答案中也提过原因了。

FPGA比通用CPU的性能优势在于,执行相同计算逻辑的封装层次少,能在硬件层面设计出的计算逻辑越复杂,效率优势越明显,简单的纯粹加减运算性能优势反而相对较低。

FPGA的缺点在于太过复杂的计算逻辑无法在硬件层面实现,这点也就导致FPGA在计算中心这样的环境中,不可能“取代”通用CPU,一定是和通用CPU配合。比如利用FPGA在固定简单逻辑计算中“傻跑快”的优势,先对数据做预处理,如果业务简单就直接出结果,如果复杂,再将计算结果(处理量已大大减少)交给通用CPU做复杂算法计算。所以有人回答FPGA会冲击Intel是不大会变成显示的。当然,还有固定好的算法再次改变(相对通用CPU)不灵活的缺点。

回复 支持 反对

使用道具 举报

13#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
这个技术上不算什么新闻吧,印象中google 什么的服务器就是用xilinx fpga搭的,以提高固定算法的执行速度。服务器端而已,数量不是很大,没有流片的必要,所以就用fpga咯。

不是产业级的,一次性买卖。估计altera也不是很感兴趣,只是借机提一下股价罢了。

实现细节在于自定义算法内容。如果这个算法相对稳定了 ,就可以用fpga实现,一方面加快运行速度,另一方面提高单机负载量。就是常说的硬件加速。

实现效果看算法硬件化改造的水平。

我觉得最大的难点在于算法改造以及任务调度。但我没接触分布式计算,并行计算的领域,对微软而言,这个应该也不是什么难点。这就是个工作量的问题罢了。

回复 支持 反对

使用道具 举报

14#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
其实站在现在这个时间点来看也不算抛弃intel了……毕竟altera刚被intel买了

回复 支持 反对

使用道具 举报

15#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
关于FPGA的描述前面的大大们都讲的挺详细了,我稍微补充一下。

与CPU相比总体优势(具体视情况而论):

01.并行性的速度与带宽
FPGA通过硬件描述语言配置,为每个功能建立单独的硬件来实现整体应用程序所需要的逻辑功能。因此,它具有并行处理的内在特点(空间并行,时间并行,逻辑并行),硬件设计使其具有较高的运行速度(空间&逻辑并行)和较大的吞吐量/位宽(基于流处理的时间并行),有时会将几种并行方式进行组合来最小化模块之间的通信以减少性能的开销 (例如属于逻辑并行的功能模块组与属于时间并行的流水线组合在一起时产生的同步脉动结构)。

虽然根据费林大大的观点,作为串行处理器的CPU所接收到的指令、资料呈流水线/管线化的时候,单指令单数据流(SISD)也可以拥有并行计算(时间并行)的特点,但就另外两个并行方式而言,FPGA在速度上仍具有很大优势,而且,这三种方式的组合在效果上是加成的。

02.功耗
FPGA的功耗分为两个部分:
1). 动态功耗:输出改变状态时的功率消耗。
2). 静态功耗:开机时CMOS电路的损耗。

动态功耗由下式给出:

                 P = N  C  Vdd^2  f


(其中,N是每个时钟周期发生变化的均值;C是每个输出的平均电容;f是时钟频率)






实现的难度主要有:
01.微软服务器中CPU上传统的软件算法向FPGA硬件算法的移植。

提一下FPGA上的硬件算法:


“在FPGA上实现一个算法的技巧就成为,将该算法分解为一个寄存器传递序列,并确定各个寄存器之间的恰当逻辑关系。需要注意的是,与软件算法的实现不同,每个逻辑模块是在并行执行的,因而也要求我们将算法从常规的顺序执行方式改变为可以利用硬件进行并行执行的方式。”




待续…
つづく

(得赶火车去了,到了继续码 · v · )




[参考资料:《Design for Embedded Image Processing on FPGAs》Donald G·Bailey]

回复 支持 反对

使用道具 举报

16#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
献丑一发.

服务器端用FPGA应该也不是什么大新闻了, 微软也不是第一家这么做的.
在NYSE的话, 每秒钟需要处理的transaction已经远超过10Gbs, 也就是远远的把x86架构的极限甩在了后面, 真的是不得不用FPGA. 现在的话差不多能到40Gbs...当然, 非常贵, 一个月的维护费用就是上10万刀级别, 如果我没记错的话.

用FPGA来实现加速算法还是不太现实, 楼上各位确实提到了很多FPGA的并行优势, 但是毕竟clock在这儿摆着, 500MHz不能再多. 从输入信号和输出信号入手, 中间插再多的combination logic也未必比人家4GHz的CPU快. 当然只是未必. 当用尽心力把verilog写出来之后, 跑一下ModelSim, 发现计算时间远超CPU的10倍, 那感觉真是谁用谁知道.....这个真的是不能保证的. 除非你是数字前端的神牛...
当然, MSR是不缺神牛的.

所以说, FPGA这种东西, 也就只能用在Computer Network上提升一下throughput. 有了throughput, 服务器数量减少也无所谓. 每个用户在队列上的等待时间明显变短, 自然速度就上来了.

回复 支持 反对

使用道具 举报

17#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
很简单,FPGA是硬件编程,比CPU上的软件编程性能可以做到更好。

回复 支持 反对

使用道具 举报

18#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
很简单的,若了解FPGA的原理就很简单了。
FPGA+软件,整个系统的架构是针对算法专用的,例如cache大小,指令处理都可以是最优化的。通用CPU的架构对于某种应用不一定是最优的,整个系统为了迎合CPU的架构,需要牺牲一些性能,是泛用型的。

举个例子:对话Ⅱ:高新技术在高频交易中的运用及风险控制
高频交易的技术与设备
FPGA用在美国交易所里贴着交易所主机做高频交易,他们已经很成熟了。

回复 支持 反对

使用道具 举报

19#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
首先感谢被邀请,首先我介绍一下FPGA和传统CPU的区别。FPGA说简单一点就是门电路的集合,它所有的模块几乎是同时运行的,而CPU是从上而下的运行的。所以说FPGA的处理速度一定远远高于任何CPU。但是CPU用于算法处理特别方便,FPGA做算法只能利用硬件实现,很麻烦也很耗资源。我并不是很了解微软的FPGA用途,但是我大致能猜测到若用FPGA那么一定用于没有设计算法的地方才能体现出它的优势。目前FPGA的最大应用在于信号处理或者通信的接口部分,在军方也用FPGA做算法,很浪费,代价很高,微软出不了那种钱的。毕竟商业为了挣钱(个人观点)。所以我能想到的FPGA微软使用的优势就是用于搜索引擎了

回复 支持 反对

使用道具 举报

20#
发表于 2018-4-12 10:59:00 | 只看该作者 来自: LAN 来自 LAN
FPGA在这个场合是一个可编程的协处理器,海量运算器+大本地缓存,比如某段大数据的简单处理,统计,统计数据整体本地缓存,分段并行搜索比较,这是冯诺曼比不了的。
主频高又如何,FPGA现在的运算器可是能到4位数的。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复