专家:多核时代对软件设计的挑战

best_dba 2007-10-09 01:54:15
在处理器主频进一步提升越来越难的时候,多核处理器的引入让摩尔定律再放异彩。然而,当我们在为多核化时代大声欢呼的同时,也不得不面对随之而来的问题。今天,甚至普通用户也不得不面临并行计算的问题,而多核处理器更是对系统和程序设计等都提出了诸多挑战。 在本文中,笔者首先介绍了并行计算的基本概念,在简单分析多核处理器发展趋势的基础上,介绍了在高性能计算领域常用的两个并行程序开发环境MPI和OpenMP。结合多核处理器的特点,探讨了将来的软件设计面临的挑战?此外,介绍了目前在国际上正在研发的针对千万亿次并行机和多核处理器的新一代并行程序设计语言,最后进行了趋势分析和展望。 历史悠久的并行计算 实际上,对于信息技术来说,并行机的发展历史已经算比较长的了。20世纪60年代初期美国就出现了全世界最早的并行计算机。70年代之后还出现过向量机、并行向量机(以Cray公司为代表,中国的则是银河系列),以及20世纪90年代初的SIMD并行机,其代表作就是Think Machine公司的CM系列并行机。Think Machine公司通过将大量体系结构简单、功能较弱的处理器用网络连接实现大规模的并行计算系统,但由于应用领域有限等原因,这类系统很快就消亡了。曾经一度流行且目前还占有一席之地的并行计算机是分布式存储的MPP机和基于SMP的共享存储小型机。但目前市场上占据主流位置的应该是Cluster集群系统。 在高端计算里我们需要通过并行去更快更好的解决挑战性的问题。另外一个必须并行的原因是电路设计的物理极限。单个处理器的线宽总有一天要达到物理极限,所以不得不转向多核,把痛苦的事情转嫁到大众身上。这就像我们人体的生长,人青年时期会不断地长高(与处理器主频的增长类似),但长到一定程度时就要向宽的方向发展(多处理器,多核)。 并行处理的精确定义是用多个计算部件共同快速完成挑战性的任务。这里有几个关键词,要多个计算部件(或计算机)、要共同(互相配合)、要快速、还要完成挑战性的任务。其好处就是提高性能,缩短解题时间,求解规模更大的问题。如果造一个主频极高成本也极高的单处理器,还不如把几个低主频的处理器一起使用,而且还可以容错。 比较常见的并行机就是SMP(对称多处理),但现在新的选项是多核处理器(在一个处理器内实现,不可分割,打包销售,买一送多),且普通大众将来都会逐渐接触和使用到。此外,并行计算还可以分为处理器内(最新的还包括多个处理器核)和处理器之间的两种并行层次。而根据不同的处理器间互联网络,也可以分成不同类型,而且研究如何进行互联也曾经是一个极其热门的研究课题。实际上,现在多处理器核之间也是需要互联网络的。我们甚至可以把多处理器核之间的互连模式看成原来的SMP多处理甚至多个并行计算节点之间互联在单个处理器内的缩小版。从存储模型上,并行处理还也可以分为分布式存储和共享存储两大类。 并行算法基本上就是一个浅而宽的算法结构,实际上就是把长而高的串行算法的时间复杂度通过增加空间复杂度的方式进行压缩,把以前一个周期一个操作去执行的算法结构改造成一个周期可以进行多个操作的并行算法,这就是并行化要做的主要工作。说白了,并行就是在一个时刻或者时间段里有一个以上的事件发生。 在并行计算领域里,最有名的两个定律是Amdahl定律[1]和Gustafson定律[2]。Amdahl定律指出,如果一个算法里不能并行的部分所占的比重是10%的话,那么并行化算法所能达到的最大加速比超不过10。这个定理出来以后,对并行计算打击很大。后来Gustafson发现,实际上Amdahl定理存在的问题是只假定并行系统处理一个固定规模的问题,在这种情况下,再增加处理器当然没有意义。但如果把问题规模随着机器规模一起变大,加速比仍然可以变大。Gustafson定理出现以后,并行机的发展前途豁然开阔。 在并行计算领域里,人们常常提到并行加速比(求解问题的串行执行时间与并行执行时间的比)。并行计算追求的最理想情况是用P个处理器,就能得到P倍的速度提升。但这通常很难达到,因为并行会引入通讯和调度等额外开销。当然在极个别情况下,也会出现超线性加速比的情况。 多核处理器:计算方式的革命 多核处理器的出现实际上是一次计算方式的革命。国外有些专家说,大家的免费午餐没有了(Free Lunch is Over!),我们不得不面对并发和并行操作这些通常是并行计算的专业人员和高端用户才需要面对的问题。对于从事IT的人来说,摩尔定律一直是一个圣经,当然对存储和价格来说目前它仍然成立,但对处理器性能来说,目前我们只能用多核的方式让它继续沿着摩尔定律上升。散热和漏电是两个迫使我们不得不转向多核处理的深层次的工业原因,工业界在2006年突然要面临一个拐点,从单核向多核处理器急速拐弯,这是大部分人甚至处理器制造商都没有预料到的,至少没想到出现的这么快。 传统提高处理器性能的方法,一个是通过缩小线宽,不断提高主频,12年里从60MHz提高到了3.8GHZ。第二条途径是运行时优化,通过采用功能更强大的指令,流水处理、分枝预测、多指令并行和指令重排序等来实现。第三条途径是通过不断增大Cache的容量来实现。 实际上这也是一个不断寻求更高性能手段的发展历程,多核的出现也是其中的一个阶段。就如同流水线、多级Cache等刚被引入处理器设计中,受到很大的抵制一样,多核的引入初期,肯定也不会很快被接受。但相信通过一段时间的适应,以及工业界和科研界的努力,多核也会最终成为未来处理器的标准配制,大家逐渐习以为常。多核的引入实际上增加了一个新的处理器设计自由度,在给体系结构设计带来更多灵活性的同时,当然也给用户带来了很多的复杂性。 当前各个主流处理器厂商都推出了自己的多核产品,八核的,甚至更多核的产品也已或即将出现。 英特尔公司2006年底抢先推出了自己的四核产品,AMD公司也会在2007年推出自己的四核产品。实际上,不同的多核处理器可以有不同的生产工艺,有的是在一片硅片上同时造出两个紧邻的紧耦合的核来,有的是把两个分离的核封装在一个芯片里。这里面涉及生产工艺复杂性和提高成品率,降低成本,缩短生产周期等方面的问题,所以会有不同的制造选项。 多核处理器的高速Cache层次比较复杂,其中有每个核私有的L1 Cache,有多个核共享或私有的L2 Cache,甚至更多的核共享的L3 Cache。这就导致不同的核访问不同位置Cache的速度和延迟不同,出现NUCA的现象(非一致Cache访问)。NUCA也是目前学术界研究的课题之一。 现在才不过几个核,大家还不必太害怕,将来我们可能会面临几百个核,简直是核的海洋,这种情况甚至连搞并行计算的专家都感到害怕和麻烦。一个机器里那么多核,怎么去很好的利用?这肯定是大家首先冒出来的一个问题。本来并行计算就很难了,再放那么多核就更困难了。 其实90年代末就已经有人在做多核处理器的研究,其思路是把功能简单的处理器用网络连接起来,互相协作来解决延迟的问题。比较早的是RAW处理器,由美国MIT大学开发,是我们目前称为Tile结构处理器的先驱(http://cag-www.lcs.mit.edu/raw)。 现在比较热的一个Tile结构处理器研究项目叫TRIPS,其目标是实现单处理器一个周期达到万亿次操作且可靠、智能自适应的目标,是由美国DARPA的多态计算体系结构项目从2000年开始资助Texas大学的Austin分校2000万美元开展的一个研究项目,整个项目由30名研究人员(含研究生)组成。但Trips所采用的体系结构与传统的冯-诺依曼体系有所不同,不是目前流行的指令流驱动,而是数据流驱动(显示数据图执行EDGE),以数据的到达作为指令执行的触发标志,而不是根据用户或编译器预先规定好的指令顺序来执行。该处理器每周期可以调度一个包含128条指令的指令块映射到执行单元的网格上执行,且可以通过多态重组合的功能挖掘包括指令级并行、线程并行和数据并行等多层次的并行,从而适应不同的应用需求。该处理器2006年已经推出原型系统,是目前比较被看好的未来处理器的一个发展方向。
...全文
96 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zy_914 2007-10-09
  • 打赏
  • 举报
回复
路过

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧