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