題:
FPGA可以執行多核PC嗎?
Bajie
2014-11-28 15:53:13 UTC
view on stackexchange narkive permalink

我不明白如何使用FPGA加速算法。目前,我正在四核筆記本電腦上運行耗時的實時算法,以便可以並行執行四個計算。

最近我被警告說FPGA可能會產生更好的性能。我不明白那是怎麼回事。有人可以解釋一下FPGA如何加速算法,以及我應該切換到Xilinx或Altera FPGA解決方案還是繼續在我的四核筆記本電腦上執行計算。通過小波包變換

謝謝大家提供的出色答案。

您是否考慮過在台式機(或服務器)CPU上運行算法?這些通常比筆記本電腦的CPU更快。(按常數,但仍要快。)
考慮使用GPU進行神經網絡處理。GPU有許多可以並行乘以浮點數的單元。
@ntoskrnl我假設他擁有i5或更好的cpu(4核),因此台式機或服務器上的性能將與時鐘速度成正比。也許在Xeon上,由於巨大的緩存和更好的內存帶寬,他的性能幾乎無法提高(20%?),但這還不算什麼。
你有什麼CPU?
有趣的問題時機,我們在networkengineering.SE上得到了一個[類似問題](http://networkengineering.stackexchange.com/questions/13298/asics-vs-x86-general-purpose-routing-switching)
五 答案:
pjc50
2014-11-28 16:27:58 UTC
view on stackexchange narkive permalink

我的一位同事對此進行了基準測試,得出的結論是,一旦您完成了大約100多個適合獨立應用程序的 integer 任務,FPGA的性能將超越PC。 FPGA。對於浮點任務,GPGPU始終優於FPGA。對於狹窄的多線程或SIMD操作,CPU進行了非常優化,並以比FPGA通常所能達到的更高的時鐘速度運行。

其他警告:任務必須獨立。如果任務之間存在數據相關性,那麼這將限制計算的關鍵路徑。 FPGA適用於布爾評估和整數數學以及硬件低延遲接口,但不適用於與內存相關的工作負載或浮點運算。

如果您必須將工作負載保存在DRAM中,則可以瓶頸,而不是處理器。

為了確定DRAM是否是極限,您還必須知道FPGA具有許多小型分佈式RAM(例如500個獨立的9kbit RAM塊),它們可以在同一時鐘週期內進行所有讀/寫操作。
Botnic
2014-11-28 16:09:58 UTC
view on stackexchange narkive permalink

FPGA的工作原理與處理器完全不同。

對於處理器,您編寫的軟件會告訴硬件該怎麼做。在FPGA上,您內部描述了“硬件外觀”。就像您正在為算法專門製造芯片一樣。

這可以加速很多事情,並且可以降低功耗。但是它有缺點:開發需要更長的時間並且要復雜得多。您需要以完全不同的方式進行思考,並且不能使用直接用於軟件的算法。

對於人工神經網絡而言,FPGA是一個不錯的選擇。在這個領域有很多正在進行的研究。

實際上,FPGA開發通常使用Verilog或VHDL之類的語言來描述行為而不是實現,這一事實有時很有用,但有時會使異步時序邏輯的設計大大復雜化。如果要指定實現,傳播延遲將在一定程度上保持一致,但是在行為語言中,甚至不能保證它們是“正”的。FPGA設計的關鍵在於,這些語言使許多(可能成百上千個)芯片不同部分同時執行簡單行為變得非常容易。
clabacchio
2014-11-28 16:12:12 UTC
view on stackexchange narkive permalink

這在很大程度上取決於算法,但是原理可以很簡單地解釋。

假設您的算法必須對很多8位數字求和。您的CPU仍將需要提取每個指令,從RAM或高速緩存中獲取操作數,執行總和,將結果存儲在高速緩存中,然後繼續進行下一個操作。管道有所幫助,但是您只能執行與內核一樣多的同時操作。

如果使用FPGA,則可以實現大量並行工作的簡單加法器,可能會累加數千個總和。儘管單個操作可能會花費更多時間,但是您具有很高的並行度。

您還可以使用GPGPU來完成類似的任務,因為它們也是由許多更簡單的內核組成。

GPGPU是使用神經網絡的絕佳輸入!
也有神經網絡ASIC。英特爾曾經製造出一種在80年代實現16種神經元的芯片。
@LiorBilia好,我對他們一無所知:)。我從未使用過神經網絡,而很少使用FPGA
@clabacchio軟件神經網絡是一個程序,大多數程序會對浮點數進行乘法和比較運算。我主要是說... 95%或更多。
傳統的CPU可以很好地將許多8位數字相加。在快速的計算機上,執行時間將由從內存中獲取數據的成本決定(99%的代碼獲取將來自catch)。一個更有趣的示例將處理使用需要位的“異常”排列或排列的方案編碼的數據。例如,如果一條視頻採樣數據返回紅色,綠色和藍色的交錯位,則FPGA可以輕鬆地重新排列這些位;常規的CPU會有更多麻煩。
Agent_L
2014-11-28 22:39:06 UTC
view on stackexchange narkive permalink

計算機設備的專業化大約分為3個級別:

CPU(就像您的筆記本電腦一樣)是所有設備中最通用的。它可以做所有事情,但是這種多功能性是以低速和高功耗為代價的。 CPU可以隨時隨地進行編程,指令來自RAM。用於CPU的程序快速,廉價,易於編寫且易於更改。

FPGA(這意味著現場可編程門陣列)是中間層。顧名思義,它可以在工廠外“現場”編程。 FPGA通常會被編程一次,此過程可描述為設置其內部結構。完成此過程後,它的行為就像是一台專門針對您為其選擇的任務的微型計算機。這就是為什麼它的性能要優於通用CPU的原因。對FPGA進行編程非常困難且昂貴,而對其進行調試則非常困難。

ASIC(意味著專用集成電路)是最終的專家。它是為一項任務和僅一項任務而設計和生產的芯片,它可以非常快速,高效地完成任務。無法對ASIC進行重新編程,它使出廠時得到完全定義,並且在不再需要其工作時無用。設計ASIC是只有大公司才能付得起的東西,調試它們是好事,幾乎是不可能的。能完成所有工作的核心。 ASICS通常具有成千上萬個內核,但只有很小的內核,只能具有一件事。

您可以查看比特幣採礦社區。它們執行SHA256哈希。

  • CPU核心i7:0.8-1.5 M哈希/秒
  • FPGA:5-300M哈希/秒
  • ASIC:每一個微小的芯片12000M哈希/秒,一個160芯片設備的2000000M(是2T)哈希/秒

當然,那些ASIC嬰兒在批量生產時花費近2000美元,但是它為您提供了一個萬事通可以與專家抗衡的想法。

唯一的問題是:FPGA可以為您帶來比設計所需的更多節省嗎?當然,您可以嘗試在20 PCS上運行而不是在一台筆記本電腦上運行。

散列是*非常*的特例;請注意,基於scrypt的硬幣(故意)不能通過專用硬件加速。
&ASIC調試通常在發貨之前進行仿真處理。因此從規格到生產通常需要6個月或更長時間。製造後診斷錯誤是昂貴的,但並非不可能。
儘管很難,但實際上可能非常困難,其中包括邊界掃描,JTAG測試和使用FIB的直接技術等。因此調試它們並非不可能,您只需要知道自己在做什麼即可。。如今,由於大多數設備都是ASIC(包括ARM處理器),所以ASIC現在更多地涉及設計流程(HDL,Synthesis,P&R),而實際上它是指實際設備。
@pjc50是的,這就是我的意思-在特殊情況下,速度差異很大。但是,scrypt asics仍然擁有CPU和GPU。雖然不是百萬分之一(與sha一樣),但仍然超過100。
@placeholder是的,但是即使您發現了該錯誤,對於已經製造的所有這些芯片也用不了多少。我的意思是“調試”,就像“消除錯誤”一樣,而不僅僅是“在這裡”。
Kamil
2014-11-28 22:57:35 UTC
view on stackexchange narkive permalink

是的,FPGA在某些特殊任務上可以勝過現代CPU(例如Intel i7),但是有改善神經網絡性能的更簡便,更便宜的方法。

便宜-我的意思是全力以赴,不是FPGA IC的成本,而是FPGA的非常快的存儲空間(神經網絡需要它)和整個開發過程。

  1. 使用 SSE-我看到了非常簡單的神經網絡實現,其性能提高了2-3倍。如果您的筆記本電腦中沒有專用的GPU,那麼這可能是個好主意。

    Vincent Vanhoucke和Andrew Senior提高了CPU上神經網絡的速度

  2. 使用 GPGPU(圖形處理單元上的通用計算)-我認為您可以在GeForce 730M等中型筆記本電腦GPU上實現100-200倍的性能提升。

    這是神經網絡實現(和免費代碼)。它使用Nvidia CUDA。

    GPGPU方法具有很高的可擴展性,如果在某個時候您意識到需要更多的計算能力-您可以僅使用具有更強大GPU的台式機,甚至可以使用具有4992內核的Nvidia Tesla K80(多數民眾贊成在那)。

  3. ol>
這裡的問題是定義性能。如果我們的意思是更快,那麼是的,fpga可以比普通cpus更快。但是,fpga不如CPU靈活,它們被設計為僅執行預定任務即可有效執行。執行另一項任務將意味著更改其內部接線,從而實際實現另一種fpga


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