二十一世纪以来,随着芯片功耗的不断提升和芯片复杂度的不断提升,通过提升频率等方法来提高单核处理器的性能变得非常困难。单芯片多处理器(Chip Multiprocessor,即CMP)技术成为了新的发展热点。截至2010年8月,使用CMP技术的处理器已经占据了大部分市场,从大型商用机型,到普通桌面机,再到嵌入式系统,无论高端低端,CMP都成为了各领域处理器结构的必然选择。
然而CMP的使用并不是应用驱动的,它的出现主要是为了有效地利用新制造工艺带来的更多的晶体管。由于功耗和验证难度的限制,已经难以通过设计更复杂的单核来提升处理器的性能。与此同时传统的图灵机串行程序模型和串行地址空间结构并没有发生本质改变,原有的大量程序和许多新增的程序依然遵循传统的设计方法,导致串行化的程序并不能很好的利用2010年可并行执行的物理结构以提高性能。
2010年之前技术中采用传统的并行程序设计方法重写已有的程序,该方法好像非常简单,但是事实上并不可行。常用的并行化库和编译指令主要有OpenMP(共享存储并行设计的库)和MPI(消息传递并行编程环境)。它们一方面难于掌握:并行程序的设计与调试都比串行程序要困难很多;另一方面也不是特别适用于多核环境。由于编写单个并行程序代价就很高,要想把已有的各种应用程序都重写,实际上是不可能的。
经对2010年之前文献检索发现,中国专利申请号为:200510026587.4,名称为:用户指导的程序半自动并行化方法,该技术提出了一种使用较为简单的模型开发并行化程序,能减小开发并行程序的复杂度。但是,其使用范围有限而且仍然需要大量精力进行重新开发,不能很好地解决大量已有的串行程序的问题。
另外一种方法是对串行程序进行自动分析翻译,生成并行化程序,即线程级推测(ThreadLevel Speculation,即TLS)技术。使用该技术可以使用相应的自动并行化工具,通过对原有串行程序的源代码、中间代码或者二进制代码的分析,自动划分线程,并生成并行化代码。该方法虽然可以不用重写程序,但还是需要对原有的代码进行重新编译,这就要求用户有能力进行代码重新编译或者要求用户更换为已经重新编译的程序,这一要求在一般情况下是不成立的。同时,使用推测技术,虽然在一定程度上提高了并行度,但同时也增加了硬件设计的复杂度,并且在推测级数较多时推测成功率很低。