《多核架构及编程技术.ppt》由会员分享,可在线阅读,更多相关《多核架构及编程技术.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、多核架构及编程技术魏博文数计学院学号:1315063011多核所属体系-并行计算体系并行计算机是由一组处理单元组成的,通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。20世纪60年代初,晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。这些技术导致了并行计算机的出现。这一时期的并行计算机多是规模不大的共享存储器系统,例如IBM360。二十世纪70年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了。这些并行特性的应用大大提高了并行计算机系统的性能。并行计算机的分类Flyrm根据指令流和数据流的不同组织方式,把计算机系统的结构分为以
2、下4类:单指令流单数据流(Single Instruction stream Single Data stream,SISD)单指令流多数据流(Single Instruction stream Multiple Data stream,SIMD)多指令流单数据流(Multiple Instruction stream Single Data stream,MISD)多指令流多数据流(Multiple Instruction stream Multiple Data stream,MIMD)指令流是指机器执行的指令序列,数据流是指指令流调用的数据序列,包括输入数据和中间结果。并行是个广义的概念
3、,并行是一个广义的概念,根据实现层次的不同,可以分为几种方式。从系统结构的角度,并行计算机目前有以下几种:1)分布式存储器的SIMD处理机。含有多个同样结构的处理单元(PE),通过寻径网络以一定方式互相连接。2)向量超级计算机(共享式存储器SIMD)。集中设置存储器,共享的多个并行存储器通过对准网络与各PE相连。3)对称多处理器(SMP)。一个计算机上汇集了一组处理器,各处理器之间共享内存子系统以及总线结构。4)并行向量处理机(PVP)。有专门定制的向量处理器,通过向量处理和多个向量处理器并行处理两条途径来提高处理能力。5)集群计算机。随着微处理器和网络技术的进步而逐渐发展起来的,它主要用来解
4、决大型计算问题。是一种并行或分布式处理系统,由很多连接在一起的独立计算机组成,像一个单集成的计算机资源一样协同工作。6)网格计算是伴随着互联网技术而迅速发展起来的,专门复杂科学计算的新型计算模式。多核处理器 并行计算机与超级计算机技术,为多核计算机的出现奠定了基础。集成电路的进步也为多核芯片提供了物理条件。多内核是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。多核技术的开发源于工程师们认识到,仅仅提高单核芯片的速度会产生过多热量且无法带来相应的性能改善,先前的处理器产品就是如此。他们认识到,在先前产品中以那种速率,处理器产生的热量很快会超过太阳表面。即便是没有热量问题,其性价比也令人难
5、以接受,速度稍快的处理器价格要高很多。现代计算机-转向多内核方向发展的原因从功耗角度看多核美国IT公司多核处理器的发展多核处理器架构下几个显著的优点*控制逻辑简单:相对超标量微处理器结构和超长指令字结构而言,单芯片多处理器结构的控制逻辑复杂性要明显低很多。*高主频:由于单芯片多处理器结构的控制逻辑相对简单,包含极少的全局信号,因此线延迟对其影响比较小,因此,在同等工艺条件下,单芯片多处理器的硬件实现要获得比超标量微处理器和超长指令字微处理器更高的工作频率。*低通信延迟:由于多个处理器集成在一块芯片上,且采用共享Cache或者内存的方式,多线程的通信延迟会明显降低,这样也对存储系统提出了更高的要
6、求。*低功耗:通过动态调节电压频率、负载优化分布等,可有效降低CMP功耗。*设计和验证周期短:微处理器厂商一般采用现有的成熟单核处理器作为处理器核心,从而可缩短设计和验证周期,节省研发成本。多核架构下的编程技术多核架构下的多线程程序设计与传统的单核下的多线程程序设计有着一定的差别,在单CPU下,是多个线程在同一个CPU上并发地执行,而在多核下,则是由多个线程在多个核上并行地执行。目前的程序设计中对于多核的利用并没有达到预期的效果。要做到这一点,就必须将应用程序看作是众多相互依赖的任务的集合,将应用程序划分成多个独立的任务,并确定这些任务之间的相互依赖关系,这就称为分解(decompositio
7、n)。分解的类别*任务分解:对应用程序根据其执行的功能进行分解的过程称为任务分解阳(taskdecomposition)。根据这种方法,就能够对众多的独立的任务进行分类。如果其中两个任务能够同时运行,那么开发人员就应该对其进行调度,形成二者之间的并行执行。*数据分解:数据分解也称为数据级并行(data-level parallelism)。是将应用程序根据各个任务所处理的数据而非按任务来进行分解的方法,即以数据为中心。一般而言,能够按照数据分解方式进行分解的应用程序都包含多个线程,这些线程分别对不同的数据对象执行相同的操作。*数据流分解:在很多情况下,当对一个问题进行分解时,关键问题不在于采用
8、一些什么任务来完成这个工作,而在于数据在这些任务之间是如何流动的。这个时候就要采用数据流分解方式,如典型的生产者消费者问题。多核下的编程模型-OpenMP和PFXOpenMP(Open Multi-Processing)是用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive),支持的编程语言包括C语言、C+和Fortran。OpenMP提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMP时,
9、程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。OpenMP的第一个标准于1997正式发表,目前已经有面向Fortran、CC+的编程接口规范OpenMP基于Fork-Join模型,将程序划分为并行区和串行区,不同处理器间通过共享变量完成数据交换。在最新3.0版本之前一般面向循环结构的并行化,在3.0版本之后加入了一个称为任务处理的新功能,大大扩展了OpenMP的使用范围。微软.NET4的PFX 面对程序设计中的并行趋势,为了降低开发者进行并行程序设计的难度,提高开发者的生产率,微软在NET 4中加入了“并行扩展”(PFX,Parallel Ex
10、tensions for theNET Framework)。主要包括以下几个部分:任务并行库(TPL,Task Parallel Library):将开发并行程序的抽象级别从低级别的“线程(thread)”提升到高级别的“任务(Task),开发人员从而只需规定好计算机要执行的任务,然后由.NET去管理。这一并行库包含了数据的并行和任务的并行。并行语言集成查询(PLINQ,Parallel Language Integrated Query)这是.NET 3.0引入的LINQ的升级“产品”,让LINQ可以并行执行。只是目前只针对LINQ to Object有效,也就是说可以并行的查询和处理内存
11、中的数据对象。Coordination Data Structures(CDS)主要是用于对并行工作间的协作和状态共享提供支持,包括一系列因满足线程安全而无需加锁保护的常用数据结构,比如线程安全的队列、堆栈等。两种模型对比 OpenMP通过在所支持的编程语言中加入特定的编译指令,使得实现了OpenMP标准的编译器可以根据这些编译指令生成相应的并行代码。这种实现方式的好处在于:一旦编译器不支持这些编译指令,或者在编译时选择关掉并行开关,那么程序还可以按照串行的方式执行。但缺点在于:这样做就不得不为每种支持的编程语言设定特定的编译指令,而且需要修改所有的现有编译器,这个工作量将会非常巨大。PFX采用了另一种实现方式,他将自身以函数库的形式作为.NET平台的一个有机组成部分,供应用程序调用。这样的设计有很多好处:使用PFX编写并行程序时,所有代码会被直接编译为对PFX函数库调用的IL指令,整个编译过程同编译标准的.NET应用程序没有任何区别。这样以来,对于像.NET这样跨语言的平台,构建于其上的各种语言就可以很方便的调用PFX,并且不需要对这些语言的编译器进行改变。To Be Continue.
限制150内