在 CPU 中集成 FPGA 等可編程電路的想法如何?

首先說明一下這裡說的FPGA可以被應用程序以某種方式編程、使用。

下面是個人陳述時間~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

這個想法是異構計算的一種吧。異構計算中「異」的部分一般是指用CUDA、OpenCL、DX Compute等API利用的GPGPU或是不同指令集的CPU。不同指令集的CPU暫且不提(於PC意義不大),單就GPGPU而言,是有著比較嚴重的局限性的。

這個局限性表現在於:正如它誕生的理由一樣,它只適合計算密集型應用。而對普通用戶而言,除了遊戲,似乎沒有其他對計算能力有如此渴求的應用。

因為這個致命的缺點,異構計算吼了這麼多年,GPGPU從來沒有大規模推廣過, Windows 8 modern task manager也沒加入GPU使用率,顯卡也從沒摘過「顯卡」的帽子o(╯□╰)o

與之相比,FPGA便有更廣闊的應用場景。其與CPU及ASIC比較,FPGA在通用性與性能兩者中都處於一個適中的位置,可以作為當前計算機體系結構的補充。

可能的應用:

1.實時CPU機器碼-&>FPGA原語綜合。操作系統可以實時檢測目前哪一些函數正被頻繁調用,將其翻譯後在FPGA上綜合。

2.高性能需求應用為其編寫HDL模塊,運行時綜合以實現加速,如網頁服務程序、資料庫引擎等。

3.獲得不具備的硬體功能,如新一代CPU的新增指令集,更大的Cache,TPM晶元。(開源硬體?

4.在FPGA上實現操作系統內核。可以讓微內核概念變得真正可行,因為如果FPGA模塊可以掌控外圍硬體的話,syscall便不需要進行狀態切換。

5.作為一個監視系統來監視宿主系統的運行狀態。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

可行性分析就交給你們了=_=


簡單說兩個CPU+FPGA問題:

1. 樓上提到的die size。高性能cpu和fpga以及片上cache都是面積需求大戶,現實的die size一定,誰用多少需要架構探索,性能此消彼長。

2. FPGA如何使用。目前高位綜合效率較低,而讓普通軟體開發人員用HDL寫加速硬體,學習和開發成本太高。FPGA和processor(cpu,dsp,gpgpu)的玩法完全不同,現代編譯器發展成果很難直接用在FPGA上。有一支研究在FPGA上實現虛擬CGRA,他們希望同時獲取fpga和processor兩方面優勢。

現狀:

1. FPGA SoC產品Xilinx和Altra都有。比如Zynq系列內嵌ARM 1G以上多核processor加大規模FPGA邏輯。目前很多業內學界的FPGA+CPU應用研究都是使用這款晶元。

2. 讓普通應用軟體開發者更容易使用FPGA,是這幾年FPGA領域的首要任務。高位綜合目前看來比較難達到好效果,為GPU而生的opencl框架雖然也支持fpga但效果也有限。google、微軟、xilinx也在探索麵嚮應用的高度可配置的專用硬體系統(非processor)。

總結:

FPGA很自由,你可以用他做任何數字邏輯,還有大量片上dsp,block ram,甚至可以動態重編程。性能比processor高几十上百倍,比asic低十倍左右。

FPGA行業之前集中資源發展硬體,現在硬體架構基本穩定,正是開始研究拓寬應用的階段。樓主的一些想法業內也正在探索,目前要說商用成果還言之尚早,但前景可觀。很有可能是打破processor獨統世界的技術。


在未來,FPGA可以見到的玩法應該是這樣的:

0. FPGA的頻率大約只有CPU的1/8 - 1/10;

1. L3 cache的訪問能力,在L3一級的匯流排上提供更加同步信令;這樣可以保證FPGA有足夠的帶寬和統一定址能力;

2. 提供基本單元(也就是DSP。因為FPGA很難做到比ASIC快),比如浮點運算單元,不用太多;如果有延遲更低的互聯匯流排,也可以削弱這部分的設計。

3. Intel提供Synthesis SDK,解決電路綜合軟體的License Fee過高的問題;

4. Stacked Package,這樣有足夠的空間可以放置FPGA的晶體管;

5. 軟體在編譯之後的可執行文件會存在.fpga section,OS會在軟體運行前裝載到FPGA上。另外,FPGA設備應該是一段時間內獨佔的,因為切換成本太高。

6. 高級語言編譯到FPGA不是非常現實,但是可能會出現比Verilog更高級一些的語言。

另外,FPGA的優勢在於可以通過Pipeline提高Throughput,並做Latency Hiding,而不僅僅是並行化。


Intel出過基於atom的型號,直接集成一塊不大的FPGA。不過據說並不給民間使用,而是給定製用戶使用的。

Xilinx也有對應產品,不過集成的CPU核心是Cortex-A9的,貌似是四核的。然後配一大坨FPGA。Altera記不清了。

Atmel也出過AVR+FPGA的晶元。

總之這類產品是有的。不過因為FPGA的開發難度有些高,所以恐怕普及會有很大難度。要知道GPGPU的應用仍然沒有大規模普及,更何況難度更高的FPGA。


謝邀先,這個問題很長,慢慢答,首先看了前面的答案,大多數答非所問。只有 @浪客 的答案(是這麼引用么)切中部分問題。至於其他提到的東西,基本都已經是常用架構了。比如fpga做相機,那就是把工業相機的方案移過來而已。工業相機一共兩類方案,一個是fpga,一個是dsp,dsp還分為通用如達芬奇,或者專用的例如所謂的機芯(套片)。fpga相對高端些。不過直接用來做消費電子相機有點誇張了,基本上不是成熟的商業模式,不賺錢是肯定的了,拿到手裡被用戶摔基本是必然的。

至於cpu加fpga,掛pcie也好,掛rapidio也好,或者直接flex bus, 非同步ram介面都可以,都有成熟模式,做裡頭做外頭都有成熟的樣例,怎麼封裝其實無所謂,就是錢的問題,所以其他的都沒答到點子上。oracle的那個只是說fpga實現指定軟體加速,當然有一定靈活性啦。這個大家都有,Fb,google 都可能有,暴雪,摩根也有。就是硬體加速嘛。但這個不是題主的問題點

……………………

題主想要的東西是一種半生物,而不是一台大家在討論的硬體產品。生物的基本要求是能生長,能繁殖。題主要的東西不需要繁殖,但實實在在的要自動發生物理形態的變化,類似生長或者進化,目前還屬於科幻領域。

…………

題主設想是一個強大的編譯器,可以將軟體代碼中部分適用於硬體加速的部分提取出來進行硬體加速。首先這涉及到任務劃分的問題,哪些硬體加速,哪些軟體實現。這目前一般人為判斷,人工智慧還沒發展到這地步。即使假設到了那一步,由於軟體可以並發多任務執行。當a任務執行時,並不知道幾分鐘後b任務要幹什麼。因此一種綜合結果對a最優可能導致b無法執行,當任務更多時很可能就因為已執行任務的負載導致無法進行新任務。此外,由於硬體加速會改變指令周期,硬體加速實現情況變化(由於優化情況與歷史有關),軟體無法判斷指令完成情況,只能設定特定的同步路徑,這實實在在需要物理存在的路徑來實現。由於現有的cpu通信路徑數量有限,而軟體任務數無限,因此板卡需要額外長一些線出來才行。這就是生長。

另外,硬體綜合需要很大的計算量,且不說現有cpu可以短時間內綜合出結果,就算系統跑起來後,為了綜合效果,需要將所有在運行的進程全部重新加速,就意味著cpu上的軟體需要全down掉。

誠然fpga可以在線重配,部分重配。但是每次配置都需要秒級時間。每個軟體演算法在每個階段都有可能需要加速,那每次都重配你的系統要多不穩定。

所以fpga和gpu一樣只適合對已知演算法進行加速,不適合進行未知操作的實時變更。最理想的操作就是通過一條匯流排將一個完整任務的數據打包流過來,處理後再流回去。


非常好的問題。

我不是研究CPU和系統構架的,所以我會從市場的角度來簡單分析下。

@Peter Lau 問題中所說的異構提出的很早了,那個時候好像只有CPU,沒有ARM。

所以大家的視角也只是集中在這裡,最近幾年,智能手機的爆炸性激發了ARM和它小夥伴們蓬勃的爆炸性發展。相信你們能懂我的意思。

現而今,如果非要CPU+FPGA,可能還是沒有人會做,跨越很大,我想不到有什麼試用環境能激發晶元公司去投入巨額資金做研究。不是不能搞定,是搞定了不知道賣給誰。

與其開發一個市場不確定性很大的新構架,不如在舊有的構架上添枝加葉,多弄幾個核,提高頻率,增加緩存,功能大大溢出需求,反正世界上就2家CPU,愛買不買。

突然之間,智能手機火了,世界變了。intel的現狀我們都知道,不扯了。

也許以前CPU行業是技術導向,但是現在這幾年可不是技術人員打算做什麼,而是這個世界需要什麼。舉個例子:華爾街的高頻交易用的是FPGA而不是傳統意義上的伺服器+軟體。

計算公式相對固定,邏輯程序相對固定,只要求速度和穩定性的場合,給人用的機器顯然不適合。

大數據、雲計算、物聯網、XXX管它什麼概念,這是全新的使用場景,也許FPGA裡邊嵌個ARM會更適合呢? 個人感覺做Streaming就很合適啊

再透露點小道消息吧,某著名消費類電子產品大廠下半年會出個新型號相機,一顆FPGA,圖像處理的演算法,各個硬體部分的驅動,幾乎所有程序都扔在FLASH里,用的時候往FPGA里拽。

挺奇怪的吧,和傳統意義上的系統完全不同了。


問題很有意思,但是可能實際應用環境不大。

一般是FPGA 去集成CPU,CPU集成FPGA 成本不優勢


Intel unveils new Xeon chip with integrated FPGA, touts 20x performance boost


看看Xilinx最新出的MPSoC架構,再看看題主的提問時間。覺得題主是一個先知先覺的人。哈哈。


我們終於要迎來CPU中毒的時代了。只要中毒,你就死的透透的~~


一般程序員寫不好 HDL,那東西的思維和編程乃至單片機都完全不同。

不過 AX 二廠最近都有弄 OpenCL 的 SDK……


可參考2012英特爾嵌入式平台的那個晶元,這個晶元將一個atom處理器和一款altera中高端(型號忘了),通過pcie匯流排連接,並封裝到同一塊封裝內。即看起來是同一塊晶元。

當初據說Intel想和altera有「更深入的合作」,集成到同一矽片上之類的,但是會涉及一些涉密技術問題還是什麼的,還是Intel有併購altera的意思什麼的(野消息,不對的話請忽略),總之合作不是很愉快,之後好像就沒再出x86和altera集成的晶元了。

但是現在altera有集成有arm硬核處理器的晶元。

這種結構一方面是可以一些外設動態配置,減少了橋晶元的使用,另一方面可以軟硬體協同設計提高計算性能吧。

不對的地方應該很多,致信度不高,當段子吧。

2014.12.31 補充

最近用 altera 的 cyclone v 系列晶元,集成了 cortex a9 雙核的處理器,用qsys搭建系統,FPGA 和 arm 有高速匯流排橋連接,使用很方便。


嵌入式某些輕量級soc有這樣做的


題主的問題約等於:現在的原子彈在燒烤界一直沒有流行起來,如果把爐子和激光槍結合起來會不會更有前途?


FPGA級別的可重構計算不同於GPU級別的可重構計算,軟體瓶頸嚴重。

目前的操作系統不支持由軟體實時修改CPU指令集的計算模型,所以FPGA部分不能被操作系統當作CPU,只能被當作外設。現代的操作系統禁止程序直接訪問硬體,所以訪問FPGA部分還要經過驅動程序。結果,每次修改FPGA部分都要重新安裝新的驅動程序,不能邊用邊改,更不能多個應用程序共享FPGA部分。

以上各種兼容性問題基本否定了可重構計算跟通用操作系統結合、用FPGA加速應用程序的可能性。修改操作系統內核的複雜度和受到的歷史制約可能比讓應用程序開發者從頭學習HDL編程還要大。

樓上所述的各種現有異構晶元的目標市場都是典型的嵌入式應用。在這些場合里軟體和硬體一起被開發,然後軟體一次性固化在硬體里基本不再改動。尤其是FPGA部分作為一個功能固定的外設不再改動。

可重構計算用於消費類電子可能唯一的案例是Creative在2009年推出的的Zii,stem cell computing 「幹細胞計算」。目前還沒倒但是非常小眾,只用來製造一些規格特殊的多媒體設備。


已經有了啊。


目前cpu+fpga的應用主要還是把fpga做高速並行處理單元用,用來做控制的很少。兩個放在一個封裝的只是聽說過有產品,沒有看過有誰用過。

&>&>

1.實時CPU機器碼-&>FPGA原語綜合。操作系統可以實時檢測目前哪一些函數正被頻繁調用,將其翻譯後在FPGA上綜合。

A:順序的運算處理FPGA不佔優勢,CPU的ALU是高度優化過的,要比FPGA的實現版本強。這樣做得不償失。

2.高性能需求應用為其編寫HDL模塊,運行時綜合以實現加速,如網頁服務程序、資料庫引擎等。

A: 除非是數據密集型同時又是可以並行處理的應用場景,不然加速意義不大。

3.獲得不具備的硬體功能,如新一代CPU的新增指令集,更大的Cache,TPM晶元。(開源硬體?

A: FPGA在開發新硬體功能的原型本來就是行業里一直都在做的事情。一旦特性穩定下來,都會走ASIC的路子。主要是成本的考慮。

4.在FPGA上實現操作系統內核。可以讓微內核概念變得真正可行,因為如果FPGA模塊可以掌控外圍硬體的話,syscall便不需要進行狀態切換。

A: 為啥讓FPGA掌控外圍了,就不用狀態切換了?

5.作為一個監視系統來監視宿主系統的運行狀態。

A: 通信系統或者伺服器設計裡面有這樣的案例。更常見的是用另一顆小CPU來監控。


您提到的第一條好像在processor的high-level synthesis的相關文獻里有做過類似工作,那個synthesis的工具叫做LegUp。只不過這個需要用戶自行用c來寫加速器,不能自動生成。文獻的地址在這裡:

http://dl.acm.org/citation.cfm?id=1950423

這個工具可以實現把C轉化。既然您想要把CPU機器碼轉化,這一類甚至能直接轉化C的工具應該能對您的設想有幫助吧。


FPGA塞進CPU,如果要它還是一塊FPGA,你還是要進行編程。那麼在現在FPGA都有PCI-E介面的情況下,我認為塞進去意義不大。因為你塞進去它還是FPGA,它還是獨立於CPU核心的,它們還是需要匯流排連接的,現在看來,FPGA和CPU之間靠PCI-E速度已經足夠了,以後就不知道了,不過現在這樣分開來也有好處,擴展性好啊。


是在說zynq系列嗎?


簡單來說了,有了,合理,我覺得會發揮大作用。

有幾個概念要明確,你說的集成是什麼意思,CPU和FPGA蝕刻在同一個CPU die的設計我個人不知道(當然我也沒有做這個方面的科研);CPU和FPGA在同一個封裝裡面, @捉木馬的藍胖紙 已經給出了信息。

題主的列舉都是有一定道理的用途,不過我想強調一點:絕大多數的用途都可以直接被做成硬體放在CPU die上而不用麻煩FPGA,如果你有辦法說服CPU製造廠商。比如Amazon來說我要買5億的產品,但是你幫我做個加速器上去,很可能就可以。但是還有其他公司只要300萬的產品,但是也有明確的需求,怎麼辦?這是FPGA發揮用途的時候。我們期待FPGA可以通過更少的成本,為用戶需求硬體實現。這樣對於軟體實現的好處是性能,對於ASIC的好處是成本。然後玩FPGA也不是每家都能玩,這需要專業人士和許可權證書。所以那個300萬的公司很可能要多套50萬請人來做這一整套的事情,而這個活已經從賣產品變化成賣服務——這才是硬體公司的希望之所在。

這些已知用途,做成IP的途徑的根本敵人是通信的延遲。你做個硬體省500ns,但是通訊可能要200ns。所以從硬體廠商來說,誰提供更小的延遲,就更容易獲得成功。

另一個應用是目標程序未知,但是可以CPU可以自己做一個硬體在FPGA上給自己加速,是個很酷的科研課題。在我上學的時候就挺酷的,不知道現在熱不熱門了。我對他的理解是他的難度在於對未知程序的建模 分析和預判。如果能夠選擇好的軟體程序硬化到FPGA上實現最大的回報,是一個很有趣的研究方向。


推薦閱讀:

2017年3月11日的新聞報道「中國芯力量」是否意味著中國很快就能完成5納米刻蝕機的開發工作?
如何評價小米自主研發晶元的行為?
數字、模擬電路晶元的區別及其設計的前端和後端的分工區別?
摩爾定律的理論依據是什麼?
神經晶元技術現狀如何?晶元能多大程度上逆向人類神經元?

TAG:中央處理器CPU | 現場可編輯邏輯門陣列FPGA | 晶元集成電路 | 數字集成電路 | 計算機體系架構 |