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都有可能运用到。