多核,个人计算并行时代才刚刚开始(Parallel Computing)
多核,个人计算并行时代才刚刚开始
(Parallel Computing)
按照前言的约定,JonsonXP在这个系列的第二篇聊聊并行的历史。
2005年Intel推出第一款个人双核处理器以来,4年中Intel和AMD两大厂商已经将处理器内核数量从双核,扩展到4核,今年六月AMD即将发布6核皓龙处理器伊斯坦布尔。而这种内核数扩充的步伐在未来会越来越快,AMD已经承诺2010发布基于32nm技术12核处理器。
前一篇《从主频之争到多核之争,摩尔定律还能走多远?》从IC设计的角度上探讨了CPU走入多核,以并行寻求性能提升的必然。其实,并行技术早已悄悄附体历代CPU,本文简单聊一下并行的浪漫史和未来。
俗套的开场白,什么是多核?
想起这个话题,还是因为07年有过一段AMD和Intel关于真假多核争执不休的事情。我们先看看如今维基百科上对多核处理器的定义:
A multi-core processor (or chip-level multiprocessor, CMP) combines two or more independent cores (normally a CPU) into a single package composed of a single integrated circuit (IC), called a die, or more dies packaged together.
挑重点的说。多核处理器,1.要集成多个独立内核;2.这些内核是在一个封装内的,但可以是位于不同晶片。
插曲(可跳过此段):这样定义也是因为当年刚发布双核时的争议。Intel的EE840解决方案是将位于不同晶片的两个P4处理器包在了一个封装里,共享前端总线,并用外部的北桥芯片来做二级缓存仲裁机构。而AMD的架构,是两颗Venice内核做到一个晶片上,缓存的仲裁机构也在片内。因此AMD曾诋毁Intel生产假双核概念。但根据如今多核的定义,他们只是两种不同架构而已。并且Intel按照自己的发展路线,如今core i7已经解决了从前的很多问题。
流水线到超线程到多核,不同层面的并行
流水线(Pipeline)是将一条指令的执行分成多个步骤,比如取指令、译码、执行等等,每个机构就像车间流水线中的一道工序,一条指令取出来,马上送入译码器,紧接着取下一条指令。一条流水线上可以同时处理多条指令,只不过大家排好队分别处于不同的阶段,在同一时间上好多指令在并行,所以叫时间并行。
超线程(Hyper-threading),如果流水线是在时间上充分利用了各个单元,不让他们闲下来,而超线程则是将这种理念更进一步,试图再在空间上充分利用每个单元的每个部分。比如执行单元在执行加法指令的时候,其他处理单元(Process Element)是空闲的,完全可以同时再执行一个乘法。使用了超线程的处理核心,对外显示为两个逻辑内核来获得多条进程进行处理。Intel的超线程技术几乎将一个核心的性能发挥到了最大。
多核(MultiCore)的发展是处理器并行的归宿,也是真正意义上的可持续发展的CPU并行处理方向。因为无论是流水线还是超线程,都是对单核心运算潜力的挖掘,性能的提升总会榨干或者很难继续榨的一天。另一个很大的不同是,流水线和超线程只需要CPU内部优化,上层程序不需要任何改动即可坐享有性能提升;而多核应用中,编译器和软件中的并行算法会占有更重要的地位。可是一旦变革完成,实现完整可扩充的多核架构,就可以不断的添加内核和改良软件算法迎来按级数增长的性能大提升时代。
并行,一切才刚刚开始
记得双核伊始的时候,曾有一期《程序员》专题讨论双核处理器和并行软件设计方法,感觉未来的软件工程师一定要懂得如何为多核处理器写程序才可以。但4年过去了,对于大部分软件工程师好像一切都没有什么改变。但大多数人还没察觉,我们正在经历着整个计算架构的变革,美国实验室的小伙子们,早就开始研究如何高效利用1000个内核的处理器海洋(Sea of processors),微软正在向.net framwork添加更完善的并行类库和支持,云计算、虚拟化市场也正野心勃勃准备迎接真正多核时代的爆发性发展。个人计算并行的时代,才刚刚开始而已。
宝图已然在手,是空等未来,还是乘风破浪?