多核心的思想并不新鲜,制造工艺的上的局限导致了直到目前多核处理器在成本上才有跟以前单核处理器相当的水准。当然,即便是最先进的
65nm工艺,制造一块两个核心以上的处理器,成本依然还相当高昂。
众“核”难调
即便是在制造上没有大问题,就处理器的系统结构而言,多核处理器依然面临大问题。如果仅仅简单地考虑多核的物理连接,而没有充分考虑到处理器的运行和使用模式,将极大限制处理器的利用率,尤其是在处理有资源冲突应用的时候,多个核心之间的资源调配就成了效率关键。在目前的算法条件下,还没有更好的控制两个以上处理器合理调配资源的方法。这并非因为无法实现更好的算法从而充分调配处理器资源,而是因为目前多核处理器普遍的算法相对比较简单。
总体来看,算法无法知道具体的可用资源,并且硬件的搭配因为成本问题没有充分考虑一些意外情况,因而,以“同类”思想考虑的处理器在面对“异类”运算时就会变得效率低下。
现在,多核处理器有多种安排形式,AMD的双核、Intel的Pentium D以及IBM的Cell架构乃是其中几种代表。
Intel很早就通过超线程技术实现了逻辑上的双处理器系统,但这不过是对处理器闲置资源的一种充分利用而已,并且这种充分利用只有在特定的条件下才会比较合适,尤其是针对流水线比较长,而两种运算并不相互交叉的时候,才会有较高的效率。但像编码解码、长期重复某种矩阵运算、一些没有经过仔细编写的软件,似乎并不能充分利用这个特性。
即使IBM的Power5架构,也需要跟最新的操作系统进行融合,加上运行在其上的软件,才有可能利用并发多线程。这是物理上多核系统的资源利用的一个映射,至少可以说明,仅仅通过操作系统忙乎还远远不够。
目前条件下,Intel的多核系统和AMD有根本不同。根据多核处理器系统强调可扩展性的特点来看,目前的Pentium D并不是一个良好的多核解决方案。并且,在流媒体时代,高清晰的内容需要处理器作为一个数据中心,不仅告诉处理器数据,还需要高速传输数据,仅仅是把两个核心安排在一个处理器内,无法实现根本转变。
I/O成瓶颈
由于两个核心只能共用一个I/O通道,当两个核心之间的数据进行交流的时候,就无法再从外部读入数据从而利用两者的时间差实现资源的有效搭配和利用
。尽管两个核心之间可以并行运算,但就整个系统而言,无法实现真正的流水线操作。
加上分离的缓存结构需要取得一致性,两个内核之间的交流变得经常而且频繁,这实际上也会降低处理器的效率,因此Pentium D在技术上并不被看好。
AMD因为通过引入HyperTransport,部分解决了这个问题,并且因为处理器内部自己有独立的内存控制器,可以独立访问内存,两个核心之间的行为具有相对独立性,数据相关变得很小。因而一些测试表明,其随机处理数据的能力要高于Pentium D。
AMD64的最大特性是引入了HyperTransport,它的良好扩展性使得处理器实现多核、多处理器系统相对容易一些,并且,多处理器扩展的效果也非常好,这是它能够在桌面双核领域暂时领先的重要原因。考虑到这些,Intel可能也会在合适的时候引入类似架构。
Cell的多核实现起来并不完全一样,因为制造太复杂,估计到65nm的时候,这个处理器才能够在成本上具有竞争力。与其他基于对称多处理器不同的是,这个处理器把重心放在了运算基元之上,从而能够把处理器应用到面对不同的应用类型,它其中包含的核心更多是以运算的基础元件形式存在的。因而,即便在内部,也是按照一个系统的思想来实现的,各个运算单元之间有高速的连接通道,除了主控处理器用来分配任务从而形成运算的流水线思想外,其余几个并不是具有很完善的运算能力。这几种系统都面临同样的问题:I/O将是最严重的瓶颈。
虚拟化在一定程度上能够处理一些因为多核带来的问题,可以让应用软件和操作系统在透明的环境下对处理器资源进行分配和管理。
软件是软肋
即使桌面操作系统支持双处理器,也需要很长一段时间。目前在对称多处理器方面,操作系统对资源的分配和管理并没有本质的改变,多以对称的方式进行平均分配。
也就是说,在操作系统层面,当一个任务到来时,剥离成为两个并行的线程,因为线程之间需要交流以及操作系统监管,它导致的效率损失要比硬件层面的大得多。并且,多数软件并没有充分考虑到双核乃至多核的运行情况,导致线程的平均分配时间以及线程之间的沟通时间都会大大增加,尤其是当线程需要反复访问内存的时候。比如做一个FFT测试时,由软件和硬件构成的系统将呈现出巨大差异,这时Pentium D将被完全击倒。这不是Pentium D的错,多数操作系统还没有完全实现自由的资源分配。IBM也是通过AIX 5.3L在支持更自由的虚拟化Power5上,实现了资源的动态调配和划分。
从长远来看,需要使用虚拟化技术才可能实现操作系统对任务的具体划分,这很可能改变一些通用的编程模式。不仅操作系统层面无法完全解决这个问题,就是软件在编写的时候其编译器都无法充分解决这个问题。
面对多核系统,需要有并行编程的思想才有可能充分利用资源,而人类的思维模型习惯于线性思维,对“面”或者更为复杂的立体编程模式,效率会下降很多。
软件的缺失给多核蒙上了一些阴影。尽管用户在充满希望地期待着,但思维完全的改变,不是一朝一夕的事情。更重要的是,一些表现多核处理能力的输出系统无法承受这样的运算量。
现在能充分享受到多核系统的用户依然还是企业级用户,那些专门进行密集计算的用户可以充分利用多核节省下来的空间,大大增加计算密度,从而降低整体管理费用。
对于一些线性模型,如Google的查找算法,对处理器系统的要求是多多益善。一些用于网络游戏的服务器,也能够从多核之中看到可支持用户数量的成倍增长。对于一些需要科学运算的石化、石油勘探等大量数据转换来说,不仅需要多核,还需要大量的显示芯片实现数据的可视化。
本来,多核在可视化领域具有远大前途,渲染速度可以加倍,矩阵运算容量可以大增,可惜现在的OpenGL还太可恶,很难拆分数据封装。
在仿真领域,大量的多核可以充分模拟仿真的网格特性,因而可以充分利用在气象等高密度计算中。
有人说,多核系统可以提高多任务的性能,可以同时做很多事情,但须知,人是需要专心的动物。我看,多核的真正春天要寄托在家庭服务器上,只有这时候,电脑转变成为数字家庭的数据存储和运算中心,它的多核意义才会凸显。
无论如何,需要把眼光放在软件端才是正途,至于使用几个核的处理器,让开发人员去思考好了。
- 相关阅读:
- ·装了不会用?四大特性玩转Windows10
//server.zol.com.cn/538/5380880.html - ·开学季:盘点你可能不知道的存储方式
//server.zol.com.cn/538/5382138.html - ·开源技巧:使用Docker实现交互式任务
//server.zol.com.cn/538/5382378.html - ·细细道来:Linux服务器有哪些优势?
//server.zol.com.cn/536/5364242.html - ·自行脑补 从Gartner看宅男爱上操作系统
//server.zol.com.cn/537/5379892.html