可重构计算:高效灵活的计算技术
扫描二维码
随时随地手机看文章
在大众已经习惯的计算模式中,处理器和专用集成电路(ASIC)一直是两大主流。伴随着应用领域特别是嵌入式环境对系统的性能、能耗、上市时间等指标需求的不断提高,传统的计算模式暴露出了种种弊端。可重构计算技术集中了处理器和专用集成电路的优势,能够提供高效灵活的计算能力,自上世纪九十年代以来越来越受到业界的重视。不过,目前对可重构计算技术的研究仍旧处于初期阶段,还有很多难题等待解决。
可重构冲击传统计算模式
面临一个应用,如何去实现它?软件设计者会使用编程语言编写一段代码,将其编译后在处理器上执行;硬件设计者则会利用原理图或者硬件描述语言进行设计,然后以专用集成电路的方式实现。处理器和专用集成电路已经成为了传统计算模式的两大主流,我们也已经习惯了这两种计算模式。但在和这两位“老朋友”打交道的时候,仍旧会时不时感觉到有很多不尽如人意的地方。
处理器(包括通用处理器和各种专用的嵌入式处理器)计算模式的特点在于它们都具有各自的指令集,通过执行指令集中的相关指令来完成计算,改写软件指令就能改变系统实现的功能,而不用去改动底层的硬件环境。但处理器的运算速度要比ASIC慢很多,这主要是因为处理器必须从存储器中读取每条指令,将其译码后再执行,因而每个独立的操作具有更高的执行开销。另外,处理器的指令集是由处理器自身体系结构决定的,没有用专门指令实现的操作只能使用已有的指令组合来处理,这也增加了执行的开销。
专用集成电路是针对某一特定应用专门设计的硬件电路。专用集成电路计算模式的特点在于用硬件来实现应用的操作。因为针对特定应用设计,所以在执行相应应用时具有很高的速度、效率和精度。但其缺陷在于开发周期太长,代价太高。而且硬件电路一旦制作好以后是不能够被随意改动的。这就意味着如果功能的需求发生了变化,就需要重新设计和重新加工新的专用集成电路芯片。哪怕只是芯片上的很小一部分线路需要修改,也要重新制作整个芯片。如果针对各种不同的应用都专门设计专用的电路芯片,就会带来高昂的成本。
由此可见,现有的主流计算模式中存在的主要问题是:处理器方式能够灵活地实现各种应用,但却在性能上有缺陷;而硬件逻辑实现性能虽然高,但灵活性却很差。为了在计算性能和实现灵活性上做一个很好的权衡,可重构计算(Reconfigurable Computing)技术浮出了水面。
技术发展现状
可重构计算的概念早在上个世纪六七十年代就有学者以不同的表述方式提出过。由于技术条件的限制,直到九十年代中期才逐渐兴起。目前比较权威的定义是“设立物理控制点定制硬件该如何工作,通过改动这些控制点使用户能够使用相同的硬件执行不同的应用”。当前已经有多个基于可重构计算技术的原型系统被开发出来,运用在自动目标识别、串匹配、数据压缩等应用领域,取得了非常好的效果。最近几年,可重构计算技术已经迈过了探索阶段,研究者们开始更深入地对可重构计算通用模型进行研究,为后续的可重构计算系统的广泛应用打好基础。
当前在研的可重构计算系统往往由一个或多个可重构逻辑器件以协处理器的方式和一个通用处理器耦合而成,如图2所示。这里的可重构逻辑器件可以是系统定制的,也可以是商业化的部件(如FPGA芯片)。对可重构逻辑器件进行的配置可以使它实现相应的功能,能够以准ASIC的计算速度对应用中的计算密集部分给予加速执行以提高整个应用的执行性能。系统中的通用处理器主要负责对可重构逻辑器件进行资源管理和任务调度。另外,应用中存在的那些不能够采用硬件逻辑实现或者采用硬件实现也不会带来很大性能收益的部分也需要在通用处理器上编程实现,例如递归操作。因为每一层递归都需要使用相同的资源,而递归的层数又往往不能预先知道,硬件无法预留够充足的资源,所以此类操作适合在通用处理器上实现。
可重构计算技术的研究对可重构逻辑器件的开发有着极强的依赖性。正是由于可重构计算系统中使用了可编程逻辑器件,才使得它能够高效灵活地实现多种应用。在研究的早期,研究者们受到可重构逻辑器件的限制,并不能开展很多卓有成效的工作。因为缺乏统一的可重构硬件平台,一些研究机构针对某些特定应用开发了自己相应的可重构逻辑器件。这些器件缺乏一致的模型,彼此间不兼容,不具有普适性。而专门的可重构逻辑器件开发带来的高昂代价也给可重构计算技术的普及设置了巨大的障碍。伴随着超大规模集成电路技术的不断进步,集成在芯片上的门电路数目可以做到“数以百万计”,这使得业界能够设计出功能强大结构复杂的可重构逻辑器件,也昭示着可重构计算技术迎来了发展的大好时机。当前的很多商业化可重构逻辑器件具备有充足的可编程逻辑资源,有的芯片上还集成了乘法器、RAM等结构,在最近的高端产品上更是集成了处理器核来增强系统的功能和性能。
当前,可重构计算技术的研究焦点在于动态可重构技术特别是运行时(run-time)可重构技术。所谓动态可重构技术,是相对于静态可重构技术而言的。静态可重构技术是指在可重构计算系统开始执行任务时,一次性将可重构逻辑器件配置为系统所需的某个或几个功能。这些配置好的功能在整个任务执行期间不会被改变。直到系统完成该任务后,可重构逻辑器件才可以被配置为其他的功能去完成别的任务。动态可重构技术与此相反,在任务执行过程中可重构逻辑器件的功能可以被随时改变。
运行时可重构技术建立在动态可重构技术的基础之上,它能够在器件上已有任务正常执行的同时对器件的空闲资源进行新的配置。运行时可重构技术可以根据应用实现中的实际需求,对可重构逻辑器件上的资源做相应的调配。它能够更充分地利用可重构逻辑器件上的资源,并且使硬件去“适应”应用的需求做调整成为可能。运行时可重构计算技术的研究还存在很多技术难点,有的已经造成了当前可重构计算技术发展的瓶颈。
技术优势和应用前景
可重构计算技术除了具有较高的性能和较大的灵活性以外,还具有很多其他优势,例如系统能耗低、可靠性高等等。这些优势使得可重构计算技术在各个应用领域特别是嵌入式应用领域有着广阔的应用前景。
在过去的研究中已经发现,很多嵌入式应用,例如多媒体应用、加/解密应用以及通信应用等都具有它们固有的执行特征。
多媒体应用具有较多的整数算术指令,这主要是因为大多数多媒体应用中执行的都是定点数据上的算术密集型信号处理操作。
加/解密应用中主要是位运算操作,而且在执行过程中极少出现分支指令,位运算操作可以通过移位操作和逻辑运算来实现。
通信应用的特征是使用大量的分支指令,这主要是由通信应用中复杂的控制流导致的,但其中较少使用到算术和移位等操作。
可以看到,这几类应用都是属于计算密集型应用,可以利用硬件加速计算核心的执行来提高整个应用的性能。应用中较少使用到浮点算术操作,这一点也正好适合利用硬件实现。在多媒体和通信应用中,大量的操作都是针对宽度为一个或多个字节的数据进行的,而在加/解密应用中主要处理的是宽度为1的位数据。针对应用中的这些差异,当前的商业化可重构逻辑器件中提供了大量的不同粒度的资源来支持不同数据宽度的计算。因此,上述在嵌入式领域中的主流应用都非常适合利用可重构计算技术实现。
可重构计算技术具有很好的低能耗特征。在传统的处理器计算模式中,大量的能耗耗费在指令的取指、译码过程中;IC模式则因为在硬件电路的设计过程中针对特定应用进行充分优化,具有较低的能耗损失。在可重构计算系统中,能耗最高的计算核心部分转移到了可重构逻辑器件上执行,减轻了通用处理器的负担,减少了相关的能耗。当应用在可重构逻辑器件上执行时,可重构逻辑器件还可以利用自己的器件特性做调整来达到减少系统能耗的目的。例如,在现有的商业化可重构逻辑器件中,芯片上同时存在着多个时钟域,不同的时钟域可以具有各自的时钟频率。可重构逻辑器件能够为芯片上用于执行应用的那部分资源提供高的时钟频率以提高性能,同时可以将其他闲置部分的时钟频率降低以降低能耗,甚至有的器件可以利用门控时钟对芯片上没有在执行计算任务的部分给予断电处理,进一步降低整个系统的能耗损失。
可重构计算技术还具有天生的容错(fault-tolerant)特性。因为可重构逻辑器件的可重构特性为错误的检测、诊断提供了方便。同时,可重构逻辑器件拥有大量的可重构逻辑资源,又为错误的掩盖、修复提供了基础。当可重构逻辑器件上出现错误,导致系统故障的时候,可以将可重构逻辑器件上的一部分配置为测试模式发生器,对器件上的某些区域做测试,同时还可以利用器件上的其他资源对测试结果进行分析,以得到具体的错误信息。一旦将错误定位后,可以采用对可重构逻辑器件重新配置的方法,避开产生错误的芯片区域,利用其周边的其他可重构逻辑资源组合替代原本在出错区域上实现的功能。可重构计算系统的高容错性和极强的可靠性满足了恶劣的工作环境对计算系统的苛刻要求,因此当前在航空航天军事等领域对可重构计算系统的需求逐渐增大,例如NASA就已经将运行时可重构计算系统的研发和应用列入了2005年的火星探测计划当中。
可重构计算技术大大缩短了产品上市时间。可重构逻辑器件在很长一段时间里主要用于进行硬件系统的原型设计。这一点在当前新的应用需求下有了进一步发展。利用可重构计算技术的原型系统在经过针对不同应用的不同配置后就成为了相应的产品可以直接投放市场,这消除了需要针对各个应用进行单独设计带来的时间开销,同时减少了设计中出现错误的概率,系统的可靠性也得到了提高。另外,当前的很多应用领域瞬息万变,各种新标准新应用层出不穷。在这种情况下,可重构计算系统能够“以不变应万变”,仍旧利用现有资源,根据实际情况及时调整系统功能以满足市场需求。
在一些关键任务执行中,很多任务要到开始前一刻才能最终确定,可重构计算系统的存在无疑为这类应用也提供了有力的支持。仍旧以NASA为例,他们在航天飞机发射前的几个小时内,才会把当前的一些重要信息配置到机上的可重构逻辑器件中。在火星车的设计中,也在大量关键部件上使用了可重构逻辑器件,以满足系统可能的变动要求。
可重构计算技术还有很多优势。例如,相对于传统的一个平台支持一个应用的做法,可重构计算系统中的同一套硬件设备可以支持多个应用,大大减轻了系统重量,这对于那些对重量有着严格要求的应用领域非常有利。比如,嵌入式领域的“穿戴计算”,还有航天领域里的卫星系统等等。
当前的可重构计算技术主要还是用于尖端技术领域中的计算平台,但随着可重构逻辑器件成本逐渐降低,运行时可重构计算技术不断完善,我们有理由相信可重构计算技术具备的种种优势会使其在更多的领域里大有作为。
面临的关键难题
前文已经提到,可重构计算技术的研究焦点是运行时可重构技术。对运行时可重构技术的研究和应用主要是为了解决在下述两种情况下可重构计算系统中存在的问题。
第一种情况是为了减少应用执行的启动时间。可重构计算系统可以先在器件上配置好应用执行的启动所必需的功能,让应用运行起来。在应用开始执行的同时再在器件的其他部分上配置出后续执行所需要的功能,而不必等待整个应用都配置完成后才开始运行,如图3所示。
第二种情况是利用有限的资源处理大规模应用。如果某个规模较大的应用在实现时所需的可重构逻辑资源超过了可重构逻辑器件可以供给的最大资源量,这时可重构计算系统会将大的应用划分为多个在执行时具有先后次序的子部分。在应用执行过程中,某个先执行的子部分完成工作后,可以在其占据的器件资源上按次序配置后续的应用子部分,以此来保证应用的正确实现,如图4所示。
运行时可重构技术研究的深入和成熟还能够促进其他相关领域的计算技术得到长足进展,例如进化硬件和系统容错技术等。但在当前,运行时可重构技术还面临着一些关键问题亟待解决:
可重构逻辑器件的支持。可重构计算技术的发展对可重构逻辑器件有着很强的依赖性。当前的器件功能和性能都有了很大提升,已经能够对运行时可重构技术提供相关支持。例如,运行时可重构计算技术需要能够在不影响任务正常执行的情况下,对器件的空闲资源进行配置。相应的,当前的商业可重构逻辑器件能够提供部分重构(partial-reconfiguration)的能力。但是现在存在的最大问题在于器件配置过程耗费的时间比较长。随着芯片上的可重构逻辑资源数量越来越多,相应的配置文件规模也越来越大,配置过程需要毫秒量级的时间,但是可重构逻辑器件上的应用是以微/纳秒量级的时间在执行,因此配置过程成为了整个系统的瓶颈。经常会发生应用执行到一半,但后续功能还没有配置好的情况。这时候应用的执行可能会使用到错误的配置,因此它必须等待,这极大地降低了系统性能。还有一种可重构逻辑器件能够为运行时可重构技术提供支持,它被称做多上下文(multi-context)器件。这种器件的特点在于,它将器件的多个配置文件存储在芯片上,当需要发生功能切换时,能够在单周期内完成器件的配置。但是这种器件技术目前尚未成熟。
软/硬件任务的划分。在可重构计算系统中,存在着可重构逻辑器件和通用处理器两大部分。如何使一个应用高效运行在可重构计算系统上,首先就需要对应用进行任务划分,将软/硬件任务分别映射到通用处理器和可重构逻辑器件上执行。在任务的划分中,要充分考虑到任务执行的特征,把那些负担繁重并且性能要求高的计算任务划分为硬件任务,同时把那些不适合用硬件加速执行的任务和对硬件资源进行管理的任务划分为软件任务。软/硬件任务间的通信是一个需要重点思考的问题。当前的很多可重构计算系统采用的都是软/硬件任务非并行执行的方式。当软件任务执行到某个点的时候,会将应用执行的控制权交给可重构逻辑器件,然后软件任务会一直等待可重构逻辑器件将计算结果和控制权返回给通用处理器再继续执行。这无疑降低了系统的性能。更先进的做法是软件任务可以和硬件任务并行执行,两者间以中断或者其他方式互相通告状态和传递数据。但是这么做会引入数据一致性、任务间同步等问题,加大了系统管理的难度。软/硬件任务的划分一直以来都是在嵌入式系统研究中的难点,它的好坏直接影响到了应用的执行性能,但至今还是缺乏成熟的算法支持。
任务调度的支持。任务调度是传统操作系统中的关键技术。在运行时可重构计算系统中,调度算法的好坏也直接影响到系统性能的高低。特别是针对大规模应用中的硬件任务不能够一次性地配置到器件上的情况,任务调度显得尤其重要。任务调度主要有两个目的:一个是优化器件的配置序列,另一个是充分利用器件上的资源。任务调度器应该尽可能地将要同时执行或者先后执行次序比较紧密的任务一次性地调度到器件上,同时在将任务调出器件的时候也要考虑到任务是否会在后续执行中又被使用到。调度器对配置序列进行优化,能够减少配置过程带来的时间开销,减轻配置时间太长给系统带来的瓶颈影响。器件上的资源是非常宝贵的,在任务繁重的时候应该保证有尽可能多的资源加入到计算当中。而且在对器件进行部分配置的时候,也要重点考虑将那些当前空闲的资源配置为新的功能,以减少后面可能会导致的“抖动”(器件上的现有功能被新的配置覆盖后,应用执行过程又需要该功能时只能再次将该功能重新配置到器件上)。另外,如果应用对于能耗要求较高,任务调度还需要注意到器件上各个时钟域里的资源利用情况,可以将功能集中实现在某一区域以达到降低能耗的目的。在后续的运行时可重构技术的研究探索中,还有可能涉及到软/硬件任务迁移(migration)的情况,这就对调度器提出了更高的要求。
未来方向
上述是当前的运行时可重构计算技术研究中需要解决的几个关键问题,国内外已经有很多的机构都在潜心研究,希望能有所突破。虽然目前可重构计算技术已经有了很大的发展,但是为了能够将它应用到更广阔的空间,还需要做更多的工作。
并行的可重构计算系统架构。虽然可重构计算系统有着较高性能和极强的灵活性,但在很多应用场合中,还是会碰到一些问题。首先还是器件问题。相对于通用处理器,当前的主流可重构逻辑器件的频率仍旧较低,这就对进一步加快应用执行性能产生了阻碍。其次,可重构计算系统不能很好地处理大型应用。因为系统处理能力和资源数量的约束,可重构计算系统对于大型应用的实现还存在着很多问题。最后是应用领域的独特需求。目前在很多可重构计算系统适用的应用领域中,如穿戴计算、汽车电子等,系统分布化已经成为了趋势,可重构计算系统务必要能够满足应用需求。基于以上几点,开发并行的可重构计算系统架构已经成为今后必然的趋势。并行的可重构计算系统中包含有多个可重构计算系统,它们彼此间以可重构的网络相连接。并行可重构计算系统中存在着三个层次上的并行:第一是单个系统中可重构逻辑器件上的多个硬件任务间的并行;第二是单个系统中通用处理器上的软件任务和可重构逻辑器件上的硬件任务间的并行;第三是各个系统间软/硬件任务的并行。并行可重构计算系统中还存在着两个层次上的重构:一个是单个系统内部的器件重构,另一个是各个系统间的互连重构。并行可重构计算系统的结构要比传统的分布式并行系统复杂很多,给系统管理和应用带来了很多新的难题。
统一的应用开发模型。当前可重构计算系统没有被广泛应用,还有一个很重要的因素就是现在的可重构计算系统并没有提供给应用开发者统一的应用开发模型。因为可重构计算系统中有软件任务和硬件任务的区分,而在应用开发者中占绝大多数的软件程序员们缺乏对硬件平台的理解和编写硬件任务的能力。同时,软件程序员和硬件设计者之间的沟通又往往不够充分。这些都导致了应用开发者利用可重构计算技术时的困难重重。又因为目前可以构成可重构计算系统的硬件资源门类繁多,在一个系统上开发的应用缺乏良好的移植性,所以没有一个很好的方法能够帮助开发者们快速高效地开发应用。基于以上两点,现在需要做的是将可重构计算系统的底层实现对应用开发者透明化,通过提供给应用开发者们统一的应用开发模型,使他们能够按照惯常的开发流程进行可重构计算系统上的应用开发。他们编写的代码具有一定的可移植性,经过可重构系统集成开发环境处理后,可以直接在相应的可重构计算系统上运行。这个“统一化”的过程是复杂和困难的,但是如果希望可重构计算技术能够深入人心,让广大应用开发者认可并使用可重构计算技术,那么这个过程就是必需的。
可重构计算技术是一项新兴的能够有效提高系统计算能力的技术。它的诞生是为了满足人们对计算性能永无穷尽的需求,在很多领域都有着广阔的应用前景。目前,可重构计算技术的研究尚处于初级阶段,还有很多技术难题没有得到圆满解决。但是在可以预见的将来,伴随着可重构逻辑器件技术的不断进步,可重构计算技术一定能够在更多的场合被应用,发挥出更多的效用。