可重构计算:不断开辟新天地
简要地说,可重构计算系统(Reconfigurable computing system)是指硬件模块可以重构或重组的信息处理系统。不过"可重构"这个词用得太滥了,现在几乎毫无意义,而可重构性的定义也没有得到公认。因此,讨论可重构性时,最重要的是知道它出现在什么时候:重构出现在设计阶段、部署阶段、执行阶段或者执行过程中。每一个阶段都定义了一类独特的可重构系统。
早在数字计算机出现之前就出现了可重构计算系统。最早,科学与工程计算在可编程模拟计算机上进行:大量的运算放大器、比较器、乘法器和无源元件通过插接板和接插线连接起来。使用者只要把元件连起来,就可以实现这种网络:网络节点的电压遵从一组微分方程。因此,模拟计算机成了一种微分方程解算器,就实现了部署阶段的重构。
后来,模拟计算机开始与继电器相结合,随后又与数字计算机结合,形成了一种混合机器。这种机器能够在执行序列之间自我重构,提供了另一种重构的早期形态。而向真正灵活的可重构性迈出第一步的是在嵌入式数字计算机出现之后。由于系统特性可以由RAM中的软件来定义,一切来得非常简单。如果想改变系统操作,对变化的数据做出响应,只要装入不同的应用程序就行了。
不过,早期对可重构计算的探讨是在基于SRAM的大规模现场可编程门阵列(FPGA)出现后进行的。只要改变这类器件提供的逻辑单元和互连部件--尽管有些难度,就可以创建适合芯片的任何逻辑网表。研究人员马上用这些器件,开始对部署阶段的重构进行试验:构建为特定算法所设计的硬连线数字网络。
硬件可以重用?
对FPGA的重构进行试验后发现了两个优点:降低硬件尺寸或功耗,提高性能。这两个优点往往相伴而生,而不是单独存在。结果同时证明,这些优点来自几项特定技术,其中一种技术很简单:硬件重用。如果通过使用几种不同的非重叠操作模式就有可能对系统进行组织,那么只要把可编程结构配置成一种运行模式;一种应用运行结束,重新配置让其运行于另一种模式,就可以节省硬件重购与浪费。
蜂窝电话就是一个很好的实例。手机首次开启后,它会进入搜索模式,检查范围相当宽的频谱以寻找基站;一旦找到基站,手机进入全然不同的模式,表明其身份及在蜂窝小区的位置;如果手机发送或者接收呼叫,就进入第三种模式。在硬件设计师看来,在每种情况下,硬件所实现的功能大不相同。在传统的片上系统(SoC)设计中,每种模式都有大量的逻辑电路,而在任何时刻,三种逻辑电路中的两种基本上是静止的。如果重用一种可编程结构,每种逻辑电路就能在同一结构上实现,并随模式变化进行切换。
采用这类技术一般可以减少实现系统所需的集成电路数量,但未必会提高性能。实际上,如果改变可编程逻辑配置所需时间太长,或者如果所需功能不是特定的逻辑结构所能轻易实现的,那么会导致速度降低,功耗增加。在许多情况下,重用硬件功能带来的优势不足以弥补FPGA芯片尺寸和功耗变大的损失。
重构带来的另一大优点是结构简化。如果针对特定算法和特定数据集都能优化逻辑,那么尺寸和性能的优势就会非常显著。例如,在音频信号处理领域,较之于用固定逻辑或者在DSP芯片上用软件实现类似功能,用可重构逻辑实现的滤波器阵列的速度要快得多,功耗也低得多。
简单的删改同样可以带来节约。明显的例子就是稀疏矩阵(sparse matrix)的相乘或倒置。如果操作非常关键,首先需要实现并行硬件,那么只要实现必要的数据通道,设法重用最少量的复杂逻辑元件,就可以节省大量硬件。运行时重构让系统有机会省去了对特定数据集来说不必要的通道,增加执行周期数量,同时在数据和约束条件允许的情况下可以重用硬件和中间结果。
经验表明,如果能够对运行中的特定数据集的逻辑结构进行编译,那么就可以大大降低功耗,提高性能。但实现这种系统需要一番深思熟虑、全然不同的系统设计方法,以及大量的运行时控制软件。
市场能否接受?
尽管这些成果大有前途,但市场上绝大多数的可重构硬件却采用了完全不同的设计方法:在交付前或在初始化时配置硬件,以提供不同功能。这往往表现为设计中普遍采用FPGA来处理工程变更请求。考虑到如今设计周期加快,规范越来越复杂和越来越不确切,许多时候很难保证初始设计完全正确。因此,在最后一刻、甚至产品已投入实际部署之后,能够对设计稍加改动具有重要的意义。正因为如此,在一些市场,逻辑的整个关键部分可能用FPGA实现,尽管成本、功耗和速度方面明显有其不足。
最明显的例子就出现在网络泡沫后期,当时网络公司急于在比制造专用集成电路(ASIC)更短的时间内向市场推出新功能,这些公司交付的系统主要采用FPGA来实现,因此,可重构性在理论上缩短了产品的上市时间。
实际效果如何?
实现可重构硬件的方法多种多样,但一般属于以下几类:转移功能,由软件实现;由FPGA实现功能;创建专用于执行阶段可重构性的逻辑结构;把可重构性融入传统的SoC中。
转移功能由软件实现也许是进行重构的最简单明了的方法。它可以大大节省硬件、提供某种程度的运行时优化,并允许工程灵活变更或者进行功能延伸。但对特定功能而言,往往会增加功耗,成为性能最低的实现方案。
不过这对一些应用而言可能是无关紧要的。考虑到这种方法具有的诸多优点,谨慎的设计师会把不受速度要求限制的所有软件功能改由硬件来实现。开发嵌入式CPU内核和DSP内核的方法最近出现了变化,这使得软件实现方法比以前更有效。
这种变化是基于这样一种认识:指令集架构上的小小变化有时会给特定处理器上的应用程序性能带来巨大变化。ARC Cores和Tensilica等拥有CPU知识产权(IP)公司所开发的架构和工具集正是基于这种扩展思想。最近的EEMBC基准测试结果就表明,根据应用程序来调整指令集和数据通道所带来的全面影响。针对电信应用的基准测试内容包括自动校正、卷积、FFT、维特比和其他任务,ARC和Tensilica公司的CPU内核都能够通过处理器优化把性能提高约40倍。
受影响的不仅仅是通用CPU。为蜂窝基站市场开发DSP内核的模拟设备公司强调,尽管DSP内核普遍用于解调输入数据的符号速率处理,但梳状滤波(rake filtering)这类芯片对可编程DSP来说要求过高,因而改用固定硬件来实现。不过,在SHARQ指令集中加入少量的多重MAC指令可以提高这些算法的性能,这样厂商就可以把芯片速率处理引入可编程DSP,向扩展基于软件的功能迈出了一大步,并大大增强了芯片处理速率的灵活性。
如何超越FGPA?
可重构硬件的早期实验势必在商用FPGA上进行。基于SRAM编程的FPGA的基本要求有:大量的逻辑和互连部件、一些存储器以及安装后重构FPGA的能力。但这些器件是基于只在加电时进行编程这一假定下而设计的。事实证明,运行时进行重构速度慢,且麻烦。通常要对芯片进行完全复位及重新编程,既没有准备措施在重新编程过程中锁存数据,也没有办法在配置期间进行热交换。
20世纪90年代中期,Xilinx公司非常关注可重构性,新开发了专门解决这些问题的FPGA系列。这种器件具有可深度配置的存储器、运行时局部重构芯片以及其他众多功能。但所有这些功能都需要以大量的硅开销为代价,而FPGA本来开销就很大,于是该公司断定商机太小,没有现实批量生产。但积极的一面是,许多重要功能仍被用于Xilinx以后的产品中,包括 Virtex-II系列。
希望落空的这些试验让Xilinx的一些工程师嗅到了商机,他们另起炉灶,组建了QuickSilver科技公司,旨在开发运行时可重构的商用FPGA。但遇到FPGA固有的局限问题后,该公司认为"大动手术"还不如推倒重来。于是,该公司开发了全新的可编程逻辑结构,避免了SRAM可编程互连部件开销大的毛病。
折衷之道是否可行?
同时,大学和业界的研究人员考虑对可重构硬件采用折衷方法。他们认为,即使把系统分成多个非重叠模式和共享硬件,许多关键硬件模块还是几乎所有模式所共有的。因为把开销用于可编程逻辑实现这些功能不大值得。反过来,从可重构技术受益最大的功能往往比较少、相对孤立。
于是研究人员得出结论,最好的方法也许是采用传统SoC,使用现代处理器和DSP内核,把功能尽可能转移到软件,然后只在可重构性可发挥最大优势的地方,部署局部的可重构逻辑结构模块。
这种方法使得可重构逻辑结构成为SoC设计工程师工具包当中的另一个硬IP模块。这类模块是纯硬件和处理器内核间的中间体,它们需要支持软件和配置数据才能工作,但在运行时并不实际执行代码。
这可能是对前景所持的最现实的看法。如果这样,这对投资于嵌入式FPGA"类"内核的厂商来说无疑是一个好兆头。这里的"类"很重要,因为研究人员也声称,嵌入式逻辑结构与独立FPGA在要求上有很大不同。