多核处理器的方兴未艾概述.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多核处理器的方兴未艾概述

  多核处理器的横空出世,及时地缓解了现时存在的危机,且整体上又进一步提高了计算机系统的综合性能。;;  早在1975年,戈登?摩尔提出了计算机处理器的发展规律,即:“10年内,半导体芯片上集成的晶体管和电阻数量将会以每18个月翻一倍的速度增长”。这个规律虽然被摩尔先生限定在10年以内,也曾提出警告,认为“摩尔法则”无法继续有效,但是计算机硬件领域却始终致力于履行这一定律。时至今日,CPU上集成的晶体管数量应该达到数十亿之多。显然,今天的现实让人们无法不清醒,目前再继续通过增加晶体管的数量来提高计算性能已经遇到了瓶颈。;  在整体结构设计上,CMP与传统的单处理器相比,多核内部结构没有固定的组织形式,可以有很多种实现方式。通常,人们把多核处理器分为两大类:同构多核和异构多核。   计算内核相同,地位对等的称为同构多核,现在Intel和AMD的双核处理器就是同构双核处理器。计算内核不同,地位不对等的则称为异构多核,异构多核多采用“主处理核+协处理核”的设计,IBM和Sony联合研制的Cell就是典型代表。;Hydra处理器结构;  Hydra是由美国斯坦福大学于1996年研制的四核处理器结构,在当时是一项极具前瞻性的研究。它的每个核心通过总线结构实现共享二级缓存、存储器接口和I/O接口。现今被认为是同构多核的典型代表。由于最初的多核处理器集成的处理器核数量较小,所以,最大的特点就是应用总线和交换开关的方式进行互连,并且各个核的结构相似、功能也较为强大。多核发展至今,我们不妨把Hydra的这种设计看作是同构多核的始祖。;;  Cell是由IBM与Sony合作研发的多核处理器,也是第一款投入实际商用的多核处理器。它主要由PowerPC通用处理器(power processing element,PPE)和8个协处理器(synergistic processing element,SPE)组成,通过一条高速总线(EIB)进行连接。PPE是一个有二级缓存结构的64位PowerPC处理核心,可以同时提取4条指令和两种结果,负责运行基本程序和协调SPE间任务的运行;SPE是一个使用本地存储器的32位微处理器,无缓存结构,负责从事浮点运算;EIB连接PPE、SPE和外部I/O。Cell的这种不对称结构被认为是一种典型的异构多核结构,也正是这种架构为EIB和高速内存提供了足够的数据通路,3.2GHz处理器的单精度浮点运算的峰值就可以达到200GFs,而同时期英特尔同频率的Pentium4处理器的峰值仅25.6GFs。;  目前,主流的双核和四核处理器基本上都采用同构结构。随着集成核心数量的不断增加,同构多核设计面临的主要问题就是如何保持各个核心的数据一致性以及满足核心的存储访问与I/O访问需求。与同构相比,异构的优势是可以通过组织不同特点的核心来优化处理器的内部结构,从而实现处理器性能的最佳化和功耗最小化。当然,异构多核设计也面临着一些难点,比如不同的核心如何搭配,核心间任务如何分配等。;Harbin Engineering University;   多核编程比单个编程更讲究程序的架构、任务的分配以及每个处理机的负载。现在使用比较广泛的多核编程工具是面向共享存储机制的openMP。他是一种工业标准的API设计规范,可以很方便的设计新的并行应用程序或并行化现有串行应用程序。OpenMP支持C语言、C++和Fortran,同时OpenMp提供了对并行算法的高层的抽象描述,程序员可以通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。;举一个简单的小程序,例如我们想把下面的程序并行化: #includestdio.h #includestdlib.h Void Test( int n){ for( int i=0;i=10; ++i) { } printf(“%d”,n); } int main( int argc, char*argv[]){ for( int i=0;i10;i++) { Test(i); system(“pause”); } };利用openMP,将main()函数并行化处理。修改如下: #include omp.h   #include stdio.h   #include stdlib.h   Void Test (int n) { for ( int i = 0; i 10; ++i) {   }   printf(%d, , n);   }   int main(int argc, char* argv[]) {   #pragma omp parallel for   for(int i = 0; i10; ++i)  

文档评论(0)

ccx55855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档