<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 揭秘FPGA:為什么比 GPU 的延遲低這么多?

揭秘FPGA:為什么比 GPU 的延遲低這么多?

作者: 時(shí)間:2018-06-27 來(lái)源:網(wǎng)絡(luò ) 收藏


本文引用地址:http://dyxdggzs.com/article/201806/382354.htm

  ▲ 構成的數據中心加速平面,介于網(wǎng)絡(luò )交換層(TOR、L1、L2)和傳統服務(wù)器軟件(CPU 上運行的軟件)之間。來(lái)源:[4]

  通過(guò)高帶寬、低延遲的網(wǎng)絡(luò )互聯(lián)的 構成了介于網(wǎng)絡(luò )交換層和傳統服務(wù)器軟件之間的數據中心加速平面。

  除了每臺提供云服務(wù)的服務(wù)器都需要的網(wǎng)絡(luò )和存儲虛擬化加速, 上的剩余資源還可以用來(lái)加速 Bing 搜索、深度神經(jīng)網(wǎng)絡(luò )(DNN)等計算任務(wù)。

  對很多類(lèi)型的應用,隨著(zhù)分布式 FPGA 加速器的規模擴大,其性能提升是超線(xiàn)性的。

  例如 CNN inference,當只用一塊 FPGA 的時(shí)候,由于片上內存不足以放下整個(gè)模型,需要不斷訪(fǎng)問(wèn) DRAM 中的模型權重,性能瓶頸在 DRAM;如果 FPGA 的數量足夠多,每塊 FPGA 負責模型中的一層或者一層中的若干個(gè)特征,使得模型權重完全載入片上內存,就消除了 DRAM 的性能瓶頸,完全發(fā)揮出 FPGA 計算單元的性能。

  當然,拆得過(guò)細也會(huì )導致通信開(kāi)銷(xiāo)的增加。把任務(wù)拆分到分布式 FPGA 集群的關(guān)鍵在于平衡計算和通信。


  ▲從神經(jīng)網(wǎng)絡(luò )模型到 HaaS 上的 FPGA。利用模型內的并行性,模型的不同層、不同特征映射到不同 FPGA。來(lái)源:[4]

  在 MICRO'16 會(huì )議上,微軟提出了 Hardware as a Service (HaaS) 的概念,即把硬件作為一種可調度的云服務(wù),使得 FPGA 服務(wù)的集中調度、管理和大規模部署成為可能。


  ▲Hardware as a Service (HaaS)。來(lái)源:[4]

  從第一代裝滿(mǎn) FPGA 的專(zhuān)用服務(wù)器集群,到第二代通過(guò)專(zhuān)網(wǎng)連接的 FPGA 加速卡集群,到目前復用數據中心網(wǎng)絡(luò )的大規模 FPGA 云,三個(gè)思想指導我們的路線(xiàn):

  硬件和軟件不是相互取代的關(guān)系,而是合作的關(guān)系;

  必須具備靈活性,即用軟件定義的能力;

  必須具備可擴放性(scalability)。

  FPGA在中的角色

  最后談一點(diǎn)我個(gè)人對 FPGA 在中角色的思考。作為三年級博士生,我在微軟亞洲研究院的研究試圖回答兩個(gè)問(wèn)題:

  FPGA 在云規模的網(wǎng)絡(luò )互連系統中應當充當怎樣的角色?

  如何高效、可擴放地對 FPGA + CPU 的異構系統進(jìn)行編程?

  我對 FPGA 業(yè)界主要的遺憾是,FPGA 在數據中心的主流用法,從除微軟外的互聯(lián)網(wǎng)巨頭,到兩大 FPGA 廠(chǎng)商,再到學(xué)術(shù)界,大多是把 FPGA 當作跟 一樣的計算密集型任務(wù)的加速卡。然而 FPGA 真的很適合做 的事情嗎?

  前面講過(guò),FPGA 和 最大的區別在于體系結構,FPGA 更適合做需要低延遲的流式處理,GPU 更適合做大批量同構數據的處理。

  由于很多人打算把 FPGA 當作計算加速卡來(lái)用,兩大 FPGA 廠(chǎng)商推出的高層次編程模型也是基于 OpenCL,模仿 GPU 基于共享內存的批處理模式。CPU 要交給 FPGA 做一件事,需要先放進(jìn) FPGA 板上的 DRAM,然后告訴 FPGA 開(kāi)始執行,FPGA 把執行結果放回 DRAM,再通知 CPU 去取回。

  CPU 和 FPGA 之間本來(lái)可以通過(guò) PCIe 高效通信,為什么要到板上的 DRAM 繞一圈?也許是工程實(shí)現的問(wèn)題,我們發(fā)現通過(guò) OpenCL 寫(xiě) DRAM、啟動(dòng) kernel、讀 DRAM 一個(gè)來(lái)回,需要 1.8 毫秒。而通過(guò) PCIe DMA 來(lái)通信,卻只要 1~2 微秒。


  ▲PCIe I/O channel 與 OpenCL 的性能比較??v坐標為對數坐標。來(lái)源:[5]

  OpenCL 里面多個(gè) kernel 之間的通信就更夸張了,默認的方式也是通過(guò)共享內存。

  本文開(kāi)篇就講,FPGA 比 CPU 和 GPU 能效高,體系結構上的根本優(yōu)勢是無(wú)指令、無(wú)需共享內存。使用共享內存在多個(gè) kernel 之間通信,在順序通信(FIFO)的情況下是毫無(wú)必要的。況且 FPGA 上的 DRAM 一般比 GPU 上的 DRAM 慢很多。

  因此我們提出了 ClickNP 網(wǎng)絡(luò )編程框架 [5],使用管道(channel)而非共享內存來(lái)在執行單元(element/kernel)間、執行單元和主機軟件間進(jìn)行通信。

  需要共享內存的應用,也可以在管道的基礎上實(shí)現,畢竟 CSP(Communicating Sequential Process)和共享內存理論上是等價(jià)的嘛。ClickNP 目前還是在 OpenCL 基礎上的一個(gè)框架,受到 C 語(yǔ)言描述硬件的局限性(當然 HLS 比 Verilog 的開(kāi)發(fā)效率確實(shí)高多了)。理想的硬件描述語(yǔ)言,大概不會(huì )是 C 語(yǔ)言吧。


  ▲ClickNP 使用 channel 在 elements 間通信,來(lái)源:[5]


  ▲ClickNP 使用 channel 在 FPGA 和 CPU 間通信,來(lái)源:[5]

  低延遲的流式處理,需要最多的地方就是通信。

  然而 CPU 由于并行性的限制和操作系統的調度,做通信效率不高,延遲也不穩定。

  此外,通信就必然涉及到調度和仲裁,CPU 由于單核性能的局限和核間通信的低效,調度、仲裁性能受限,硬件則很適合做這種重復工作。因此我的博士研究把 FPGA 定義為通信的「大管家」,不管是服務(wù)器跟服務(wù)器之間的通信,虛擬機跟虛擬機之間的通信,進(jìn)程跟進(jìn)程之間的通信,CPU 跟存儲設備之間的通信,都可以用 FPGA 來(lái)加速。

  成也蕭何,敗也蕭何。缺少指令同時(shí)是 FPGA 的優(yōu)勢和軟肋。

  每做一點(diǎn)不同的事情,就要占用一定的 FPGA 邏輯資源。如果要做的事情復雜、重復性不強,就會(huì )占用大量的邏輯資源,其中的大部分處于閑置狀態(tài)。這時(shí)就不如用馮·諾依曼結構的處理器。

  數據中心里的很多任務(wù)有很強的局部性和重復性:一部分是虛擬化平臺需要做的網(wǎng)絡(luò )和存儲,這些都屬于通信;另一部分是客戶(hù)計算任務(wù)里的,比如機器學(xué)習、加密解密。

  首先把 FPGA 用于它最擅長(cháng)的通信,日后也許也會(huì )像 AWS 那樣把 FPGA 作為計算加速卡租給客戶(hù)。

  不管通信還是機器學(xué)習、加密解密,算法都是很復雜的,如果試圖用 FPGA 完全取代 CPU,勢必會(huì )帶來(lái) FPGA 邏輯資源極大的浪費,也會(huì )提高 FPGA 程序的開(kāi)發(fā)成本。更實(shí)用的做法是FPGA 和 CPU 協(xié)同工作,局部性和重復性強的歸 FPGA,復雜的歸 CPU。

  當我們用 FPGA 加速了 Bing 搜索、深度學(xué)習等越來(lái)越多的服務(wù);當網(wǎng)絡(luò )虛擬化、存儲虛擬化等基礎組件的數據平面被 FPGA 把持;當 FPGA 組成的「數據中心加速平面」成為網(wǎng)絡(luò )和服務(wù)器之間的天塹……似乎有種感覺(jué),FPGA 將掌控全局,CPU 上的計算任務(wù)反而變得碎片化,受 FPGA 的驅使。以往我們是 CPU 為主,把重復的計算任務(wù)卸載(offload)到 FPGA 上;以后會(huì )不會(huì )變成 FPGA 為主,把復雜的計算任務(wù)卸載到 CPU 上呢?隨著(zhù) Xeon + FPGA 的問(wèn)世,古老的 SoC 會(huì )不會(huì )在數據中心煥發(fā)新生?

  「跨越內存墻,走向可編程世界」(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.


上一頁(yè) 1 2 3 4 5 6 下一頁(yè)

關(guān)鍵詞: FPGA 云計算 GPU

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>