多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核),此时处理器能支持系统总线上的多个处理器,由总线控制器提供所有总线控制信号和命令信号。
多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核),此时处理器能支持系统总线上的多个处理器,由总线控制器提供所有总线控制信号和命令信号。多核技术的开发源于工程师们认识到,仅仅提高单核芯片的速度会产生过多热量且无法带来相应的性能改善,先前的处理器产品就是如此。他们认识到,在先前产品中以那种速率,处理器产生的热量很快会超过太阳表面。即便是没有热量问题,其性价比也令人难以接受,速度稍快的处理器价格要高很多。
技术发展
英特尔工程师们开发了多核芯片,使之满足“横向扩展”(而非“纵向扩充”)方法,从而提高性能。该架构实现了“分治法”战略。通过划分任务,线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务。多核处理器是单枚芯片(也称为“硅核”),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将每个执行内核作为分立的逻辑处理器。通过在两个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。多核架构能够使软件更出色地运行,并创建一个促进未来的软件编写更趋完善的架构。尽管认真的软件厂商还在探索全新的软件并发处理模式,但是,随着向多核处理器的移植,现有软件无需被修改就可支持多核平台。操作系统专为充分利用多个处理器而设计,且无需修改就可运行。为了充分利用多核技术,应用开发人员需要在程序设计中融入更多思路,但设计流程与对称多处理 (SMP)系统的设计流程相同,并且现有的单线程应用也将继续运行。得益于线程技术的应用在多核处理器上运行时将显示出卓越的性能可扩充性。此类软件包括多媒体应用(内容创建、编辑,以及本地和数据流回放)、工程和其他技术计算应用以及诸如应用服务器和数据库等中间层与后层服务器应用。多核技术能够使服务器并行处理任务,而在以前,这可能需要使用多个处理器,多核系统更易于扩充,并且能够在更纤巧的外形中融入更强大的处理性能,这种外形所用的功耗更低、计算功耗产生的热量更少。多核技术是处理器发展的必然。推动微处理器性能不断提高的因素主要有两个:半导体工艺技术的飞速进步和体系结构的不断发展。半导体工艺技术的每一次进步都为微处理器体系结构的研究提出了新的问题,开辟了新的领域;体系结构的进展又在半导体工艺技术发展的基础上进一步提高了微处理器的性能。这两个因素是相互影响,相互促进的。一般说来,工艺和电路技术的发展使得处理器性能提高约 20 倍,体系结构的发展使得处理器性能提高约 4 倍,编译技术的发展使得处理器性能提高约 1.4 倍。但是今天,这种规律性的东西却很难维持。多核的出现是技术发展和应用需求的必然产物。
发展历程
1971 年,英特尔推出的全球第一颗通用型微处理器 4004,由 2300 个晶体管构成。当时,公司的联合创始人之一戈登摩尔(Gordon Moore),就提出后来被业界奉为信条的“摩尔定律”——每过 18 个月,芯片上可以集成的晶体管数目将增加一倍。
在一块芯片上集成的晶体管数目越多,意味着运算速度即主频就更快。今天英特尔的奔腾(Pentium)四至尊版 840 处理器,晶体管数量已经增加至 2.5 亿个,相比当年的 4004 增加了 10 万倍。其主频也从最初的 740kHz(每秒钟可进行 74 万次运算),增长到 3.9GHz(每秒钟运算 39 亿次)以上。
当然,CPU 主频的提高,或许在一定程度上也要归功于 1975 年进入这个领域的 AMD 公司的挑战。正是这样的“双雄会”,使得众多计算机用户有机会享受不断上演的“速度与激情”。一些仍不满足的发烧友甚至选择了自己超频,因为在玩很多游戏时,更快的速度可以带来额外的饕餮享受。
但到了 2005 年,当主频接近 4GHz 时,英特尔和 AMD 发现,速度也会遇到自己的极限:那就是单纯的主频提升,已经无法明显提升系统整体性能。
以英特尔发布的采用 NetBurst 架构的奔腾四 CPU 为例,它包括 Willamette、Northwood 和 Prescott 等三种采用不同核心的产品。利用冗长的运算流水线,即增加每个时钟周期同时执行的运算个数,就达到较高的主频。这三种处理器的最高频率,分别达到了 2.0G、3.4G 和 3.8G。
按照当时的预测,奔腾四在该架构下,最终可以把主频提高到 10GHz。但由于流水线过长,使得单位频率效能低下,加上由于缓存的增加和漏电流控制不利造成功耗大幅度增加,3.6GHz 奔腾四芯片在性能上反而还不如早些时推出的 3.4GHz 产品。所以,Prescott 产品系列只达到 3.8G,就戛然而止。
英特尔上海公司一位工程师在接受记者采访时表示,Netburst 微架构的好处在于方便提升频率,可以让产品的主频非常高。但性能提升并不明显,频率提高 50%,性能提升可能微不足道。因为 Netburst 微架构的效率较低,CPU 计算资源未被充分利用,就像开车时“边踩刹车边踩油门”。
此外,随着功率增大,散热问题也越来越成为一个无法逾越的障碍。据测算,主频每增加 1G,功耗将上升 25 瓦,而在芯片功耗超过 150 瓦后,现有的风冷散热系统将无法满足散热的需要。3.4GHz 的奔腾四至尊版,晶体管达 1.78 亿个,最高功耗已达 135 瓦。实际上,在奔腾四推出后不久,就在批评家那里获得了“电炉”的美称。更有好事者用它来玩煎蛋的游戏。
很显然,当晶体管数量增加导致功耗增长超过性能增长速度后,处理器的可靠性就会受到致命性的影响。就连戈登摩尔本人似乎也依稀看到了“主频为王”这条路的尽头——2005 年 4 月,他曾公开表示,引领半导体市场接近 40 年的“摩尔定律”,在未来 10 年至 20 年内可能失效。
多核心 CPU 解决方案(多核)的出现,似乎给人带来了新的希望。早在上世纪 90 年代末,就有众多业界人士呼吁用 CMP(单芯片多处理器)技术来替代复杂性较高的单线程 CPU。IBM、惠普、Sun 等高端服务器厂商,更是相继推出了多核服务器 CPU。不过,由于服务器价格高、应用面窄,并未引起大众广泛的注意。
直到 AMD 抢先手推出 64 位处理器后,英特尔才想起利用“多核”这一武器进行“帝国反击战”。2005 年 4 月,英特尔仓促推出简单封装双核的奔腾 D 和奔腾四至尊版 840。AMD 在之后也发布了双核皓龙(Opteron)和速龙(Athlon) 64 X2 和处理器。但真正的“双核元年”,则被认为是 2006 年。这一年的 7 月 23 日,英特尔基于酷睿(Core)架构的处理器正式发布。2006 年 11 月,又推出面向服务器、工作站和高端个人电脑的至强(Xeon)5300 和酷睿双核和四核至尊版系列处理器。与上一代台式机处理器相比,酷睿 2 双核处理器在性能方面提高 40%,功耗反而降低 40%。作为回应,7 月 24 日,AMD 也宣布对旗下的双核 Athlon64 X2 处理器进行大降价。由于功耗已成为用户在性能之外所考虑的首要因素,两大处理器巨头都在宣传多核处理器时,强调其“节能”效果。英特尔发布了功耗仅为 50 瓦的低电压版四核至强处理器。而 AMD 的“Barcelona”四核处理器的功耗没有超过 95 瓦。在英特尔高级副总裁帕特基辛格(Pat Gelsinger)看来,从单核到双核,再到多核的发展,证明了摩尔定律还是非常正确的,因为“从单核到双核,再到多核的发展,可能是摩尔定律问世以来,在芯片发展历史上速度最快的性能提升过程”。
技术优势
从应用需求上去看,越来越多的用户在使用过程中都会涉及到多任务应用环境,日常应用中用到的非常典型的有两种应用模式。
一种应用模式是一个程序采用了线程级并行编程,那么这个程序在运行时可以把并行的线程同时交付给两个核心分别处理,因而程序运行速度得到极大提高。这类程序有的是为多路工作站或服务器设计的专业程序,例如专业图像处理程序、非线视频编缉程序、动画制作程序或科学计算程序等。对于这类程序,两个物理核心和两颗处理器基本上是等价的,所以,这些程序往往可以不作任何改动就直接运行在双核电脑上。
还有一些更常见的日常应用程序,例如 Office、IE 等,同样也是采用线程级并行编程,可以在运行时同时调用多个线程协同工作,所以在双核处理器上的运行速度也会得到较大提升。例如,打开 IE 浏览器上网。看似简单的一个操作,实际上浏览器进程会调用代码解析、Flash 播放、多媒体播放、Java、脚本解析等一系列线程,这些线程可以并行地被双核处理器处理,因而运行速度大大加快(实际上 IE 浏览器的运行还涉及到许多进程级的交互通信,这里不再详述)。由此可见,对于已经采用并行编程的软件,不管是专业软件,还是日常应用软件,在多核处理器上的运行速度都会大大提高。
日常应用中的另一种模式是同时运行多个程序。许多程序没有采用并行编程,例如一些文件压缩软件、部分游戏软件等等。对于这些单线程的程序,单独运行在多核处理器上与单独运行在同样参数的单核处理器上没有明显的差别。但是,由于日常使用的最最基本的程序——操作系统——是支持并行处理的,所以,当在多核处理器上同时运行多个单线程程序的时候,操作系统会把多个程序的指令分别发送给多个核心,从而使得同时完成多个程序的速度大大加快。
另外,虽然单一的单线程程序无法体现出多核处理器的优势,但是多核处理器依然为程序设计者提供了一个很好的平台,使得他们可以通过对原有的单线程序进行并行设计优化,以实现更好的程序运行效果。
上面介绍了多核心处理器在软件上面的应用,但游戏其实也是软件的一种,作为一种特殊的软件,对 PC 发展作出了较大的贡献。一些多线程游戏已经能够发挥出多核处理器的优势,对于单线程游戏,相信游戏厂商也将会改变编程策略,例如,一些游戏厂商正在对原来的一些单线程游戏进行优化,采用并行编程使得游戏运行得更快。有的游戏可以使用一个线程实现人物动画,而使用另一个线程来载入地图信息。或者使用一个线程来实现图像渲染中的矩阵运算,而使用另一个来实现更高的人工智能运算。如今,大量的支持多核心的游戏涌现出来,从而使得多核处理器的优势能得到进一步的发挥。
技术瓶颈
布赖恩特直言不讳地指出,要想让多核完全发挥效力,需要硬件业和软件业更多革命性的更新。其中,可编程性是多核处理器面临的最大问题。一旦核心多过八个,就需要执行程序能够并行处理。尽管在并行计算上,人类已经探索了超过 40 年,但编写、调试、优化并行处理程序的能力还非常弱。
易观国际分析师李也认为,“出于技术的挑战,双核甚至多核处理器被强加给了产业,而产业却并没有事先做好准备”。或许正是出于对这种失衡的担心,中国国家智能计算机中心主任孙凝辉告诉《财经》记者,“十年以后,多核这条道路可能就到头了”。在他看来,一味增加并行的处理单元是行不通的。并行计算机的发展历史表明,并行粒度超过 100 以后,程序就很难写,能做到 128 个以上的应用程序很少。CPU 到了 100 个核以上后,并行计算机系统遇到的问题,在 CPU 一样会存在。“如果解决不了主流应用并行化的问题,主流 CPU 发展到 100 个核就到头了。还不知道什么样的革命性的进展能解决这些问题。”孙补充说。
实际上,市场研究公司 In-Stat 分析师吉姆克雷格(Jim McGregor)就承认,虽然英特尔已向外界展示了 80 核处理器原型,但尴尬的是,还没有能够利用这一处理器的操作系统。中科院软件所并行计算实验室副主任张云泉也持类似的观点。他对《财经》记者表示,这个问题实际一直就存在,但原来在超级计算机上才会遇到,所以,讨论也多局限在学术界。所有用户都要面对这样的问题。
多核心技术在应用上的优势有两个方面:为用户带来更强大的计算性能;更重要的,则是可满足用户同时进行多任务处理和多任务计算环境的要求。两大巨头都给消费者描绘出了使用多核处理器在执行多项任务时的美妙前景:同时可以检查邮件、刻录 CD、修改照片、剪辑视频,并且同时可以运行杀毒软件。或者利用同一台电脑,父亲在查看财务报表,女儿在打游戏,母亲在给远方的朋友打网络电话。但并不是所有家庭只有一台电脑,也不是所有用户都要用电脑一下子做那么多事,更何况大部分应用程序还并不能自动分割成多任务,分别交给多个核心去执行。所以,对于大多数用户来说,多核所带来的实际益处,很可能并不明显。而多核所带来的挑战,或者说麻烦,却是实实在在的。美国卡内基梅隆大学计算机系教授朗道布赖恩特(Randal E Bryant)在接受《财经》记者采访时就坦称,“这给软件业制造了巨大的问题”。
技术原理
多核 CPU 就是基板上集成有多个单核 CPU,早期 PD 双核需要北桥来控制分配任务,核心之间存在抢二级缓存的情况,后期酷睿自己集成了任务分配系统,再搭配操作系统就能真正同时开工,2 个核心同时处理 2“份”任务,速度快了,万一 1 个核心死机,起码另一个 U 还可以继续处理关机、关闭软件等任务。
技术关键
与单核处理器相比,多核处理器在体系结构、软件、功耗和安全性设计等方面面临着巨大的挑战,但也蕴含着巨大的潜能。
CMP 和 SMT 一样,致力于发掘计算的粗粒度并行性。CMP 可以看做是随着大规模集成电路技术的发展,在芯片容量足够大时,就可以将大规模并行处理机结构中的 SMP(对称多处理机)或 DSM(分布共享处理机)节点集成到同一芯片内,各个处理器并行执行不同的线程或进程。在基于 SMP 结构的单芯片多处理机中,处理器之间通过片外 Cache 或者是片外的共享存储器来进行通信。而基于 DSM 结构的单芯片多处理器中,处理器间通过连接分布式存储器的片内高速交叉开关网络进行通信。
由于 SMP 和 DSM 已经是非常成熟的技术了,CMP 结构设计比较容易,只是后端设计和芯片制造工艺的要求较高而已。正因为这样,CMP 成为了最先被应用于商用 CPU 的“未来”高性能处理器结构。
虽然多核能利用集成度提高带来的诸多好处,让芯片的性能成倍地增加,但很明显的是原来系统级的一些问题便引入到了处理器内部。
核结构研究
同构还是异构
CMP 的构成分成同构和异构两类,同构是指内部核的结构是相同的,而异构是指内部的核结构是不同的。为此,面对不同的应用研究核结构的实现对未来微处理器的性能至关重要。核本身的结构,关系到整个芯片的面积、功耗和性能。怎样继承和发展传统处理器的成果,直接影响多核的性能和实现周期。同时,根据 Amdahl 定理,程序的加速比决定于串行部分的性能,所以,从理论上来看似乎异构微处理器的结构具有更好的性能。
核所用的指令系统对系统的实现也是很重要的,多核之间采用相同的指令系统还是不同的指令系统,能否运行操作系统等,也将是研究的内容之一。
程序执行模型
处理器设计的首要问题是选择程序执行模型。程序执行模型的适用性决定多核处理器能否以最低的代价提供最高的性能。程序执行模型是编译器设计人员与系统实现人员之间的接口。编译器设计人员决定如何将一种高级语言程序按一种程序执行模型转换成一种目标机器语言程序; 系统实现人员则决定该程序执行模型在具体目标机器上的有效实现。当目标机器是多核体系结构时,产生的问题是: 多核体系结构如何支持重要的程序执行模型?是否有其他的程序执行模型更适于多核的体系结构?这些程序执行模型能多大程度上满足应用的需要并为用户所接受?
Cache 设计
多级 Cache 设计与一致性问题
处理器和主存间的速度差距对 CMP 来说是个突出的矛盾,因此必须使用多级 Cache 来缓解。有共享一级 Cache 的 CMP、共享二级 Cache 的 CMP 以及共享主存的 CMP。通常,CMP 采用共享二级 Cache 的 CMP 结构,即每个处理器核心拥有私有的一级 Cache,且所有处理器核心共享二级 Cache。
Cache 自身的体系结构设计也直接关系到系统整体性能。但是在 CMP 结构中,共享 Cache 或独有 Cache 孰优孰劣、需不需要在一块芯片上建立多级 Cache,以及建立几级 Cache 等等,由于对整个芯片的尺寸、功耗、布局、性能以及运行效率等都有很大的影响,因而这些都是需要认真研究和探讨的问题。
另一方面,多级 Cache 又引发一致性问题。采用何种 Cache 一致性模型和机制都将对 CMP 整体性能产生重要影响。在传统多处理器系统结构中广泛采用的 Cache 一致性模型有: 顺序一致性模型、弱一致性模型、释放一致性模型等。与之相关的 Cache 一致性机制主要有总线的侦听协议和基于目录的目录协议。CMP 系统大多采用基于总线的侦听协议。
核间通信技术
CMP 处理器的各 CPU 核心执行的程序之间有时需要进行数据共享与同步,因此其硬件结构必须支持核间通信。高效的通信机制是 CMP 处理器高性能的重要保障,比较主流的片上高效通信机制有两种,一种是基于总线共享的 Cache 结构,一种是基于片上的互连结构。
总线共享 Cache 结构是指每个 CPU 内核拥有共享的二级或三级 Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。这种系统的优点是结构简单,通信速度高,缺点是基于总线的结构可扩展性较差。
基于片上互连的结构是指每个 CPU 核心具有独立的处理单元和 Cache,各个 CPU 核心通过交叉开关或片上网络等方式连接在一起。各个 CPU 核心间通过消息通信。这种结构的优点是可扩展性好,数据带宽有保证; 缺点是硬件结构复杂,且软件改动较大。
也许这两者的竞争结果不是互相取代而是互相合作,例如在全局范围采用片上网络而局部采用总线方式,来达到性能与复杂性的平衡。
总线设计
传统微处理器中,Cache 不命中或访存事件都会对 CPU 的执行效率产生负面影响,而总线接口单元(BIU)的工作效率会决定此影响的程度。当多个 CPU 核心同时要求访问内存或多个 CPU 核心内私有 Cache 同时出现 Cache 不命中事件时,BIU 对这多个访问请求的仲裁机制以及对外存储访问的转换机制的效率决定了 CMP 系统的整体性能。因此寻找高效的多端口总线接口单元(BIU)结构,将多核心对主存的单字访问转为更为高效的猝发(burst)访问; 同时寻找对 CMP 处理器整体效率最佳的一次 Burst 访问字的数量模型以及高效多端口 BIU 访问的仲裁机制将是 CMP 处理器研究的重要内容,Inter 推出了最新的英特尔智能互连技术(QPI)技术总线,更大程度发掘了多核处理器的实力 。
操作系统设计
任务调度、中断处理、同步互斥
对于多核 CPU,优化操作系统任务调度算法是保证效率的关键。一般任务调度算法有全局队列调度和局部队列调度。前者是指操作系统维护一个全局的任务等待队列,当系统中有一个 CPU 核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。
这种方法的优点是 CPU 核心利用率较高。后者是指操作系统为每个 CPU 内核维护一个局部的任务等待队列,当系统中有一个 CPU 内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,这种方法的优点是任务基本上无需在多个 CPU 核心间切换,有利于提高 CPU 核心局部 Cache 命中率。多数多核 CPU 操作系统采用的是基于全局队列的任务调度算法。
多核的中断处理和单核有很大不同。多核的各处理器之间需要通过中断方式进行通信,所以多个处理器之间的本地中断控制器和负责仲裁各核之间中断分配的全局中断控制器也需要封装在芯片内部。
另外,多核 CPU 是一个多任务系统。由于不同任务会竞争共享资源,因此需要系统提供同步与互斥机制。而传统的用于单核的解决机制并不能满足多核,需要利用硬件提供的“读-修改-写”的原子操作或其他同步互斥机制来保证。
低功耗设计
半导体工艺的迅速发展使微处理器的集成度越来越高,同时处理器表面温度也变得越来越高并呈指数级增长,每三年处理器的功耗密度就能翻一番。低功耗和热优化设计已经成为微处理器研究中的核心问题。CMP 的多核心结构决定了其相关的功耗研究是一个至关重要的课题。
低功耗设计是一个多层次问题,需要同时在操作系统级、算法级、结构级、电路级等多个层次上进行研究。每个层次的低功耗设计方法实现的效果不同——抽象层次越高,功耗和温度降低的效果越明显。
当前 Intel 的 CPU 的功耗相对较低,得益于先进的英特尔构架和 45 纳米、32 纳米制程工艺,同时 Intel 还专门为 CPU 开发了不少节能技术,比如 C6 深度节能技、英特尔智能功效管理 和主动管理技术 等等,Intel 在移动 CPU 市场,更是凭借超低电压处理器(ULV)和凌动(Atom)系列处理器,遥遥领先于对手。
存储器墙
为了使芯片内核充分地工作,最起码的要求是芯片能提供与芯片性能相匹配的存储器带宽,虽然内部 Cache 的容量能解决一些问题,但随着性能的进一步提高,必须有其他一些手段来提高存储器接口的带宽,如增加单个管脚带宽的 DDR、DDR2、QDR、XDR 等。同样,系统也必须有能提供高带宽的存储器。所以,芯片对封装的要求也越来越高,虽然封装的管脚数每年以 20%的数目提升,但还不能完全解决问题,而且还带来了成本提高的问题,为此,怎样提供一个高带宽,低延迟的接口带宽,是必须解决的一个重要问题。
可靠性及安全性设计
随着技术革新的发展,处理器的应用渗透到现代社会的各个层面,但是在安全性方面却存在着很大的隐患。一方面,处理器结构自身的可靠性低下,由于超微细化与时钟设计的高速化、低电源电压化,设计上的安全系数越来越难以保证,故障的发生率逐渐走高。另一方面,来自第三方的恶意攻击越来越多,手段越来越先进,已成为具有普遍性的社会问题。可靠性与安全性的提高在计算机体系结构研究领域备受注目。
今后,CMP 这类处理器芯片内有多个进程同时执行的结构将成为主流,再加上硬件复杂性、设计时的失误增加,使得处理器芯片内部也未必是安全的,因此,安全与可靠性设计任重而道远。
技术意义
多核处理器代表了计算技术的一次创新。由于数字数据和互联网的全球化,商业和消费者开始要求多核处理器带来性能改进,这个重要创新就开始了;因为多核处理器比单核处理器具有性能和效率优势,多核处理器将会成为被广泛采用的计算模型。在驱动 pc 安全性和虚拟化技术的重大进程过程中,多核处理器扮演着中心作用,这些安全性和虚拟化技术的开发用于为商业计算市场提供更大的安全性、更好的资源利用率、创造更大价值。普通消费者用户也期望得到前所未有的性能,这将极大地扩展其家庭 pc 和数字媒体计算系统的使用。多核处理器具有不增加功耗而提高性能的好处,实现更大的性能/能耗比。
在一个处理器中放入两个或多个功能强大的计算核产生了一个重大的可能性。由于多核处理器能提供比单核处理器更好的性能和效率,下一代的软件应用程序很有可能是基于多核处理器而开发的。不管这些应用是帮助专业的电影公司以更少的投入和更少的时间完成更真实的电影,还是以更彻底的方法使得 pc 更自然和直观,多核处理器技术将永远改变计算世界。多核处理器表达了 amd 了解顾客需求并且开发最能满足客户要求产品的意愿。
微软多核计算的主管 Dan Reed 称,整个世界上很缺乏那些并行计算的研究人员,而一个间接的原因就是学院里对于并行计算的关注度不够,而这些学院正是下一代软件开发人员诞生的地方。越来越高的时钟频率导致应用程序的代码运行的越来越快,而对于当前多核处理器来讲这一规则虽然成立,但却有所不同。而这种不同可以做一个形象的比喻,那就是一部跑车和一辆学校的巴士。当跑车能够以很快的速度飞奔时,巴士虽然比较慢,但它可以载着更多的人前行。问题就是,简单地在计算机 CPU 上增加多个核并不能增加传统应用程序代码的运行速度,这一结果是根据一项来自于 Forrester 研究公司的报告得出的。换句话说,复杂的工作需要拆分来填充这辆巴士上的空座位。Forrester 的报告还谈到:同时,当前四核处理器会激发更多的多处理器设计的思想,我们期待着 2009 年 x86 的服务器使用 64 个处理器核,并且 2012 年台式机也可以实现这一梦想。
使得芯片的制造商以及主要的板级应用的软件厂商意识到多核编程的机遇和挑战。
技术种类
单芯片多处理器(CMP)与同时多线程处理器(SimultaneousMultithreading,SMT),这两种体系结构可以充分利用这些应用的指令级并行性和线程级并行性,从而显著提高了这些应用的性能。从体系结构的角度看,SMT 比 CMP 对处理器资源利用率要高,在克服线延迟影响方面更具优势。CMP 相对 SMT 的最大优势还在于其模块化设计的简洁性。复制简单设计非常容易,指令调度也更加简单。同时 SMT 中多个线程对共享资源的争用也会影响其性能,而 CMP 对共享资源的争用要少得多,因此当应用的线程级并行性较高时,CMP 性能一般要优于 SMT。此外在设计上,更短的芯片连线使 CMP 比长导线集中式设计的 SMT 更容易提高芯片的运行频率,从而在一定程度上起到性能优化的效果。总之,单芯片多处理器通过在一个芯片上集成多个微处理器核心来提高程序的并行性。每个微处理器核心实质上都是一个相对简单的单线程微处理器或者比较简单的多线程微处理器,这样多个微处理器核心就可以并行地执行程序代码,因而具有了较高的线程级并行性。由于 CMP 采用了相对简单的微处理器作为处理器核心,使得 CMP 具有高主频、设计和验证周期短、控制逻辑简单、扩展性好、易于实现、功耗低、通信延迟低等优点。此外,CMP 还能充分利用不同应用的指令级并行和线程级并行,具有较高线程级并行性的应用如商业应用等可以很好地利用这种结构来提高性能。
技术应用
并行计算技术是云计算的核心技术,也是最具挑战性的技术之一。多核处理器的出现增加了并行的层次性能使得并行程序的开发比以往更难。而当前业内并无有效的并行计算解决方案,无论是编程模型、开发语言还是开发工具,距离开发者的期望都有很大的差距。自动的并行化解决方案在过去的 30 年间已经被证明基本是死胡同,但传统的手工式的并行程序开发方式又难以为普通的程序员所掌握。Intel、微软、SUN、Cray 等业内巨头正投入大量人力物力进行相关的研究,但真正成熟的产品在短期内很难出现。可扩展性是云计算时代并行计算的主要考量点之一,应用性能必须能随着用户的请求、系统规模的增大有效的扩展。当前大部分并行应用在超过一千个的处理器(核)上都难以获得有效的加速性能,未来的许多并行应用必须能有效扩展到成千上万个处理器上。这对开发者是巨大的挑战。
产品应用
从 Power、UltraSPARC T1、安腾到双核 Opteron、至强 Xeon,各个领域都显示出,多核处理器计算平台势必成为服务器的主流或者说是强势计算平台,但这只是上游硬件厂商的乐观预计。并不是所有的操作系统和应用软件都做好了迎接多核平台的准备,尤其是在数十年来均为单一线程开发应用的 x86 服务器领域。微软软件架构师 HerbSutter 曾指出:软件开发者对多核处理器时代的来临准备不足。他说,软件开发社区认识到处理器厂商被迫采用多核设计以应对处理器速度提升带来的发热问题,但却没有清楚地了解这样的设计为软件开发带来多少额外的工作。
在过去一段长时间里,x86 系统上软件的性能随着来自 Intel 和 AMD 处理器速度越来越快而不断提高,开发者只需对现有软件程序作轻微改动就能坐观其性能在随着硬件性能的上升而不断提升。不过,多核设计概念的出现迫使软件世界不得不直面并行性(将单个任务拆分成多个小块以便分别处理之后再重新组合的能力)问题。当然,为服务器设计软件的开发者已经解决了一些此类难题,因为多核处理器和多路系统在服务器市场已经存在多年(在传统的 Unix 领域),一些运行在 RISC 架构多核多路系统上的应用程序已经被设计成多线程以利用系统的并行处理能力。但是,在 x86 领域,应用程序开发者多年来一直停留在单线程世界,生产所谓的“顺序软件”。
情况是软件开发者必须找出新的开发软件的方法,面向对象编程的兴起增加了汇编语言的复杂性,并行编程也需要新的抽象层次。另一方面,处理器设计厂商在设计产品时也应该将软件开发者考虑在内,“处理器的首要着眼点应该是可编程性,而不是速度。”Sutter 说。多核处理器要想发挥出威力,关键在于并行化软件支持,多核设计带动并行化计算的推进,而给软件带来的影响更是革命性的。
Intel 很早就通过超线程技术实现了逻辑上的双处理器系统,可以并行计算,但这不过是对处理器闲置资源的一种充分利用而已,并且这种充分利用只有在特定的条件下,尤其是针对流水线比较长且两种运算并不相互交叉的时候,才会有较高的效率,如编码解码、长期重复某种矩阵运算以及一些没有经过仔细编写的软件等。
即使 IBM 的 Power5 架构,也需要跟最新的操作系统进行融合,加上运行在其上的软件,才有可能利用并发多线程。虚拟化技术在一定程度上能够处理一些因为多核带来的问题,可以让应用软件和操作系统在透明的环境下对处理器资源进行分配和管理。
在对称多处理器方面,操作系统对资源的分配和管理并没有本质的改变,多以对称的方式进行平均分配。也就是说,在操作系统层面,当一个任务到来时,剥离成为两个并行的线程,因为线程之间需要交流以及操作系统监管,它导致的效率损失要比硬件层面大得多。并且,多数软件并没有充分考虑到双核乃至多核的运行情况,导致线程的平均分配时间以及线程之间的沟通时间都会大大增加,尤其是当线程需要反复访问内存的时候。多数操作系统还没有完全实现自由的资源分配,如 IBM 是通过 AIX 5.3L 来支持 Power5 上的虚拟化功能,才实现了资源的动态调配和划分的。
从长远来看,需要使用虚拟化技术才可能实现操作系统对任务的具体划分,这很可能改变一些通用的编程模式。
文章来自互联网,只做分享使用。发布者:小白测评,转载请注明出处:https://www.baoxiaoke.com/article/201063.html