您好,欢迎访问三七文档
1第13章多线程与多核编程多任务的并发执行会用到多线程(multithreading),而CPU的多核(mult-core)化又将原来只在巨型机中才使用的并行计算(parallelcomputing)带入普通PC应用的多核程序设计(multi-coreprogramming)中。13.1进程与线程进程(process)是执行中的程序,线程(thread)是一种轻量级的进程。13.1.1进程与多任务现代的操作系统都是多任务(multitask)的,即可同时运行多个程序。进程(process)是位于内存中正被CPU运行的可执行程序。参见图15-1。图15-1程序与进程目前的主流计算机采用的都是冯·诺依曼(JohnvonNeumann)体系结构——存储程序计算模型,程序(program)就是在内存中顺序存储并以线性模式在CPU中串行执行的指令序列。对于传统的单核CPU计算机,多任务操作系统的实现是通过CPU分时(time-sharing)和程序并发(concurrency)完成的。即在一个时间段内,操作系统将CPU分配给不同的程序,虽然每一时刻只有一个程序在CPU中运行,但是由于CPU的速度非常快,在很短的时间段中可在多个进程间进行多次切换,所以用户的感觉就像多个程序在同时执行,我们称之为多任务的并发。13.1.2进程与线程程序一般包括代码段、数据段和堆栈,对具有GUI(GraphicalUserInterfaces,图形用户界面)的程序还包含资源段。进程(process)是应用程序的执行实例,即正在被执行的程序。每个进程都有自己的虚拟地址空间,并拥有操作系统分配给它的一组资源,包括堆栈、寄存器状态等。线程(thread)是CPU的调度单位,是进程中的一个可执行单元,是一条独立的指令执行路径。线程只有一组CPU指令、一组寄存器和一个堆栈,它本身没有其他任何资源,而是与拥有它的进程共享几乎一切,包括进程的数据、资源和环境变量等。线程的创建、维护和管理给操作系统的负担比进程要轻得多,所以才叫轻量级的进程(lightweightprocess)。一个进程可以拥有多个线程,而一个线程只能属于一个进程。每个进程至少包含一个线程——主线程,它负责程序的初始化工作,并执行程序的起始指令。随后,主线程可为执行各种不同的任务而分别创建多个子线程。一个程序的多个运行,可以通过启动该程序的多个实例(即多个进程)来完成,也可以程序=进程(内存中)可执行文件(磁/U/光盘上)运行2只运行该程序的一个实例(一个进程),而由该进程创建多个线程来做到。显然后者要比前者更高效,更能节约系统的有限资源。这对需要在同一时刻响应成千上万个用户请求的Web服务器程序和网络数据库管理程序等来说是至关重要的。多线程图示其中:A为主线程,B、C、D皆为A的子线程不同并行任务中的同名子线程可以互不相同13.1.3多线程编程的困难因为同一程序(进程)的多个线程共享同样的数据和资源,所以会出现同步、排队和竞争等问题,可能导致死锁、无限延迟和数据竞争等现象的发生,这些都需要我们在程序中加以解决。MFC虽然提供了一个线程类和若干同步类,但是仍然属于线程的低级编程,既困难又繁琐。利用.NET框架类库中的线程命名空间下的线程类,则可以简化线程编程。13.5.2多核处理器多核,即多微处理器核心,是将两个或更多的独立处理器核封装在一个集成电路(IC)芯片中的一种方案。一般说来,多核心微处理器允许一个计算设备,在不需要将多个处理器核心分别进行独立的物理封装情况下,可以执行某些形式的线程级并行处理(Thread-LevelParallelism,TLP)。这种形式的TLP,通常被认为是芯片级别的多处理(Chip-levelMultiProcessing,CMP)。31.多核构架按硬件层次划分,多核的种类有:芯片级(多核芯片):片上多核处理器(ChipMulti--Processor,CMP)就是将多个计算内核集成在一个处理器芯片中,从而提高计算能力。按计算内核的对等与否,CMP可分为同构多核(如Intel和Sun)和异构多核(如IBM)。CPU核心数据共享与同步,包括总线共享Cache结构(每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。例如Intel的Core2Due和Corei7)和基于片上互连的结构(每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。例如Intel的PentiumD和Core2Quad)。参见下图:IntelCore2Due的平面和逻辑结构图板级:在一块主板上集成多个(多核)芯片。参见下图:机架级:将多个含(多核)处理器的主板置于同一机箱内,主板之间利用专用芯片和线路进行通信。网络级(网格):将多个(多核)主机用(局域或互联)网连接在一起,构成分布式多核系统。我们下面只讨论CMP级的多核,并且以Intel公司的Core系列微处理器为主。2.体系结构下面简单介绍一般的超线程与多核的体系结构,以及主流的单核和多核处理器——Intel公司的Pentium、PentiumD、Core2和Corei7的逻辑结构及其基础微架构。多核和超线程下面是单核、多核和超线程处理器的体系结构(architecture)示意图:浮点处理单元执行核一级高速缓存浮点处理单元执行核一级高速缓存二级高速缓存系统总线4下面是分别单核与多核处理器的芯片结构图:执行单元CacheCPU状态中断逻辑单核单线程CPU执行单元Cache单核双线程CPUCPU状态中断逻辑CPU状态中断逻辑执行单元Cache独立cache的双核双线程CPUCPU状态中断逻辑CPU状态中断逻辑执行单元Cache执行单元L1Cache双核四线程CPUCPU状态中断逻辑CPU状态中断逻辑CPU状态中断逻辑CPU状态中断逻辑执行单元共享cache的双核双线程CPUCPU状态中断逻辑CPU状态中断逻辑Cache执行单元执行单元L1CacheL2Cache5奔腾处理器下面是IntelPentium(奔腾)微处理器的功能结构图:奔腾D处理器下面是IntelPentiumD微处理器及其配套芯片组的功能结构图:IntelCore2与IntelCore微架构下面是酷睿2双核处理器的逻辑结构图:6Core2Due处理器逻辑结构图其中:ROM=ReadOnlyMemory只读存贮器、ROB=、FPU=FloatPointUnit浮点运算单元、ALU=ArithmeticLogicalUnit算术逻辑部件、TLB=TranslationLookasideBuffer转译后备缓冲器(转址旁路缓存/页表缓存)、LD=、ST=、D-TLB=Data-TLB数据TLB酷睿2处理器是基于IntelCore微架构(microarchitecture)的,下面是其逻辑结构图:IntelCore微架构逻辑结构图7IntelCorei7与IntelNehalem微架构下面是酷睿i7四核处理器的平面结构图:Corei7处理器平面结构图其中:MemoryController=内存控制器、Misc=其他、Core=核、IO=I/O=输入/输出Queue=队列、QPI=QuickPathInterconnct=快速通道互连、SharedL3Cache=共享三级高速缓存可见四核Corei7的基本构成:有超大容量的三级高速缓存、I/O控制单元、内存控制器电路和两条QPI总线连接。不同级别的Nehalem处理器将会有不同条数的QPI连接,普通桌面处理器通常只有一条QPI连接,工作站以上级别的将会有多条QPI连接。Corei7处理器使用的是Nehalem微架构,而Nehalem采用了可扩展架构。主要是每个处理器单元均采用了组装模块化设计,组件包括:核心数量、SMT功能、L3缓存容量、QPI连接数量、IMC数量、内存类型、内存通道数量、整合GPU、能耗和时钟频率等,这些组件均可自由组合,以满足多种性能需求,比如可以组合成双核心、四核心甚至八核心的处理器,而且组合多个QPI(QuickPathInterconnct,快速通道互连)连接更可以满足多路服务器的需求。整合了GPU的Nehalem架构处理器Havendale可能在今年第四季度生产。8模块化设计的可伸缩Nehalem微架构其中:IA=IntelArchitecture英特尔架构、IGP=IntegratedGraphicsProcessor集成图形处理器、QPI=QuickPathInterconnct快速通道互连、IMC=IntegratedMemoryController集成内存控制单个执行核心的基本构成其中:ExecutionUnits=执行单元、L1DataCache=一级数据高速缓存、MemoryOrdering&Execution=内存排序与执行、L2Cache&InterruptServicing=二级高速缓存与中断维护、Paging=页面调度、Out-of-OrderScheduling&Retirement=乱序调度与退役、InstructionDecode&Microcode=指令解码与微码、BranchPrediction=分支预测、InstructionFetch&L1Cache=取指令与一级高速缓存在每个执行核心中,包括乱序执行单元和完整的逻辑电路,有了这些才算是一个完整的高级处理核心,另外还有L1、L2缓存等电路,L1、L2缓存的面积并不大,大概也就1/4,像解码单元、分支预测逻辑判断单元、内存排序和页处理单元也占了不少面积。Nehalem的改进是全方位的,比如改善循环监测机制,Nehalem的LSD能够缓冲28个微指令(Core为18),能处理更多的分支指令。Nehalem中进一步添加了指令融合机制,支持目前所有Core中的宏指令技术,更具备有Core不支持的64位宏融合模式,在处理64位代码的时候,将会有明显的性能改善。Nehalem还提升分支预测能力,搭载多级分支预测机制,提供了更高的性能表现。Nehalem同时增强并行计算功能,在Core体系架构上,并行计算可以同时处理96个微指令,Nehalem处理器将乱序窗口尺寸扩大了33%,这样就能同时处理128个微指令。参见下图:9IntelNehalem微架构逻辑结构图4.并行性多核中的并行性可以分成指令级并行和线程级并行两种:指令级并行(Instruction-LevelParallelism,ILP)当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行的。这种指令序列中存在的潜在并行性称为指令级并行,是在机器指令级并行。通过指令级并行,处理器可以调整流水线指令重执行顺序,并将它们分解成微指令,能够处理某些在编译阶段无法知道的相关关系(如涉及内存引用时),并简化编译设计;能够允许一个流水线机器上编译的指令,在另一个流水线上也能有效运行。指令级并行能使处理器速度迅速提高。线程级并行(ThreadLevelParallelism,TLP)10线程级并行将处理器内部的并行由指令级上升到线程级,旨在通过线程级的并行来增加指令吞吐量,提高处理器的资源利用率。TLP处理器的中心思想是:当某一个线程由于等待内存访问结构而空闲时,可以立刻导入其他的就绪线程来运行。处理器流水线就能够始终处于忙碌的状态,系统的处理能力提高了,吞吐量也相应提升。服务器可以通过每个单独的线程为某个客户服务(Web服服务器,数据库服务器)。单核超标量体系结构处理器不能完全实现TLP,而多核架构则可以完全实现TLP,解决了以上问题。现在业界普遍认为,TLP将是下一代高性能处理器的主流体系结构技术。5.特点MIMD架构——多核处理器是一种特殊的多处理器,所有的处理器都在同一块芯片上,属于MIMD架构:不同的核执行不同的线程(多指令),在内存的不同部分操作(多数据)。多核是一个共享内存的多处理器:所有的核共享同一个内存。但可以有各自的一、二级高速缓存。同步多线程(S
本文标题:多线程与多核编程
链接地址:https://www.777doc.com/doc-3602839 .html