多核设计将在消费电子领域大行其道
扫描二维码
随时随地手机看文章
Patrick Madden在“多核处理器前途未卜(Multi-core processors face uncertain future)”一文中关于多核芯片的讨论焦点集中于单个的通用处理器架构上,实际上这种观点对使用多处理器来解决系统架构问题作出了不必要的限制。正如 Madden所言,大型半导体和服务器处理器供应商可以提供多核的对称多处理器,每个对称多处理器都可以运行并行的多线程软件程序。这些多核处理器常在运行基于SAMD(single application multiple data)模型应用的大型服务器和笔记本电脑中。SAMD应用可回溯至早期的大型机时代,当时计算机专注于航班预定系统和实时银行系统等实时应用。
当前,嵌入式设计中对称多处理器(SMP)架构的应用引起了业界极大的关注。实际上,很少应用是同时并行(embarrassingly parallel)的。就像Madden提及,图像和多媒体处理是同时并行的,但是这些应用已经有专用的多媒体芯片处理了,例如IBM的Cell处理器和 ATI/Nvidia的图形处理器。因此,包括Madden在内的很多专家都认为,对称多处理器上的并行应用已经被局限在一个很小的范围之内。
软件工程师不习惯并行地考虑问题
在Madden的文章中,大多关于对称多处理器的讨论都会谈到开发工具的问题。实际应用中,依靠软件工具把一个巨大的单线程应用程序自动分配给多个处理器运行是不大可能的。类似于Verilog这样的硬件描述语言可以很容易地表达并行操作,而像C这样的软件语言更适用于单线程算法的实现。为了让C语言更适用于并行编程,人们做了很多改进尝试,比如Concurrent C、UPC、mpC、pC等。它们有些通过特殊的库,有些通过并行的API来实现并行进程的显式标识和进程间的通信,例如Madden的文章中提到的 MPI和OpenMP技术。
还有些研究人员试图用全新的整合了并行编程结构的软件开发语言来替代C语言。但是业界对这些新的编程语言并不认可(例如,Ada语言和Inmos公司的 Occam语言均以失败告终)。我们已经习惯于单任务的算法描述,对大多数程序员来说,思考并行程序或多线程操作都相当困难。然而,跳出SMP的限制来扩展处理器架构,我们发现至少有两种利用异构而非同构的并行方式。使用该两种便捷并行(convenient concurrency)方式能充分地将软件开发人员从并行工作的思考中释放出来,因为不同的并行任务间的联系并非十分紧密。
图1:超级3G移动电话原理图
第一种方式
你可以称这种并行为“组合并行”,因为这种并行操作将不同的子系统组合在一起,而每个子系统中都包含一个或多个针对特定任务优化过的处理器。在这种架构设计中,结构化的子系统间的通信只在需要时才相互影响。图1所示的超级3G移动电话系统体现了该思想。图中共有18个独立的处理模块(灰色表示部分),每个模块都有清晰的功能定义,因此很容易将整个系统功能划分开来用18个处理器完成设计(考虑到子任务处理的话,可能需要更多处理器)。
一些人对这种架构设计提出批评,因为处理器和门电路的效率看上去并不是很高,至少在理论上只需用几个高时钟频率的通用处理器(或者是SMP多核处理器)就可以替代10个、20个或更多的处理器核。实际上这些批评并不恰当,摩尔定律继续促使在一片芯片上可以集成更多的晶体管,而Denard经典尺度则提供速度更快、功耗更低的晶体管,但是从90nm开始,Denard理论无法继续提供更快的速度和更低的功耗了。在90nm节点上,功耗和能耗变得很难控制,而且随着工艺的提高问题将更严重。所以嵌入式系统的设计人员从现在开始就必须接受降低系统时钟频率以满足预期功耗和能耗指标的设计风格。
组合并行设计具有很多优点
* 将运算任务分配给几个片上处理器来运行是典型的增加晶体管数量换取低主频以降低功耗和能耗的方法。这是一种很好的工程折衷,由于时钟速度和内核工作电压之间的紧密关系,时钟频率的提高将使功耗呈超线性增长。此外,较低时钟速度的处理器不必采用最新的制程工艺。相同光刻节点情况下,采用速度较慢的低功耗制程的静态漏电流水平比采用高性能制程的漏电流水平小三个数量级。
* 当不需用到某个专用子系统时,可以切断其电源供应。因此,设计人员可以很容易地确定何时使用或不使用这些专用子系统。
* ASIP可以比通用处理器具备更高效的利用面积和功耗,而用作组合并行系统中的任务处理器。由于所使用的通用处理器核很少,也相应地减少了晶体管的数量。组合并行的设计避免了与SMP硬件设计和多线程代码相关联的子系统所需的复杂交互与同步。一个四内核的SMP系统带有音频、视频和照相功能,在运行其他任务时仍不会撤消911紧急电话,因此通常需要进行大量的仿真与分析。而高层实现交互的独立子系统能很容易地进行单独和组合的验证操作。基于SystemC 的系统仿真工具已经可以方便地对组合并行的系统设计进行仿真。不同的子系统可以用C语言来描述,并分别进行验证,然后利用指令集仿真器对整个系统进行仿真,这比进行RTL仿真快几百甚至上千倍。值得注意的是,C语言已经为嵌入式程序员广泛接受并采用,因此软件工程师无需学习新的语言。
第二种方式
计算通常可以划分为由独立任务引擎构成的流水线,因此便捷并行的第二种方式就是流水式数据流。各个流水式任务引擎都接收、处理并输出数据块,一旦处理任务完成后,数据块就被送到下一级引擎。非对称多处理算法常常出现在信号处理和图像处理应用上,诸如移动电话的基带处理、视频处理和静态图像处理等。流水线不但允许并行处理,而且还允许执行基于ASIP的应用,因为流水线中的每一个处理器都能高度集中于执行某一部分的任务。
上述两种便捷并行是互补的。因此,各个子系统的非对称多处理能和流水式设计的组合子系统进行融合。消费类、便携式和多媒体应用产品可能需要10到100个处理器,而这些处理器都将针对产品功能的特定任务进行优化。对基于非对称多处理器的应用进行编程要比基于对称多处理器的容易得多,因为不必考虑太多的交互任务依赖关系。经验表明通过这种方式能更清晰地编写软件,而且可以避免在同构多处理器上运行多线程应用所带来的大量优化问题。[!--empirenews.page--]
采用这两种便捷并行方式可以巧妙地避开阿姆达尔定律。因为许多并行算法可分别地使用组合并行设计来加速,而单一算法的诸多部分(例如视频编解码)可以使用流水式设计进行加速,所以整个系统的代码将被分解为众多小块以分别进行优化加速。可以看出,由于并无增加软件开发的需求,所以采用多核设计得到的益处要比阿姆达尔定律预测的大得多。
当然,获得这些益处的同时是要付出一定代价的。在多颗处理器之间进行任务划分和算法加速会导致设计需要使用更多的晶体管,这通常是采用分治的设计方法所必需的。然而,摩尔定律此时胜过了阿姆达尔定律,它使得增加的晶体管的成本非常低。相比之下,由高主频和高性能处理技术造成的高能耗以及多线程软件的开发复杂度所引发的成本问题则更为严重。