題:
FPGA如何勝過CPU?
David Gardner
2014-03-02 08:45:13 UTC
view on stackexchange narkive permalink

我聽說有人使用FPGA來改善諸如比特幣開採,電子交易和蛋白質折疊之類的系統的性能。

當CPU運行速度通常至少快一個數量級(就時鐘速度而言)時,FPGA如何與CPU競爭?

FPGA一次完成所有操作。
五 答案:
markt
2014-03-02 08:55:36 UTC
view on stackexchange narkive permalink

CPU是順序處理設備。它們將一種算法分解為一系列操作,並一次執行一個。

FPGA是(或可以配置為)並行處理設備。整個算法可能在單個時鐘滴答中執行,或者在最壞的情況下,其時鐘滴答要比順序處理器少。邏輯複雜度增加的代價之一通常是設備時鐘的下限。

考慮到以上幾點,FPGA可以勝任CPU的某些任務,因為它們可以執行相同的任務。更少的時鐘滴答聲,儘管總體時鐘速率較低。可以實現的增益在很大程度上取決於算法,但是對於FFT之類的而言,至少不是一個數量級是非典型的。

此外,因為您可以在FPGA中構建多個並行執行單元,如果您要通過相同的算法傳遞大量數據,則可以跨並行執行單元分配數據,並獲得比甚至多核CPU更高的吞吐量。 p>

您為此付出的代價是功耗和$$$。

+1;但是,FPGA不如CPU動態,這就是為什麼CPU通常更適合PC的原因
“為優勢而付出的代價是功耗和$$$。” -這通常是正確的,但是在許多算法上,您都可以用低端的$ 50 Xilinx Spartan-6擊敗高端的$ 1000的Intel Xeon機器。但這通常需要花費大量的工程時間,並且您最終可能會獲得非常定制的設計,該設計僅適用於一個應用程序並且很難更改。因此,權衡不僅是功率和金錢,還在於算法開發時間,可重用性和靈活性。 (儘管您可以爭論時間==金錢。)
市場,關於您的最後一句話,FPGA的功耗不比CPU低很多嗎? CPU和FPGA都有廣泛的設備,但是如果我們看一下用於比特幣挖掘等設備的設備,那麼用於這些任務的CPU所消耗的電能是否比FPGA所消耗的電能要多得多。用過的?
@David:在談論比特幣開採時,相關的度量標準是每瓦特的散列數。 Markt在談論總體功耗。也就是說,給定的FPGA功耗可能是典型CPU的3倍,但比特幣挖掘的速度要快3倍以上。因此對於比特幣而言,這是一個勝利。
@Billy:每瓦·秒而不是每瓦的哈希數。
AilizdqiztCMTŭloEbermann:是的。
而是,每焦耳的哈希數,這是如何計費的...
是的,如果您的比特幣採礦設備配備了地熱發電廠並且受北極氣候冷卻。否則,我們傾向於以法定貨幣計費。
-1
Kit Scuzz
2014-03-02 13:11:09 UTC
view on stackexchange narkive permalink

Markt基本上是正確的,但是我在這裡投入2美分:

想像一下,我告訴你我想寫一個程序來反轉a內的位順序。 32位整數。像這樣:

  int reverseBits(int input){output = 0; for(int i = 0; i < 32; i ++){//檢查是否設置了最低位if(input & 1!= 0){輸出=輸出| 1; //將最低位設置為與輸出匹配! }輸入=輸入>> 1;輸出=輸出<< 1; }返回輸出;}  

現在,我的實現並不優雅,但是我敢肯定,您同意這樣做會涉及到一些操作,並且可能還會存在某種循環。這意味著在CPU中,您花費了不止一個週期來實現此操作。

在FPGA中,您可以將其簡單地連接為一對鎖存器。您將數據放入某個寄存器,然後以相反的位順序將其連接到另一個寄存器中。這意味著該操作將在FPGA中的單個時鐘週期內完成。因此,FPGS在一個週期內完成了一項操作,該操作使您的通用CPU花費了數千個週期才能完成!此外,您可以並行連接這些寄存器中的幾百個。因此,如果您可以將數百個數移入FPGA,那麼在一個週期內,它將在數百個FPGA時鐘週期內完成數百次數千次操作。

通用CPU可以做很多事情,但是作為限制,我們設置了通用和簡單指令,這些指令必須擴展為簡單指令列表才能完成某些任務。因此,我可以使通用CPU擁有“ 32位寄存器的反向位順序”之類的指令,並賦予CPU與我們剛剛構建的FPGA相同的功能,但是卻有無限數量的此類有用指令,因此我們FPGA,CPLD和ASIC都使您可以訪問原始硬件,這使您可以定義瘋狂的操作,例如“使用解密AES256加密字節”。鍵”或“解碼h.264視頻的幀”。它們在FPGA中具有超過一個時鐘週期的等待時間,但是與以數百萬行的通用彙編代碼寫出操作相比,它們可以以更加高效的方式實現。這還具有使許多此類操作的固定用途FPGA / ASIC更加節能的優勢,因為它們不必做過多的工作!

並行性是另一個重要的部分指出,儘管這也很重要,但是最主要的是,FPGA並行化執行操作所需的周期時,CPU中已經很昂貴的內容。一旦您開始說“我可以在10個FPGA週期中執行一個任務,這需要花費我的CPU 100,000個週期,並且我一次可以並行執行4個任務,”您就可以很容易地理解為什麼FPGA可能會佔用大量資源比CPU快!

那麼,為什麼我們不使用FPGA,CPLD和ASIC?因為通常它是一個完整的芯片,只執行一個操作就不做任何事情。這意味著,儘管您可以使一個過程在FPGA / ASIC中更快地運行多個數量級,但是當該操作不再有用時,您將無法在以後對其進行更改。一旦插入電路中就不能(通常)更改FPGA的原因是接口的佈線是固定的,並且通常電路中不包含允許您重新對FPGA進行更有用配置的組件。有一些研究人員試圖構建混合的FPGA-CPU模塊,其中一部分CPU像FPGA一樣可以進行重新連接/重新編程,從而允許您“裝載” CPU的有效部分,但是這些都不是據我所知曾經將它推向市場。

對於反轉位(以及所有其他位交換/選擇任務)的示例,它實際上並不需要1個時鐘週期,而是0。在您的示例中,將數據“存儲在鎖存器中”需要1個時鐘週期。不一樣的操作。無論是否反轉這些位,都需要1個時鐘週期。反轉位的操作為0個時鐘週期;沒有開銷,只是路由不同。不同之處不僅在於語義,特別是當您開始添加內容時。例如,將一個32位字向下移動3位,然後每隔一個半字節交換一次,然後反轉它需要多長時間?
“混合FPGA-CPU模塊”-這些已經在市場上存在了很長時間(請參見http://www.xilinx.com/products/silicon-devices/soc/zynq-7000/index.htm一個),但即使沒有特殊支持,通常也可以通過在結構上的FPGA內部實現軟CPU來完成軟件與HDL的結合。
-1
@wjl:大衛·加德納(David-gardner)提出問題的方式,他似乎是在說“ CPU”等同於Intel或AMD x86 / x86_64高時鐘,流水線和優化的CPU。有許多軟“ CPU”,但我設計的FPGA中沒有一個能像i7一樣被時鐘控制,它們也幾乎沒有優化或能力。對於混合動力車,我的意思更多是這樣的:http://newsroom.intel.com/docs/DOC-1512顯然確實存在
Zynq確實不是太糟糕的處理器(ARM Cortex-A9 –運行平板電腦等的東西),但是我同意擁有一個具有高速x86_64的集成FPGA會更加出色。 =)
@wjl-我認為稱其為“ 0個週期” ***在現實世界中是不正確的。顯然,在***“ 0週期” ***中,重複執行將1000個32位整數(甚至很小的整數)的位反轉的操作是不可能的。
@KevinFegan-週期只是時間的量化單位。因此,是的,在現實世界中,“ 0個週期”恰恰是正確的稱呼。同樣,在FPGA或ASIC中,如果FPGA有足夠的空間並行執行全部操作,則反轉1000個32位整數將花費0個時鐘週期。需要時間的是*存儲*,而不是重新路由位,而只是佔用空間。
David Gardner
2015-06-21 00:37:02 UTC
view on stackexchange narkive permalink

這裡給出的所有其他流行答案都討論了FPGA和CPU之間的字面差異。他們指出了FPGA的並行特性與CPU的順序特性,或給出了為什麼某些算法在FPGA上可以很好地工作的示例。所有這些都是正確的,但是我建議CPU和FPGA之間存在更根本的區別。

FPGA和CPU之間的共同點是什麼?它們都建立在矽片上。在某些情況下,實際上是相同的矽工藝。

根本的區別是我們堆積在矽片上的抽象。從矽到封裝IC,一個人不可能理解一個現代CPU設計的全部細節。因此,作為工程過程的一部分,我們將復雜的問題分為較小的可管理的問題,人類可以將其包裹住。

請考慮將該矽片轉變為可正常運行的CPU所需的條件。下面是實現該目標所需的抽象層的簡化視圖:

  1. 首先,我們有工程師知道如何用矽製造晶體管。他們知道如何設計功率為10兆赫茲或什至100吉赫茲的微型晶體管,它們可以汲取功率並進行開關,並且他們知道如何設計強大的晶體管,這些晶體管可以以足夠的功率驅動信號,以將其發送出IC封裝並通過PCB

  2. 然後,我們有數字邏輯設計人員,他們知道如何將這些晶體管放到具有數百個不同邏輯單元的庫中。邏輯門,觸發器,多路復用器和加法器僅舉幾例。全部具有多種配置。

  3. 接下來,我們會有各種工程師組成的小組,他們知道如何將這些數字(有時是模擬)塊放在一起,以形成更高級別的功能塊,例如高速收發器,存儲控制器,分支預測變量,ALU等。

  4. 然後,我們有CPU設計人員通過將這些功能單元整合到一個完整的系統中來架構高端CPU設計。

  5. ol>

    而且還不止於此。此時,我們有一個運行中的CPU,它可以運行彙編代碼,但這不是大多數程序員如今使用的語言。

    1. 我們可能有一個C編譯器可以將其編譯為彙編語言代碼(可能通過某種中間表示)
    2. 我們可以在C之上添加另一個抽像以獲取一種面向對象的語言
    3. 我們甚至可以在C或C ++之上編寫虛擬機這樣我們就可以解釋諸如Java字節碼之類的東西
    4. ol>

      ,並且抽象層可以從那裡繼續。這裡重要的一點是,這些抽象層相結合,產生了一個基於CPU的系統,該系統可以大規模擴展,並且只佔定制矽設計的一小部分。

      但是,這裡要指出的重要一點是,每個抽象本身也要承擔成本。晶體管設計人員並沒有為每個用例構建完美的晶體管。他建立了一個合理的庫,因此有時使用的晶體管比實際完成工作所需的功率或矽要多一些。同樣,邏輯設計人員不會構建所有可能的邏輯單元。他們可能會構建4輸入NAND門和8輸入NAND門,但是當另一位工程師需要6輸入NAND時會發生什麼呢?他使用一個8輸入NAND門,並束縛了2個未使用的輸入,這導致了矽資源的浪費和電力不足。因此,它沿著抽象鏈上升。每層都為我們提供了一種處理複雜性的方法,但同時又向我們收取了矽和功耗方面的額外增量成本。

      現在將這些抽象與FPGA所需的抽象進行比較。本質上,FPGA抽像在以上列表中的#2處停止。 FPGA使開發人員可以在數字邏輯層工作。比這要復雜得多,因為在這一層上對CPU進行了“硬編碼”,並且必須在運行時配置FPGA(順便說一句,這就是為什麼CPU通常以更高的頻率運行),但是最重要的重要事實是,事實遠非如此FPGA的抽像要比CPU少。 ,這意味著設計人員離矽片更近了。他沒有支付CPU所需的所有許多抽象層的費用。他的編碼水平較低,必須付出更多的努力才能實現給定的功能,但是他可以獲得更高的性能。 。所有這些CPU抽像都有充分的理由。它們為我們提供了更為簡單的編碼範例,這意味著更多的人可以輕鬆地為他們開發。反過來,這意味著存在更多的CPU設計,因此,我們從CPU中獲得了巨大的價格/規模/上市時間收益。

      因此,您擁有了它。 FPGA具有更少的抽象,因此它們可以更快,更節能,但難以編程。 CPU具有許多抽象設計,以使其易於開發,可擴展且廉價。但是他們為獲得這些利益放棄了交易的速度和力量。

同樣,FPGA是使用簡單的重複塊設計的,這些重複的塊可以執行簡單的邏輯任務。它們是為某些類型的任務量身定制的。CPU(OTOH)具有許多複雜的功能部件,它們各自執行不同的操作。可以認為一個CPU是一組由許多類似FPGA的設備組成的設備(畢竟,它們全都是矽,電子和數學運算)。因此,這與抽象無關,而與復雜性有關。CPU是由許多不同類型的電氣設備組成的複雜設備,而FPGA由少數幾種電氣設備組成。CPU是a彈槍,而FPGA是步槍。
pyramids
2014-03-02 20:16:24 UTC
view on stackexchange narkive permalink

儘管其他答案都是正確的,但它們都還沒有解決您所提問題中的比特幣挖掘示例,這確實是一個不錯的示例。比特幣挖礦涉及重複計算密碼散列函數(即另一SHA-256計算結果的SHA-256),其中只有單個32位整數發生變化,直到生成的散列具有某些屬性為止。每個SHA-256由相同算法的64次重複組成,涉及32位加法,移位和更多位處理操作。

如果在32位(或更多)CPU上編程此循環,您會發現它的指令集非常適合該任務-SHA-256旨在在CPU上高效運行。仍然,您將僅使用現代CPU矽面積的2%,具有諸如緩存,乘法,除法,浮點運算,分支和分支預測等面積密集型功能,這些功能根本沒有使用或無法提供顯著的功能。

在像FPGA這樣的可配置硬件中,您只需實現這2%,然後通過忘記所有有關代碼執行的方式來進一步優化,而是設計門以直接計算其中的每一個重複的子功能。經過流水線處理,以便每個時鐘週期將結果傳遞到下一個時鐘週期,並重複128次(以及每個SHA-256開始和結束的一些特殊附加邏輯),最終每個時鐘週期都會得到結果(可能在標榜為比其簡單的邏輯上支持300 MHz的FPGA上,每秒可散發1億個哈希),而在現代CPU上,每核每千個時鐘週期可得到一個結果,例如,在多核多核-GHz CPU。

如果您對這個特定示例感興趣,您可能想看看我有關bitcoin.stackexchange上ASIC礦工內部的相關答案,因為許多FPGA礦工都在同一工作使用可配置而非定制硬件的方式。僅出於完整性考慮:還有其他可能性,例如限製或避免流水線,我通過使用多個獨立的SHA-256哈希來支持更為瑣碎的並行化。依靠FPGA內部及其總尺寸的限制,即使您在設計整個芯片(而不只是FPGA的配置)方面擁有完全的自由度時,門數和佈線開銷的效率也會降低,甚至可以提供更好的性能。

關於矽的利用,這是一個很好的觀點。
但是,考慮到FPGA由具有許多物理門的有些複雜的單元組成,一個典型的應用程序又只使用了一個小部分,這可能導致(無意!)誤導,因此它們的製造商可以公佈等效的門數以試圖告訴您所有的門數。在一個“典型”的應用程序中,這可能是值得的...
0xc000005
2015-04-04 16:07:43 UTC
view on stackexchange narkive permalink

上面的答案雖然正確,但是卻忽略了為什麼FPGA(和定制ASIC)特別適合比特幣計算的觀點。

真正的優勢在於,SHA-256計算的很大一部分是可以在接線中完成的邏輯運算(例如,移位)。這樣,它們需要0個時鐘週期。

另一個重要的優點是,FPGA的功耗效率(即,每瓦MIPS)比CPU要高得多,因此計算所需的能量要大得多。減。這一點很重要,因為挖掘比特幣的成本取決於您用來製造比特幣的電量。您還可以在板上添加更多執行單元,以使其更快。缺點是製造定制ASIC的成本很高,因此您需要出售相當多的芯片來支付製造成本。

GPU也用於製造比特幣,但由於它們是能源效率低得多,它們已經在FPGA和定制ASIC方面失去了基礎。

如果您看一下Monero哈希算法又名cryptonight,您會發現FPGA的實現幾乎是不可能的,因為需要隨機訪問大量內存(2MB)。在這種情況下,CPU具有優勢。
@lucas92能否將RAM集成到FPGA中以容納所需的內存量?
FPGA中可能沒有足夠的邏輯元素。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...