FPGA過去給人的第一應用想法,即是在光罩量產效益不足時的一種代用品,例如一些先期嘗試性的市場、一些特有的技術專案、或者是少量多樣又快速變動的電路設計上。
之後,FPGA也用在新晶片設計的前期驗證上,用FPGA來試行整個新晶片的邏輯功能是否正確,正確之後才進行更後段的量產關連性工程,將電路面積、時序、功耗等進行更佳化的調整。
除了上述兩種常見的應用方式外,近年來FPGA又多了一種新用法,即是高效運算(High Performance Computing,HPC)中的活化性加速,至於如何的實現活化與加速,且讓筆者用實例說明。
首先是Cray Research公司的XD1超級電腦,該電腦是用大量3U高度的獨立伺服器所構建,各伺服器間用Cray獨有的RapidArray介面互連,而每部伺服器上有6顆FPGA晶片附接於RapidArray介面,接著FPGA的電路被組態成應用程式所頻繁叫用的函式(Function)、常式(Routine),使FPGA成為一種「硬體化的副程式」,之後再透過RapidArray讓大量的各機進行智慧且高速的訊息溝通傳遞,如此便可讓應用程式的執行以極大量的平行配分及硬體電路執行,從而獲得極高的的運算加速性。
不僅是Cray,同樣專精於HPC領域的Sgi公司也有相同跟進,Sgi提出的RASC(Reconfigurable Application Specific Computing)技術在原理上與Cray相同,然後改以附掛模組箱的型態來實現,模組箱以Sgi獨有的NUMAlink 4介面與既有的伺服器相連,箱內也有FPGA附接於NUMAlink 4介面上,FPGA也是被規劃成應用程式所常用的演算法,以此來達到加速效果。
Sgi的附掛法比Cray更理想,Cray的加速法須新購XD1超級電腦才能獲得,而Sgi只要在既有Altix系列伺服器上追加便可獲得,不過附掛還不是最省便的,DRC公司提出的協同處理器模組(Coprocessor Module),直接以HyperTransport為介面,只要將模組接於伺服器內空餘的Socket 940(原是用來接AMD Opteron處理器)接座上就可獲得加速,比Sgi的附掛更省便。當然!模組上用的還是FPGA。
很明顯的,FPGA(尤其是高階型款)找到了另一種取向的應用法,然其實在商用運算界也早有類似作法,如Transmeta的CMS或Intel的IA-32EL等,只不過CMS與IA-32EL不是用來加速運算,而是用來相容執行不同指令架構的軟體,屬於即時編譯的功用,且沒有使用專屬的處理器與專屬的可程式化電路,處理器方面直接取用系統主處理器的部分運算資源來實現,可程式化電路則改以系統主記憶體的部分記憶資源來代替。
既然FPGA獲得一塊新應用市場,未來將促使FPGA的用量增加,進而量價均攤,價跌將促使其應用面更廣,倘若此一良性生態推進模式不變,日後高階的商用伺服器也將配屬加速用的FPGA晶片,之後價跌再遍及中階伺服器,逐漸的連初階伺服器、工作站、甚至高階PC都有可能運用到。