主要参考书1.多核程序设计清华大学出版社2.多核程序设计技术-通过软件多线程提升性能ShameemAkhter著电子工业出版社3.释放多核潜能-英特尔ParallelStudio并行开发指南4.多核计算与程序设计-周伟明著网站多核程序设计第一章多核技术导论微处理器发展史微处理器第一代微处理器(4位)71年:英特尔4004,8008第二代微处理器(8位)74年:英特尔8080,8085。采用NMOS工艺,采用汇编语言、BASIC、Fortran编程,使用单用户操作系统。第三代微处理器(16位)78年:以1978年英特尔的8086出现为起点。后研制出了80286微处理器(两种运算模式:实模式和保护模式)比其前辈有显著改进:支持更大内存;能模拟内存空间;能同时运行多个任务;提高处理速度。第四代微处理器(32位)85年:运算模式包括实模式、保护模式和“虚拟86”。英特尔80386DX,80486,Pentium4…。为了提高电脑在多媒体、3D图形方面的应用能力,产生许多新指令集及技术。MMX(多媒体扩展指令集):英特尔1996年发明指令增强技术,包括57条多媒体指令,可用于对大量数据和复杂数组进行处理。SSE(SIMD流扩展指令集):是嵌套在英特尔PentiumIII处理器中的多媒体专用指令集,主要是加速CPU的3D运算能力。超线程技术:将一个实际物理处理器分成多个逻辑处理器。超线程技术支持操作系统和应用程序将多个线程调度到多个逻辑处理器上,由于执行资源是这些逻辑处理器共享的,任一时刻只能执行一个线程,必须决定两个线程如何以及何时切换执行。微处理器的多核时代2005年:英特尔全球同步首发基于双核技术桌面产品英特尔奔腾D处理器,正式揭开x86处理器多核心时代。如IntelCore2Duo和Core2Quad并行计算机在x86微处理器发展同时,人们也在进行计算机并行化的探索,又出现了并行计算机体系结构,与多核微机走了不同的道路。并行计算机出现背景:60年代初期,晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。当时出现的并行计算机多是规模不大的共享存储多处理器系统,即大型主机(Mainframe)。60年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了,在处理器内部的应用大大提高了并行计算机系统的性能。并行计算机现代计算机发展历程分为两个发展时代:串行计算时代和并行计算时代。由一组处理单元组成,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。并行计算机的两个最主要的组成部分是:计算节点节点间的通信与协作机制并行计算机体系结构的发展计算节点性能的提高节点间通信技术的改进并行计算机体系结构组成并行计算机的各个部分:计算节点(node)互连网络(interconnectnetwork)(节点间的通信与协作机制)内存(memory)内存模块与节点分离内存模块位于节点内部并行计算机的弗林分类Flynn根据指令流和数据流的不同组织方式,把计算机系统的结构分为以下四类:单指令流单数据流(SingleInstructionstreamSingleDatastream,SISD)传统的串行计算机,其硬件不支持任何形式的并行,所有指令都串行执行。单指令流多数据流(SingleInstructionstreamMultipleDatastream,SIMD)采用一个指令流同时处理多个数据流,几乎所有的计算机都以各种各样的指令集形式实现了SIMD功能。Intel处理器中实现的MMX、SSE、SSE2及SSE3扩展指令集,都能在单个时钟周期内处理多个数据单元。典型的并行计算机。多指令流单数据流(MultipleInstructionstreamSingleDatastream,MISD)只是一种理论模型,并没有投入到实际应用中。多指令流多数据流(MultipleInstructionstreamMultipleDatastream,MIMD)多个指令流分别对不同的数据流进行操作,是目前最流行的并行计算平台。例如IntelCoreDuo/Quad(英特尔酷睿双/四核处理器)。典型的并行计算机。并行计算机的弗林分类指令流(instructionstream):指机器执行的指令序列数据流(Datastream):指指令流调用的数据序列,包括输入数据和中间结果。SIMD计算机:有一个控制部件和许多处理单元。大量处理单元构成阵列,SIMD计算机也称阵列处理机。所有处理单元在控制部件的统一控制下工作控制部件向所有的处理单元广播同一条指令,所有处理单元同时执行这条指令,但每个处理单元操作的数据不同。MIMD计算机:每个处理器都有控制部件,各处理器可以独立地执行不同的指令。各处理器通过互连网络进行通信。并行计算机系统结构分类分布式存储器的SIMD处理机含有多个同样结构的处理单元(PE),通过寻径网络以一定方式互相连接。每个PE有各自的本地存储器(LM)。向量超级计算机(共享式存储器SIMD)集中设置存储器,共享的多个并行存储器通过对准网络与各处理单元PE相连。在处理单元数目不太大的情况下很理想。对称多处理器(SMP)一个计算机上汇集了一组处理器,各处理器之间共享内存子系统以及总线结构。并行计算机系统结构分类(续)并行向量处理机(PVP)有专门定制的具有很高处理能力的向量处理器。通过向量处理和多个向量处理器并行处理两条途径提高处理能力。集群计算机连接在一起的两个或多个计算机(节点)节点可以是在一起的,也可以是物理上分散而通过网络连接在一起的。片上多核处理器架构片上多核处理器(ChipMulti-Processor,CMP)就是将多个计算内核集成在一个处理器芯片中,从而提高计算能力。按计算内核的对等与否,CMP可分为同构多核和异构多核同构多核:计算内核相同,地位对等。Intel和AMD主推的处理器异构多核:计算内核不同,地位不对等,采用主处理核+协处理核的设计。IBM、索尼和东芝联手推出的Cell处理器各CPU核心间进行数据共享与同步的片上高效通信机制总线共享的Cache结构:每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。基于片上互连的结构:每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。片上多核处理器架构什么是多核处理器?两个或多个独立运行的内核集成于同一个处理器上面从物理上讲,多核是指在一个处理器芯片上封装了多个微处理器,每个微处理器有独立的控制流,有不同的内部状态,并且这多个微处理器之间没有关键资源的共享。从软件开发角度讲,指一个芯片中包含了多个执行核心,从而在正确的软件支持下,软件开发人员,可以看到并行执行了多个线程。双核处理器=一个处理器上包含2个内核多核处理器=一个处理器上包含2个或多个内核Core0Core1FrontSideBus多核处理器产生的原因并行计算机都是由多个物理处理器构成,多个线程或进程能在多个处理器上同时执行,多处理器系统支持真正意义上的并行执行。但这种方法会增加整个系统的造价。处理器芯片厂商都通过不断地提高主频来提升处理器的性能。从体系结构来看,传统的处理器体系结构技术已面临瓶颈,晶体管的集成度已超过上亿个,很难单纯地通过提高主频来提升性能。主频的提高同时也带来功耗的提高。目前主频的提升空间已经不大,这就直接促使单核转向多核各主流处理器厂商将产品战略从提高芯片的时钟频率转向多线程、多内核。多核处理器产生的原因为什么要采用多核技术?中断逻辑CacheCPU状态执行单元中断逻辑CacheCPU状态执行单元中断逻辑CacheCPU状态执行单元中断逻辑CPU状态Cache执行单元中断逻辑CPU状态(a)单核结构(b)多处理器结构(c)超线程技术单核结构、多处理器结构及多核结构之间简单对比超线程技术只有一个实际的物理处理器,单个处理器被分成许多部分来使用,其中执行部件被各线程共享,其他部分可以在各线程中分别复制使用。超线程技术中的线程执行并不是真正意义上的并行。中断逻辑CPU状态Cache执行单元中断逻辑CPU状态Cache执行单元中断逻辑CPU状态中断逻辑CPU状态执行单元执行单元Cache(d)多核体系结构单核结构、多处理器结构及多核结构之间简单对比(e)共享cache的多核体系结构多核处理器对软件开发的要求软件开发在多核环境下的核心是多线程开发软件实现上需采用多线程在硬件上也采用多线程技术。只有与多核硬件相适应的软件,才能真正发挥多核的性能多核处理器对软件的要求包括对多核操作系统的要求(进程分配时将进程分配到合理的物理核上)对应用软件的要求操作系统对多核处理器的支持方法进程的分配、调度进程的分配将进程分配到合理的物理内核上,不同内核在共享性和历史运行情况下都是不同的,有的物理内核能够共享二级缓存、有的不共享,如果将有数据共享的进程分配给有共享二级缓存的核上,将会大大提升性能;进程调度涉及到很多问题,例如负载均衡、实时性、cache一致性等等。在多核情况下,有很多核可以被使用,如果系统中有多个进程需要分配,则可以将它们均匀的分配到各个核,或是一起分配到一个核,或者按照一定的算法进行分配。操作系统对多核处理器的支持方法多核调度算法:对任务分配进行优化是同一应用程序的任务尽量在一个核上执行,以便达到共享数据的任务能够尽量在一个核上进行,而共享数据量少或没有的任务尽量在不同核上进行。这样做的目的可以显著的降低cache的缺失率,进而在很大程度上提高了系统的整体性能对任务的共享数据优化由于CMP体系结构共享二级缓存,可以考虑改变任务在内存中的数据分布,使任务在执行时尽量增加二级缓存的命中率对任务的负载均衡优化当任务在调度时,出现了负载不均衡,考虑将较忙处理器中与其他任务最不相关的任务迁移,已达到数据的冲突量减小操作系统对多核处理器的支持方法输入输出系统存储管理与文件系统虽然多核近两年才兴起,但是操作系统对多核的支持并不难解决,传统的通用的操作系统都是支持多任务执行的,对单核处理器是通过分时处理的,即把CPU的运算时间划分成长短基本相同的时间片,轮流分配给各个任务,从而实现单个CPU执行多个任务的能力。目前为止,世界上没有针对CMP体系结构多核操作系统一个成熟的调度算法的实现。虽然Windows与Linux操作系统可以作为CMP多核体系结构的操作系统,但它们对多核的支持并不是直接对CMP多核体系结构的支持,实际上是针对SMP体系的支持。多核平台上的应用软件开发操作系统对多核的支持,只能提供任务一级的并行。多核平台上的应用软件开发不同于以前的软件编写思想首先设计者必须认识底层多核的存在把软件设计成多进程或多线程并将这些进程或线程与底层的多核处理器绑定真正使程序的不同部分同时并行运行。如何将软件分成多个进程或线程,发挥多核的性能是本门课的重点。Windows多线程编程OpenMP多线程编程谢谢