Intel和AMD都斥巨資收購了領(lǐng)先的FPGA公司。撇開相對(duì)較小的嵌入式計(jì)算和通信/互聯(lián)網(wǎng)市場(chǎng),這些基本上是對(duì)FPGA作為數(shù)據(jù)中心服務(wù)器CPU的關(guān)鍵組合的未來的賭注。但除非克服了在軟件程序員工作的難題和設(shè)備管理方面的主要挑戰(zhàn),否則這種組合將是個(gè)未知數(shù)。
理解為什么AMD對(duì)FPGA供應(yīng)商Xilinx如此感興趣,或者說Intel多年前為何對(duì)Altera感興趣,有助于了解FPGA到底是什么,以及這些設(shè)備在目前芯片行業(yè)中發(fā)揮什么作用。人們的想法很簡單,不幸的是,事實(shí)正是被這種簡單的想法和許多復(fù)雜的技術(shù)所掩蓋。
首先是名字。FPGA是Filed-Programmable Gate Array的縮寫,這個(gè)市場(chǎng)化的術(shù)語其實(shí)非常不合適,因?yàn)檫@些設(shè)備既不是可編程的,也不是門陣列。它們是工程師設(shè)計(jì)和構(gòu)建集成電路的方式中一些困難問題的解決方案。
ASIC
今天幾乎所有復(fù)雜的數(shù)字IC都是通過單一任務(wù)鏈來構(gòu)建的,即曾經(jīng)被稱為ASIC(Application-Specific IC)的設(shè)計(jì)流程。
確定了對(duì)芯片要求的精確表述后,設(shè)計(jì)者收集一系列的功能塊:處理器、內(nèi)存模塊、加速器功能和專用控制器,它們共同滿足了要求。這些模塊中的大多數(shù)都采用的IP,并從供應(yīng)商庫中提取。少數(shù)沒有這種形式的,設(shè)計(jì)者將用HDL(Hardware Description Language)來描述,但不要與C++或Python等編程語言混淆。編程語言描述了一個(gè)處理器應(yīng)該執(zhí)行的一系列步驟,以執(zhí)行一個(gè)算法。HDL描述的是一塊硬件的結(jié)構(gòu),而不是一連串的事件。
然后,設(shè)計(jì)工具將這些IP模塊和HDL描述組合成一個(gè)邏輯元素、寄存器和連接它們的線段的列表,即一個(gè)SoC的基本部分。然后,設(shè)計(jì)團(tuán)隊(duì)詳盡地測(cè)試這個(gè)所謂的網(wǎng)表。隨后的工具通過幾個(gè)曲折的步驟將網(wǎng)表轉(zhuǎn)換為代表即將在SoC上制造的實(shí)際晶體管和導(dǎo)線的形式,然后轉(zhuǎn)換為在芯片上打印這些特征的圖案。大量的數(shù)據(jù)要經(jīng)過更多的測(cè)試,然后被送到掩膜車間和制造實(shí)際集成電路的工廠。
這個(gè)過程可以制造出相當(dāng)接近底層芯片工藝的潛在最大密度、速度和能效的集成電路。但它需要大量的時(shí)間,從需求到第一塊芯片誕生需要9個(gè)月的時(shí)間,這并不罕見,如果有設(shè)計(jì)錯(cuò)誤、需求變化或工廠的延誤,從開始到結(jié)束的鏈條很容易達(dá)到一年或更長時(shí)間。而且還有大量的初始成本,不僅包括設(shè)計(jì)團(tuán)隊(duì)的工作,還有一套掩模和最初運(yùn)行芯片的昂貴的成本。在許多情況下,例如不確定的設(shè)計(jì)要求,在快速發(fā)展的市場(chǎng)或小批量的生產(chǎn),ASIC方法并不理想。
FPGA來救場(chǎng)FPGA正是為了解決這個(gè)問題而出現(xiàn)的。但FPGA的密度和速度會(huì)降低,功耗也大幅增加,F(xiàn)PGA讓設(shè)計(jì)團(tuán)隊(duì)實(shí)際上跳過了網(wǎng)表開發(fā)后的所有步驟。相反,設(shè)計(jì)者直接將網(wǎng)表實(shí)施在現(xiàn)成的FPGA芯片中。這可以節(jié)省幾個(gè)月的后端芯片設(shè)計(jì)時(shí)間和掩膜車間及制造時(shí)間,以及數(shù)萬美元的前期費(fèi)用。FPGA集成電路的單價(jià)會(huì)大大高于同類ASIC芯片的量產(chǎn)單價(jià)。但通常,如果設(shè)計(jì)發(fā)生變化或產(chǎn)量較低,ASIC攤銷后的單位成本實(shí)際上可能高于FPGA。
可配置性是關(guān)鍵
那么,F(xiàn)PGA是如何避免所有這些步驟的呢?簡單的說,F(xiàn)PGA是作為標(biāo)準(zhǔn)產(chǎn)品的IC量產(chǎn)的,然后進(jìn)行配置(通常在上電時(shí))以執(zhí)行所需的功能。稍微長一點(diǎn)的答案是,F(xiàn)PGA用三個(gè)可配置的元素取代了ASIC設(shè)計(jì)的三個(gè)基本元素,邏輯功能、寄存器和線段,高度靈活的可配置邏輯單元、可配置寄存器和在可配置開關(guān)盒之間運(yùn)行的巨大的線段云。
為了提高密度和性能,許多FPGA包括內(nèi)存塊、算術(shù)單元甚至整個(gè)CPU內(nèi)核的硬件塊,這些硬件塊在硬邏輯中實(shí)現(xiàn),就像在ASIC中一樣,而不是可配置單元。因此設(shè)計(jì)者可以根據(jù)需要將這些塊整合到他們的設(shè)計(jì)中。
通過配置邏輯元件來執(zhí)行設(shè)計(jì)者想要的功能,設(shè)置寄存器的操作,并設(shè)置開關(guān)盒,將邏輯單元、寄存器和硬模塊連接成一個(gè)邏輯網(wǎng)絡(luò),設(shè)計(jì)者可以直接在FPGA中實(shí)施網(wǎng)表,而不需要任何曲折的后端設(shè)計(jì)或?qū)⑷魏卧O(shè)計(jì)文件發(fā)送給第三方。設(shè)計(jì)人員使用FPGA供應(yīng)商的工具來創(chuàng)建配置文件,F(xiàn)PGA在上電時(shí)將文件加載到自身,僅此而已。
從網(wǎng)表到工作芯片的時(shí)間非常短,對(duì)于較小的設(shè)計(jì)來說是幾天甚至幾小時(shí),以及較低的前端成本,就使FPGA在一系列應(yīng)用中很受歡迎,包括工業(yè)、醫(yī)療和軍事用途。而且,芯片的制造尺寸范圍很廣,可以實(shí)現(xiàn)從小型工業(yè)控制器到大型百萬門SoC的各種功能。
一個(gè)巨大的小眾市場(chǎng)
早期采用FPGA的行業(yè)是通信和互聯(lián)網(wǎng)行業(yè)。能夠設(shè)計(jì)快速的數(shù)據(jù)包處理引擎或無線信號(hào)處理器,在幾天內(nèi)將其應(yīng)用于芯片,并在電路中全速測(cè)試,對(duì)于這個(gè)快速發(fā)展的行業(yè)來說是天賜之物,特別是在互聯(lián)網(wǎng)爆炸的年代和每一代新的無線技術(shù)的前沿。該行業(yè)不僅可以使用FPGA進(jìn)行原型設(shè)計(jì)和早期生產(chǎn),而且往往需求變化非??欤灾劣跊]有時(shí)間在全面生產(chǎn)中用成本較低的ASIC取代FPGA。這種情況導(dǎo)致了高端FPGA銷量的大幅增長,使兩個(gè)主要的FPGA廠商Xilinx和Altera從非常小眾的Fabless小公司變成了數(shù)十億美元營收的體量。
但是,隨著互聯(lián)網(wǎng)泡沫破裂和無線行業(yè)部署速度的放緩,艱難的3G發(fā)展到更加艱難和昂貴的4G,然后是曠日持久且非常有挑戰(zhàn)性的5G,有利可圖的空間就越來越少了。FPGA供應(yīng)商開始尋找另一個(gè)爆炸性增長的機(jī)會(huì)。所以,他們找到了數(shù)據(jù)中心。
一種可能性
目前,數(shù)據(jù)中心是一個(gè)巨大的服務(wù)器陣列,而服務(wù)器是由承載著高端CPU的卡片組成。這種架構(gòu)與FPGA有什么關(guān)系并不直觀。至少對(duì)于數(shù)據(jù)中心的架構(gòu)師來說,這一點(diǎn)最初并不明顯,他們對(duì)FPGA供應(yīng)商的第一次進(jìn)展感到不解。
但撥開表面,在該數(shù)據(jù)中心內(nèi),所有這些CPU都在運(yùn)行程序。除了極少數(shù)例外,CPU實(shí)際運(yùn)行代碼的大部分時(shí)間,而不是等待網(wǎng)絡(luò)或存儲(chǔ)的時(shí)間,可能是花在10%的代碼上,即所謂的內(nèi)核。如果能使內(nèi)核執(zhí)行得更快,而且理想情況下,如果你能把它們直接放到硬件,這樣你就不必一次又一次地獲取指令、加載和存儲(chǔ)數(shù)據(jù)并進(jìn)行分支,你可以使許多工作負(fù)載運(yùn)行得更快,功耗更低,并可能使用更少的內(nèi)存。
因此,F(xiàn)PGA供應(yīng)商認(rèn)為,將最重要的內(nèi)核實(shí)現(xiàn)為FPGA中的硬件加速器。不僅內(nèi)核的執(zhí)行速度會(huì)快得多,而且由于FPGA是可重新配置的,你可以對(duì)其進(jìn)行實(shí)時(shí)調(diào)整,以加速當(dāng)前工作負(fù)載需要的任何內(nèi)核。理論上,這對(duì)數(shù)據(jù)中心的架構(gòu)師來說是一個(gè)巨大的勝利。加速、節(jié)能,而且,如果你在數(shù)據(jù)中心的每個(gè)CPU旁邊放一個(gè)FPGA,就可以保留重新定位云管理所依賴的工作負(fù)載的所有靈活性。
FPGA行業(yè)最先聽到的部分是“每個(gè)CPU旁邊的FPGA”。這引發(fā)了向數(shù)據(jù)中心行業(yè)的重大轉(zhuǎn)折。可以說,擁有FPGA公司確實(shí)給了CPU公司更多接觸嵌入式計(jì)算的機(jī)會(huì),這一轉(zhuǎn)折吸引了Intel和AMD的注意。
沒那么簡單
但是,有幾個(gè)問題,就像泰坦尼克號(hào)的冰山一樣,可能比最初所認(rèn)識(shí)的更重要。第一個(gè)問題是我們?cè)陂_始時(shí)提到的配置FPGA和編程CPU之間的區(qū)別。技能組合是完全不同的。HDL不僅與C或Python或其他語言完全不同,且做的是不同的事情。一個(gè)是用邏輯單元和寄存器來描述硬件元素的網(wǎng)絡(luò),另一個(gè)用隨時(shí)間離散的順序操作來描述算法。一個(gè)需要對(duì)數(shù)字邏輯硬件有深刻的理解,另一個(gè)則需要熟悉計(jì)算機(jī)編程。
現(xiàn)在,絕大多數(shù)為數(shù)據(jù)中心編寫工作負(fù)載的人是計(jì)算機(jī)程序員。他們可能是某個(gè)應(yīng)用領(lǐng)域的專家,甚至是一套算法的專家,但他們通常對(duì)數(shù)字邏輯硬件知之甚少或一無所知。很快就可以看出,這些人雖然是各自領(lǐng)域的專家,但不可能成功地配置FPGA來加速他們的部分工作負(fù)載。這就需要一個(gè)FPGA專家,而又沒有那么多的專家。
這些現(xiàn)實(shí)情況都會(huì)限制FPGA加速器對(duì)普通云計(jì)算用戶的吸引力,技術(shù)編程團(tuán)隊(duì)在一些高度計(jì)算密集型應(yīng)用(如天氣分析、蛋白質(zhì)折疊等等)中很快就意識(shí)到了這點(diǎn)。
可能的解決方案
人們?cè)噲D彌合這一差距。一個(gè)明顯的辦法是認(rèn)識(shí)到人們想要加速的許多最關(guān)鍵的內(nèi)核是非常相似的,比如三角函數(shù)。事實(shí)上,其中許多已經(jīng)是數(shù)學(xué)或科學(xué)庫中的庫函數(shù)。因此,如果你讓一個(gè)FPGA專家團(tuán)隊(duì)去配置FPGA以加速這些常見算法中的內(nèi)核,那么很多人甚至在不了解FPGA的情況下就可以使用它們。這項(xiàng)工作正在繼續(xù)。
另一項(xiàng)工作是創(chuàng)建一個(gè)工具鏈,可以將計(jì)算機(jī)程序直接轉(zhuǎn)化為FPGA配置,無需人工干預(yù)。事實(shí)證明,這是一個(gè)更加艱巨的挑戰(zhàn)。C-to-netlist工具已經(jīng)存在好幾年了,對(duì)于某些類型的算法和專門為翻譯而編寫的代碼,它們工作得很好。但坦白講,把一大塊C++或Python塞進(jìn)一個(gè)工具,并在另一端有一個(gè)好的FPGA實(shí)現(xiàn),仍然是一項(xiàng)進(jìn)行中的工作。
資源管理問題
除了編程與配置問題外,還有整個(gè)資源管理的問題。在數(shù)據(jù)中心,特別是云計(jì)算數(shù)據(jù)中心,架構(gòu)師希望每個(gè)CPU能夠同時(shí)處理多個(gè)任務(wù),當(dāng)一個(gè)任務(wù)必須暫停時(shí),CPU能在多任務(wù)之間快速切換。架構(gòu)師們還希望他們的自動(dòng)化數(shù)據(jù)中心管理工具能夠在給定的CPU上快速啟動(dòng)任務(wù),跟蹤其性能,并在其不再活動(dòng)時(shí)快速銷毀,將資源釋放給其他任務(wù)。他們還期望這些共同駐留的任務(wù)之間有絕對(duì)的安全性,沒有數(shù)據(jù)從一個(gè)任務(wù)泄漏到另一個(gè)任務(wù)。
CPU供應(yīng)商為滿足這些需求付出了大量的工作,包括特殊指令和操作模式。但現(xiàn)有的FPGA在設(shè)計(jì)時(shí)沒有考慮到這些要求。對(duì)FPGA進(jìn)行分區(qū),使其能夠支持幾個(gè)不同的加速器并同時(shí)為幾個(gè)不同的任務(wù)服務(wù)是可能的,但并不簡單。保證數(shù)據(jù)不會(huì)在分區(qū)之間泄漏是非常重要的。而且,配置FPGA可能需要幾分鐘的時(shí)間,而不是像在CPU上啟動(dòng)一個(gè)新任務(wù)那樣只需幾毫秒。因此,在FPGA最初設(shè)想的工作環(huán)境和云環(huán)境之間存在著巨大的不匹配。
未來的技術(shù)?
這些障礙并沒有阻止主要的云計(jì)算供應(yīng)商提供FPGA與CPU結(jié)合的實(shí)例,也沒有阻止一些高級(jí)開發(fā)者利用這些芯片。但在這一點(diǎn)上,F(xiàn)PGA還沒有像GPU那樣深入地滲透到云計(jì)算領(lǐng)域,畢竟GPU有好幾年的領(lǐng)先優(yōu)勢(shì)。
也許CPU與FPGA在板卡甚至芯片層面的更緊密地集成會(huì)加速采用。當(dāng)然,Intel、AMD和超大規(guī)模公司的大量資源可以克服云端FPGA的編程和管理挑戰(zhàn)。但面對(duì)每一代FPGA芯片高昂的開發(fā)成本,以及數(shù)據(jù)中心CPU性能的持續(xù)改善,很難說FPGA在數(shù)據(jù)中心領(lǐng)域的前景會(huì)如何。
現(xiàn)場(chǎng)可配置性使FPGA成為在某些情況下實(shí)現(xiàn)SoC的一種快速、通常較低成本的方式。理論上,這也可以使它們成為云數(shù)據(jù)中心CPU芯片的理想伴侶。但仍有一些主要問題需要克服。