多核多线程技术_第1页
多核多线程技术_第2页
多核多线程技术_第3页
多核多线程技术_第4页
多核多线程技术_第5页
已阅读5页,还剩410页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多核程序设计

参考资料:1.多核系列教材编写组.多核程序设计.清华大学出版社,2007.92.DavidB.Kirk,Wen-meiW.Hwu著.陈曙晖,熊淑华译.大规模并行处理器编程实践.清华大学出版社,2010.93.MauriceHerlihy,NirShavit著.金海,胡侃译.多处理器编程的艺术.机械工业出版社,2009.84.RichardGerber,AartJ.C.Bik,KevinB.Smith等著,王涛,单久龙,孙广中译.软件优化技术——IA-32平台的高性能手册(第2版)

.电子工业出版社,2007.4多核程序设计

电子书及资料下载:

/zh-cn/articles/32067多核程序设计

第一章多核技术导论微处理器发展史1945年,世界上第一台全自动电子数字计算机ENIAC计算机的发展按照硬件工艺可以分为第一代(1946~1958):电子管数字计算机。第二代(1958~1964):晶体管数字计算机。第三代(1964~1971):集成电路数字计算机。第四代(1971年以后):大规模集成电路数字计算机。微处理器第一代微处理器(4位):英特尔4004,8008第二代微处理器(8位):采用NMOS工艺,采用汇编语言、BASIC、Fortran编程,使用单用户操作系统。如英特尔8080,8085。第三代微处理器(16位):以1978年英特尔的8086出现为起点。第四代微处理器(32位):运算模式包括实模式、保护模式和“虚拟86”。英特尔80386DX,80486,Pentium4…微处理器发展史微处理器发展史微处理器发展史并行计算机由一组处理单元组成,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。出现背景:60年代初期,晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。出现规模不大的共享存储多处理器系统,即大型主机(典型代表:IBM360)。60年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了,在处理器内部的应用大大提高了并行计算机系统的性能。两个最主要的组成部分计算节点节点间的通信与协作机制并行计算机的弗林分类Flynn根据指令流和数据流的不同组织方式,把计算机系统的结构分为以下四类:单指令流单数据流(SingleInstructionstreamSingleDatastream,SISD)单指令流多数据流(SingleInstructionstreamMultipleDatastream,SIMD)多指令流单数据流(MultipleInstructionstreamSingleDatastream,MISD)多指令流多数据流(MultipleInstructionstreamMultipleDatastream,MISD)并行计算机的弗林分类并行计算机系统绝大部分为MIMD系统,包括:并行向量机(PVP,ParallelVectorProcessor);对称多处理机(SMP,SymmetricMultiprocessor);大规模并行处理机(MPP,MassivelyParallelProcessor);机群(Cluster);分布式共享存储多处理机(DSM,DistributiedSharedMemory)并行计算机从系统结构角度分类分布式存储器的SIMD处理机含有多个同样结构的处理单元(PE),通过寻径网络以一定方式互相连接。每个PE有各自的本地存储器(LM)。向量超级计算机(共享式存储器SIMD)集中设置存储器,共享的多个并行存储器通过对准网络与各处理单元PE相连。在处理单元数目不太大的情况下很理想。对称多处理器(SMP)一个计算机上汇集了一组处理器,各处理器之间共享内存子系统以及总线结构。并行向量处理机(PVP)使用定制的高带宽网络将向量处理器连向共享存储器模块使用大量的向量寄存器和指令缓冲器集群计算机由许多连在一起的独立计算机组成,像一个单独集成的计算机资源一样协同工作,用来解决大型计算问题。并行计算机从系统结构角度分类对称多处理共享存储并行机(SMP)内存模块和处理器对称地分布在互联网络的两侧,内存访问属典型的均匀访问模型。并行计算机从系统结构角度分类SMP主要特征对称共享存储系统中任何处理器均可直接访问任何存储模块中的存储单元和I/O模块,且访问的延迟、带宽和访问成功的概率是一致的。各个处理器之间的地位等价,操作系统可在任意处理器上运行。单一的操作系统映像全系统只有一个操作系统驻留在共享存储器中,它根据各个处理器的负载情况,动态地分配各个进程到各个处理器,并保持各处理器间的负载平衡。局部高速缓存cache及其数据一致性每个处理器均配备局部cache,它们可以拥有独立的局部数据,但是这些数据必须与存储器中的数据保持一致。低通信延迟各个进程通过读/写操作系统提供的共享数据缓存区来完成处理器间的通信,其延迟通常小于网络通信的延迟。共享总线带宽所有处理器共享总线的带宽,完成对内存模块和I/O模块的访问。支持消息传递、共享存储并行程序设计并行计算机从系统结构角度分类SMP典型代表SGIPOWERChallengeXL系列并行机(可扩展至36个MIPSR10000微处理器)。COMPAQAlphaserver84005/440(含12个Alpha21264微处理器)。•HP9000/T600(含12个HPPA9000微处理器)。•IBMRS6000/R40(含8个RS6000微处理器)。并行计算机从系统结构角度分类分布共享存储并行机(DSM)内存模块局部在各个结点内部,并被所有结点共享。这样,可以较好地改善对称多处理共享存储并行机的可扩展能力并行计算机从系统结构角度分类DSM主要特征

以结点为单位,每个结点包含一个或多个CPU,每个CPU拥有自己的局部cache,并共享局部存储器和I/O设备,所有结点通过高性能互联网络相互连接;物理上分布存储:内存模块分布在各结点中,并通过高性能互联网络相互连接。单一的内存地址空间:所有这些内存模块都由硬件进行统一编址,并通过互联网络连接形成了并行机的共享存储器。非一致内存访问(NUMA)模式:由于远端访问必须通过高性能互联网络,而本地访问只需直接访问局部内存模块,因此,远端访问的延迟一般是本地访问延迟的3倍以上。单一的操作系统映像:用户只看到一个操作系统,它可以根据各结点的负载情况,动态地分配进程。并行计算机从系统结构角度分类DSM主要特征

基于cache的数据一致性:通常采用基于目录的cache一致性协议来保证各结点的局部cache数据与存储器中数据的一致性。低通信延迟与高通信带宽:专用的高性能互联网络使得结点间的延迟很小,通信带宽可以扩展。DSM并行机可扩展到数百个结点,能提供每秒数千亿次的浮点运算性能。支持消息传递、共享存储并行程序设计。并行计算机从系统结构角度分类DSM典型代表

SGIOrigin–2000、SGIOrigin3800、SGIAltix并行计算机从系统结构角度分类大规模并行机系统(MPP)大规模并行机系统是典型的分布存储系统。并行计算机从系统结构角度分类MPP典型特征

由数百个乃至数千个计算结点和I/O结点组成,每个结点相对独立,并拥有一个或多个微处理器。这些结点配备有局部cache,并通过局部总线或互联网络与局部内存模块和I/O设备相连接。这些结点由局部高性能网卡(NIC)通过高性能互联网络相互连接。它一般采用由多种静态拓扑结构耦合而成的混合拓扑结构,其通信延迟和通信带宽均明显优于机群互联网络。MPP的各个结点均拥有不同的操作系统映像。一般情况下,用户可以将作业提交给作业管理系统,由它负责调度当前最空闲、最有效的计算结点来执行该作业。各个结点间的内存模块相互独立,且不存在全局内存单元的统一硬件编址。仅支持消息传递或者高性能Fortran并行程序设计,不支持全局共享的OpenMP并行程序设计模式。并行计算机从系统结构角度分类机群(cluster)有三个明显的特征

系统由商用结点构成,每个结点包含2-4个商用微处理器,结点内部共享存储。采用商用机群交换机连接结点,结点间分布存储。在各个结点上,采用机群Linux操作系统、GNU编译系统和作业管理系统。片上多核处理器架构片上多核处理器(ChipMulti-Processor,CMP)就是将多个计算内核集成在一个处理器芯片中,从而提高计算能力。按计算内核的对等与否,CMP可分为同构多核和异构多核CPU核心数据共享与同步的通信机制:总线共享Cache结构:每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。基于片上互连的结构:每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。给程序开发者带来的挑战典型多核芯片架构芯片组对多核的支持——固件固件是一种嵌入到硬件设备中的软件。它通常烧写在flash等介质中,可以被当作一个二进制映像文件由用户从硬件设备中调用。固件是在集成电路只读存储器中的计算机程序,是可擦写可编程芯片,其上的程序可以通过专门的外部硬件进行修改,但是不能被一般的应用程序改动。芯片组对多核的支持——固件(续)BIOS(BasicInput/OutputSystem)作为系统硬件和操作系统之间的抽象层,主要用来初始化和配置系统的硬件,启动操作系统以及提供对系统设备底层的通讯。BIOS是连接CPU、芯片组和操作系统的固件,是IBM兼容计算机中启动时调用的固件代码。由两部分组成:上电自举即POST(PowerOnSelfTest)和在线的中断服务(主要由legacy操作系统使用)。计算机加电时BIOS从flash、PROM或是EPROM中启动并完成初始化,进行加电自检,对硬盘,内存,显卡,主板等硬件进行扫描检查,然后它将自己从BIOS内存空间中解压到系统的内存空间中,并开始从那里运行。正在被以EFI(ExtensibleFirmwareInterface,可扩展固件接口)为代表的新一代技术所取代。芯片组对多核的支持——固件(续2)EFI(可扩展固件接口)在操作系统与平台固件之间的软件接口。EFI规范定义的接口包括包含平台

信息的数据表和启动时及启动后的

服务。EFI启动管理器被用来选择装载操

作系统,不再需要专门的启动装载

器机制辅助。Framework是一种固件的架构,

它是EFI固件接口的一种实现,用

来完全替代传统的BIOS。EFI对多核支持在Framework中定义了两类处理器BSP(bootstrapprocessor),执行EFI的初始化代码,设置APIC环境,建立系统范围的数据结构,开始并初始化AP。AP(applicationprocessor),在系统上电或重启之后,AP会自己进行一个简单的设置,然后就等待BSP发出Startup信号。Framework在多核计算机中初始化过程如下:SEC:从实模式切换到保护模式,处理不同的重启事件、对每个处理器进行缓存设置。PEI:做尽量少的硬件初始化,而把更多的留给DXE。DXE:对所有可用的硬件设备进行初始化,为建立控制台和启动操作系统提供必要的服务。BDS:建立所需的控制台设备,在输出控制台上显示用户界面。当系统最后选择启动到操作系统时,EFI需要提交包括处理器在内的有关信息。操作系统对多核处理器的支持方法调度与中断对任务的分配进行优化。使同一应用程序的任务尽量在一个核上执行。对任务的共享数据优化。由于CMP体系结构共享二级缓存,可以考虑改变任务在内存中的数据分布,使任务在执行时尽量增加二级缓存的命中率。对任务的负载均衡优化。当任务在调度时,出现了负载不均衡,考虑将较忙处理器中与其他任务最不相关的任务迁移,以达到数据的冲突量小。输入输出系统多核体系处理器中,必须将中断处理分发给一组核处理。存储管理与文件系统库函数做成非阻塞调用方式(需要保证数据同步的机制)使用多线程内存分配操作系统对多核处理器的支持方法多核程序设计

第二章并行计算基础并行和并发如果某个系统支持两个或多个动作(Action)同时存在,那么这个系统就是一个并发系统如果某个系统支持两个或多个动作同时执行,那么这个系统就是一个并行系统并发程序可同时拥有两个或多个线程。如果程序能够并行执行,则一定是运行在多核处理器上,每个线程都将分配到一个独立的处理器核上。“并行”概念是“并发”概念的一个子集什么是并行计算并行计算(parallelcomputing)是指,在并行机上将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,从而达到加速求解速度,或者求解应用问题规模的目的。成功开展并行计算,必须具备三个基本条件:并行机并行机至少包含两台或两台以上处理机,这些处理机通过互连网络相互连接,相互通信。应用问题必须具有并行度也就是说,应用可以分解为多个子任务,这些子任务可以并行地执行。将一个应用分解为多个子任务的过程,称为并行算法的设计。并行编程在并行机提供的并行编程环境上,具体实现并行算法,编制并行程序,并运行该程序,从而达到并行求解应用问题的目的。并行计算的目的、目标并行计算技术的主要目的:加速求解问题的速度例如,给定某应用,在单处理器上,串行执行需要2周,这个速度对一般的应用而言,是无法忍受的。于是,可以借助并行计算,使用100台处理器,加速50倍,将执行时间缩短为6.72个小时。提高求解问题的规模例如,在单处理器上,受内存资源2GB的限制,只能计算10万个网格,但是,当前数值模拟要求计算千万个网格。于是,也可以借助并行计算,使用100个处理器,将问题求解规模线性地扩大100倍。并行计算的主要目标:在并行机上,解决具有重大挑战性计算任务的科学、工程及商业计算问题,满足不断增长的应用问题对速度和内存资源的需求。并行计算的研究内容并行计算的主要研究内容大致可分为四个方面:并行机的高性能特征抽取充分理解和抽取当前并行机体系结构的高性能特征,提出实用的并行计算模型和并行性能评价方法,指导并行算法的设计和并行程序的实现。并行算法设计与分析设计高效率的并行算法,将应用问题分解为可并行计算的多个子任务,并具体分析这些算法的可行性和效果。并行实现技术主要包含并行程序设计和并行性能优化。并行应用这是并行计算研究的最终目的。通过验证和确认并行程序的正确性和效率,进一步将程序发展为并行应用软件,应用于求解实际问题。同时,结合实际应用出现的各种问题,不断地改进并行算法和并行程序。并行计算示例N个数被分布存储在P台处理器,P台处理器并行执行N个数的累加和。首先,各个处理器累加它们各自拥有的局部数据,得到部分和;然后,P台处理器执行全局通信操作,累加所有部分和,得到全局累加和。并行计算机体系结构组成并行计算机的各个部分:节点(node)构成并行机的基本单位互联网络(interconnectnetwork)内存(memory)内存模块与节点分离内存模块位于节点内部多级存储体系结构为了解决内存墙(memorywall)性能瓶颈问题。在节点内部的cache称为二级cache(L2cache)。在处理器内部更小的cache称为一级cache(L1cache)。L1cache连接CPU寄存器和L2cache,负责缓存L2cache中的数据到寄存器中。多级存储体系结构并行计算机的多级存储结构主要包括两个问题:Cache的映射策略,即cache如何从内存中取得数据进行存储;

节点内部或者节点之间内存的访问模式。cache原理cache以cache线为基本单位,每条cache包含L个字,每个字8个字节。例如,L=4,则表示cache线包含4*8=32个字节。内存空间分割成块(block),每个块大小与cache线长度一致,数据在内存和cache之间的移动以cache线为基本单位。Fori=1toMA[i]=A[i]+2*B[i]如果操作数存在cache中,称该次访问是命中的,否则,该次操作是“扑空”的。无Cache,访问内存2M次;有cache,访问内存2M/L次多级存储体系结构cache的映射策略指的是内存块和cache线之间如何建立相互映射关系。直接映射策略(directmappingstrategy)每个内存块只能被唯一的映射到一条cache线中K-路组关联映射策略(K-waysetassociationmappingstrategy)Cache被分解为V个组,每个组由K条cache线组成,内存块按直接映射策略映射到某个组,但在该组中,内存块可以被映射到任意一条cache线。全关联映射策略(fullassociationmappingstrategy)内存块可以被映射到cache中的任意一条cache线。并行计算机访存模型UMA(UniformMemoryAccess)均匀存储访问模型物理存储器被所有节点共享;所有节点访问任意存储单元的时间相同;发生访存竞争时,仲裁策略平等对待每个节点,即每个节点机会均等;各节点的CPU可带有局部私有高速缓存;外围I/O设备也可以共享,且每个节点有平等的访问权利。NUMA(Non-UniformMemoryAccess)模型物理存储器被所有节点共享,任意节点可以直接访问任意内存模块;节点访问内存模块的速度不同,访问本地存储模块的速度一般是访问其他节点内存模块的3倍以上;发生访存竞争时,仲裁策略对节点可能是不等价的;各节点的CPU可带有局部私有高速缓存(cache);外围I/O设备也可以共享,但对各节点是不等价的。并行计算机访存模型COMA(Cache-OnlyMemoryAccess)模型各处理器节点中没有存储层次结构,全部高速缓存组成了全局地址空间利用分布的高速缓存目录D进行远程高速缓存的访问COMA中的高速缓存容量一般都大于2级高速缓存容量使用COMA时,数据开始时可以任意分配,因为在运行时它最终会被迁移到要用到它的地方NORMA(No-RemoteMemoryAccess)模型所有存储器都是私有的;绝大多数NORMA都不支持远程存储器的访问;在DSM(分布式共享存储)中,NORMA就消失了。并行计算机访存模型并行计算机系统的不同访存模型分类并行计算模型计算模型是对计算机的抽象计算模型为设计、分析和评价算法提供基础冯·偌依曼机就是一个理想的串行计算模型但现在还没有一个通用的并行计算模型并行计算模型SIMD同步并行计算模型共享存储的SIMD模型(PRAM模型)PRAM,ParallelRandomAccessMachine并行随机存取模型分布存储的SIMD模型(SIMD互联网络模型)MIMD异步并行计算模型异步PRAM模型BSP模型LogP模型C3模型SIMD同步并行计算模型SIMD共享存储模型(PRAM模型)是一种抽象的并行计算模型,模型中:假定存在着一个容量无限大的共享存储器;有有限或无限各功能相同的处理器,且均具有简单的算术运算和逻辑判断功能;在任何时刻各处理器均可以通过共享存储单元交换数据。SIMD同步并行计算模型SIMD共享存储模型(PRAM模型)根据处理器对共享存储单元同时读写的限制,模型分为:PRAM-EREW(Exclusive-ReadandExclusive-Write),不允许同时读和同时写PRAM-CREW(Concurrent-ReadandExclusive-Write),允许同时读但不允许同时写PRAM-CRCW(Concurrent-ReadandConcurrent-Write),允许同时读和同时写SIMD同步并行计算模型SIMD共享存储模型(PRAM模型)优点:适合于并行算法的表达、分析和比较;使用简单,很多诸如处理器间通信、存储管理和进程同步等并行计算机的低级细节均隐含于模型中;易于设计算法和稍加修改便可运行在不同的并行计算机上;有可能加入一些诸如同步和通信等需要考虑的方面。SIMD同步并行计算模型SIMD共享存储模型(PRAM模型)控制单元P1LMP2LMPnLM互连网络全局共享存储器SIMD-PRAM模型MIMD同步并行计算模型MIMD-PRAM模型控制器1P1LMP2LMPnLM互连网络全局共享存储器控制器2控制器nMIMD异步计算模型——APRAM模型APRAM模型特点:每个处理器都有其本地存储器、局部时钟和局部程序处理器间的通信经过共享全局存储器无全局时钟,各处理器异步地独立执行各自的指令处理器任何时间依赖关系需明确地在各处理器的程序中加入同步(路)障(SynchronizationBarrier)一条指令可在非确定但有限的时间内完成。APRAM模型中有四类指令:全局读,将全局存储单元中的内容读入本地存储器单元中局部操作,对本地存储器中的数执行操作,其结果存入本地存储器中全局写,将本地存储器单元中的内容写入全本地存储器单元中同步,同步是计算中的一个逻辑点,在该点各处理器均需等待别的处理器到达后才能继续执行其局部程序MIMD异步计算模型——BSP模型大同步并行BSP(BulkSynchronousParallel)模型作为计算机语言和体系结构之间的桥梁,由以下述三个参数描述分布存储的并行计算机模型:处理器/存储器模块(下文简称处理器)处理器模块之间点到点信息传递的路由器执行以时间间隔L为周期的路障同步器特点:将处理器和路由器分开,强调了计算任务和通信任务的分开,而路由器仅施行点到点的消息传递,不提供组合、复制或广播等功能,这样做既掩盖了具体的互联网络拓扑,又简化了通信协议采用路障方式的以硬件实现的全局同步是在可控的粗粒度级,从而提供了执行紧耦合同步式并行算法的有效方式,而程序员并无过分的负担在分析BSP模型的性能时,假定局部操作可在一个时间步内完成,而在每一超级步中,一个处理器至多发送或接受h条消息(h-relation)MIMD异步计算模型——LogP模型LogP模型是一种分布存储的、点到点通信的多处理机模型,其中通信网络由一组参数来描述,但它并不涉及到具体的网络结构,也不假定算法一定要用显式的消息传递操作进行描述。L(Latency)源处理机与目的处理机进行消息(一个或几个字)通信所需要的等待或延迟时间的上限。o(overhead)处理机准备发送或准备接受每个消息的时间开销(包括操作系统核心开销和网络软件开销),在这段时间里处理机不能执行其他操作。g(gap)一台处理机连续两次发送或连续两次接受消息时的最小时间间隔,其倒数即为处理机的通信带宽。P(Processor)处理机的个数。MIMD异步计算模型——LogP模型揭示了分布存储并行计算机的性能瓶颈,用L、o、g三个参数刻画了通信网络的特性,但屏蔽了网络拓扑、选路算法和通信协议等具体细节参数g反映了通信带宽在任何时刻,最多只能有[L/g]条消息从一个处理器传到另一个处理器,这就是网络容限,当一台处理机发送的消息达到这个容限时,在发送的消息就会被阻塞;在网络容限范围内,点到点传送一条消息的时间为(2*o+L)。设想LogP模型中的L、o、g都为0,那么LogP模型就等同于PRAM模型MIMD异步计算模型——C3模型C3(Computation,Communication,Congestion)模型是一个与体系结构无关的粗粒度的并行计算模型,旨在能反映计算复杂度,通信模式和通信期间潜在的拥挤等因素对粗粒度网络算法的影响。C3模型强调用共用的通信操作来开发粗粒度的并行算法BSP、LogP模型采用点到点的消息传递来进行通信,复杂的通信操作由编程实现各种计算模型比较模型属性PRAMAPRAMBSPLogPC3体系结构SIMD-SMMIMD-SMMIMD-DMMIMD-DMMIMD-DM计算模式同步异步异步异步异步同步方式自动同步路障同步路障同步隐式同步路障同步模型参数单位时间步d,读/写时间B,同步时间p,处理器数g,带宽因子l,同步间隔L,通信延迟o,额外开销g,带宽因子P,处理器数l,信包长度s,发送建立时间h,通信延迟计算粒度细粒度/中粒度中粒度/粗粒度中粒度/粗粒度中粒度/粗粒度粗粒度通信方式读/写共享变量读/写共享变量发送/接收消息发送/接收消息发送/接收消息地址空间全局地址空间单地址空间单/多地址空间单/多地址空间多地址空间并行编程方法编写正确的串行程序分析:找出并发性找出包含独立计算的热点(Hotspot)位置。热点是指一段包含了大量操作的代码设计与实现:采用线程来实现算法并行算法是适合在并行机上实现的算法测试正确性:检测并修复在线程化时引入的错误性能调优:消除性能瓶颈并行算法分类并行算法根据运算基本对象的不同可分为:数值并行算法主要为数值计算方法而设计的并行算法;非数值并行算法主要为符号运算而设计的并行算法,如图论算法、遗传算法等。并行算法分类根据并行进程间相互执行顺序关系的不同可分为:同步并行算法进程间由于运算执行顺序而必须相互等待的并行算法,如通常的向量算法、SIMD算法、MIMD并行机上进程间需要相互等待通信结果的算法等;异步并行算法进程间执行相对独立,不需要相互等待的一种算法,通常针对消息传递MIMD并行机设计,其主要特征是在计算的整个过程中均不需要等待,而是根据最新消息决定进程的继续或终止;独立并行算法进程间执行是完全独立的,计算的整个过程不需要任何通信。并行算法分类根据各进程承担的计算任务粒度的不同,可分为:细粒度并行算法通常指基于向量和循环级并行的算法;中粒度并行算法通常指基于较大的循环级并行;大粒度并行算法通常指基于子任务级并行的算法,例如通常的基于区域分解的并行算法,它们是当前并行算法设计的主流。并行编程环境比较流行的并行编程环境主要有3类:消息传递、共享存储和数据并行:共享存储并行编程基于线程级细粒度并行,可移植性不如消息传递并行编程,但是,由于他们支持数据的共享存储,所以并行编程的难度较小,但一般情况下,当处理机个数较多时,其并行性能明显不如消息传递编程;消息传递并行编程基于大粒度的进程级并行,具有最好的可扩展性,几乎被所有当前流行的各类并行计算机所支持,其具有较好的可扩展性。消息传递并行编程只能支持进程间的分布式存储模式,即各个进程只能支持访问其局部内存空间,而对其他进程的局部内存空间的访问只能通过消息传递来实现,因此,学习和使用消息传递并行编程的难度均大于共享存储和数据并行这两种编程模式。

并行编程环境比较流行的并行编程环境主要有3类:消息传递、共享存储和数据并行特征消息传递共享存储数据并行典型代表MPI,PVMOpenMPHPF可移植性所有主流并行计算机SMP,DSMSMP,DSM,MPP并行粒度进程级大粒度线程级细粒度进程级细粒度并行操作方式异步异步松散同步数据存储模式分布式存储共享存储共享存储数据分配方式显式隐式半隐式学习入门难度较难容易偏易可扩展性好较差一般编程语言与编译器在科学计算领域对并行编程支持已经取得相当成功的三项技术:自动并行化数据并行语言HPF共享存储并行编程接口OpenMP编程语言与编译器自动并行始于20世纪70年代的自动向量化。20世纪80年代中期,基于依赖分析的向量化工具成熟,成为向量机的标准。自动化并行本身不足以解决并行程序设计问题。此领域的研究重点逐步转向基于语言的策略研究,即从用户那里获得更多的信息,同时利用自动并行化技术来减轻程序设计的负担。依赖分析:搜索确定对同一数据结构的哪些引用是访问同一存储单元的编程语言与编译器数据并行编程:HPF高性能Fortran(HPF)的思想是使数据管理的多数细节自动并行化HPF提供了一个指令集,通过注释形式的指令来扩展变量类型的说明,能够对数组的数据布局进行相当详细的控制。对显式并行机制的说明相当有限,通过系统而非程序员把任务分配给处理机。编程语言与编译器共享存储并行编程:OpenMP1997年由SiliconGraphics领导的工业协会推出了OpenMP是一个与Fortran77和C语言绑定的并行编程接口OpenMP指令在单机编译器上被当作注释而忽略通过parallelsection指令获得任务并行#pragmaompparallelfor…提供了锁变量用于线程间细粒度同步是适合于具有一致性访存的共享存储计算机的编程接口并行计算性能评测并行程序执行时间从并行程序开始执行到所有进程执行完毕,墙上时钟走过的时间,也称为墙上时间(wallclocktime)。并行计算性能评测并行程序执行时间对各个进程,墙上时间可进一步分解为计算CPU时间、通信CPU时间、同步开销时间、同步导致的进程空闲时间计算CPU时间:进程指令执行所花费的CPU时间,包括程序本身的指令执行占用的时间(用户时间)和系统指令花费的时间;通信CPU时间:进程通信花费的CPU时间;同步开销时间:进程同步花费的时间;进程空闲时间:进程空闲时间是指并行程序执行过程中,进程所有空闲时间总和(如进程阻塞式等待其他进程的消息时。此时CPU通常是空闲的,或者处于等待状态)并行计算性能评测并行程序性能评价方法浮点峰值性能与实际浮点性能峰值性能等于CPU内部浮点乘加指令流水线条数、每条流水线每个时钟周期完成的浮点运算次数、处理器主频三者的乘积实际浮点性能等于并行程序的总的浮点运算次数和并行程序执行时间的比值数值效率和并行效率并行计算性能评测并行加速比与效率在处理器资源独享的前提下,假设某个串行应用程序在某台并行机单处理器上的执行时间为TS,而该程序并行化后,P个进程在P个处理器并行执行所需要的时间为TP

,则该并行程序在该并行机上的加速比SP

可定义为:效率定义为:并行计算性能评测加速比性能定律——Amdahl定律能够计算并行程序相对于最优串行算法在性能提升上的理论最大值——他将程序划分为可加速与不可加速两大部分,程序总的加速比是一个关于程序中这两部分所占比例以及可加速部分性能加速程度的函数Amdahl定律:f表示执行程序中串行部分的比例,p表示处理器核的数量。假设最优串行算法的执行时间为一个单位时间(也就是分子为1)。处理器核在数量上能够无限制的增加,但是无限的处理器核却并不能带来性能上的无限增长,无论如何,程序性能上的总是有个上限,这个要受限于串行部分所占的比例。

并行计算性能评测Amdahl定律告诉我们:可并行计算量占主要比重通过并行化,增加的额外计算量所占比重有限:这些计算量由各个处理器/执行内核分摊要有足够的并行度(并行子任务数量),实现负载均衡:问题规模越大,并行度也越大数据并行大规模数据处理数据规模与处理器/执行内核的规模比率要适当只有上述三个特征都满足了,采用并行处理技术才有意义程序性能优化串行程序性能优化

是并行程序性能优化的基础,一个好的并行程序首先应该拥有良好的单机性能,影响程序单机性能的主要因素是程序的计算流程和处理器的体系结构。程序性能优化串行程序性能优化调用高性能库许多著名的高性能数学程序库如优化的BLAS、FFTW等,由于经过厂商或第三方针对特定处理机进行的专门优化,其性能一般大大优于用户自行编写的同样功能的程序段或子程序。程序性能优化串行程序性能优化调用高性能库

BLAS(BasicLinearAlgebraSubroutines)是一组高质量的基本向量、矩阵运算子程序。最早的BLAS是一组Fortran函数和子程序,后来又发展了其他语言接口,包括C、Java等。BLAS的官方网址在/blas/国内镜像为/blas/。BLAS的主要贡献是将高性能代数计算程序的开发同针对特定机器的性能优化独立开来:代数算法程序的开发者只需要运用适当的分块技术将计算过程变成矩阵、向量的基本运算并调用相应的BLAS子程序而不必考虑与计算机体系结构相关的性能优化问题。线性代数软件包如LAPACK、ScaLAPACK等都是基于这一思想设计的。程序性能优化串行程序性能优化调用高性能库

FFTW(TheFastestFourierTransformintheWest)是一个免费的快速富氏变换(FFT)软件包,开发者是麻省理工学院的MatteoFrigo和StevenG.Johnson,下载网址:

该软件包用C语言开发,其核心技术(编码生成器)采用面向对象语言Caml编写。FFTW能自动适应系统硬件,可移植性很强。它能计算一维和多维离散傅立叶变换,其数据类型可以是实型、复型或半复型。该软件通过方案(plan)和执行器(executor)与用户进行接口,内部结构及其复杂性对用户透明,速度快。内部编译器、代码生成器利用AST(AbstractSyntaxTree)在运行时生成适合所运行的机器的代码并自我优化。程序性能优化串行程序性能优化选择适当的编译器优化选项现代编译器在编译时能够对程序进行优化从而提高所生成的目标代码的性能。这些优化功能通常通过一组编译选项来控制。比较通用的优化选项有“-O”、“-O0”、“-O2”、“-O3”等,“-O0”表示不做优化,“-O1”、“-O2”、“-O3”等表示不同级别的优化,优化级别越高,生成的代码的性能可能会越好,但采用过高级别的优化会大大降低编译速度,并且可能导致错误的运行结果。通常,“-O2”的优化被认为安全的。程序性能优化串行程序性能优化合理定义数组维数在进行连续数据访问时应该使得地址的增量与内存体数的最大公约数尽量小,特别要避免地址增量正好是体数的倍数。注意嵌套循环的顺序,尽量改善数据访问的局部性通用的原则就是尽量使最内层循环的数据访问连续进行程序性能优化串行程序性能优化数据分块当处理大数组时,对数组、循环进行适当分块有助于同时改善访存的时间和空间局部性。DOI=1,NDOJ=1,NA(I)=A(I)+B(J)ENDDOENDDO对数组B进行分块,S为分块大小,改写上述程序:DOJ=1,N,SDOI=1,NDOJJ=J,MIN(J+S-1,N)A(I)=A(I)+B(JJ)ENDDOENDDOENDDO当S≥N时,相当于原始循环;当S=1时相当于交换I和J的循环顺序。根据cache大小选择适当的S值,使得B(J:J+S-1)能够被容纳在cache中,可以改善对数组B的访问的时间局部性。程序性能优化串行程序性能优化循环展开是另一个非常有效的程序优化技术。它除了能够改善数据访问的时间和空间局部性外,还由于增加了每步循环中的指令与运算的数目,亦有助于CPU多个运算部件的充分利用。DOI=1,ND=D+A(I)ENDDO将它进行4步循环展开的代码如下:DOI=1,MOD(N,4)D=D+A(I)ENDDODOI=MOD(N,4)+1,N,4D=D+A(I)+A(I+1)+A(I+2)+A(I+3)ENDDO上面的代码中第一个循环用于处理N除以4的余数,第二个循环是展开后的循环。程序性能优化串行程序:求小于N的全部素数voidmain(){intnumber;//小于N的素数个数; intprimes[n];//从primes[0]–primes[number-1]中存放生成的素数; inti,j,k; primes[0]=2; for(i=3,j=1;i<n;i++){//从整数3开始检查i是否为素数 for(k=0;primes[k]*primes[k]<i;k++)//依次检查i是否可以被前面的素数整除 if(i%primes[k]==0)break; if(primes[k]*primes[k]>i){//如果i不能被前面的素数整除//则将它作为新素数存入数组

primes[j]=i; j++; } }}程序性能优化并行程序性能优化最主要的是选择好的并行算法和通信模式减少通信量、提高通信粒度提高通信粒度的有效方法就是减少通信次数,尽可能将可以一次传递的数据合并起来一起传递全局通信尽量利用高效集合通信算法对于标准的集合通信,如广播、规约、数据散发与收集等,尽量调用MPI标准库函数挖掘算法的并行度,减少CPU空闲等待具有数据相关性的计算过程会导致并行运行的部分进程空闲等待.在这种情况下,可以考虑改变算法来消除数据相关性程序性能优化并行程序性能优化负载平衡必要时使用动态负载平衡技术,即根据各进程计算完成的情况动态地分配或调整各进程的计算任务。动态调整负载时要考虑负载调整的开销及由于负载不平衡而引起的空闲等待对性能的影响,寻找最优负载调整方案。通信、计算的重叠让通信和计算重叠进行,利用计算时间来屏蔽通信时间。实现方法一般基于非阻塞通信,先发出非阻塞的消息接受或发送命令,然后处理与收发数据无关的计算任务,完成计算后再等待消息收发的完成。通过引入重复计算来减少通信,即以计算换通信由于当前大部分并行计算机的计算速度远远大于通信速度,并且在一些情况下,当一个进程计算时,别的进程往往处于空闲等待状态,因而适当引入重复计算可以提高程序的总体性能。程序性能优化并行程序:求小于N的全部素数pThread_prime并行编译器并行编译器大致由三部分组成:流分析确定源代码中数据和控制的相关性程序优化将代码变换成与之等效的的更好形式,以挖掘硬件潜力代码生成将代码从一种描述转换成另一种中间形式的描述并行编译器并行编译过程并行编译器流分析要使程序并行地执行,首先要进行相关性分析(DependencyAnalysis)四种相关形式:流相关:从Si~Sj存在执行通路,且Si至少有一个输出被用作Sj的输入反相关:Sj紧接Si,且Sj的输出被作为Si的输入输出相关:两条语句往相同的变量里写控制相关:语句Sj的执行与否依赖于语句Si并行编译器代码优化代码向量化(CodeVectorization):把标量程序中的由一种可向量化循环完成的操作变换成向量操作。代码并行化(CodeParallelization):并行代码的优化是将一个程序展开成多线程以同时供多台处理机并行执行,其目的是要减少总的执行时间。代码生成并行代码生成(CodeGeneration)涉及到将优化后的中间形式的代码转换程可执行的具体的机器目标代码。包括执行次序、指令选择、寄存器分配、负载平衡、并行粒度、代码调度以及后优化(Postoptimization)等问题。多核程序设计

第三章多线程编程方法综述进程定义:进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。可表示成四元组(P,C,D,S),其中P是程序代码,C是进程的控制状态,D是进程的数据,S是进程的执行状态。状态:运行态(Run):进程占有处理机资源,正在运行;就绪态(Ready):进程本身具备运行条件,但由于处理机的个数少于可运行进程的个数,暂未投入运行;等待态(Wait):

进程本身不具备运行条件,即使分给它处理机也不能运行.进程正等待某一个事件的发生,如等待某一资源被释放,等待与该进程相关的I/O传输的完成信号等。进程状态间转换当一个就绪进程获得处理机时,其状态由就绪变为运行;当一个运行进程被剥夺处理机时,其状态由运行变为就绪;当一个运行进程因某事件受阻时,如所申请资源被占用,启动I/O传输未完成,其状态由运行变为等待;当所等待事件发生时,如得到申请资源,I/O传输完成,其状态由等待变为就绪。进程进程控制块(ProcessControlBlock,PCB):标志进程存在的数据结构,其中包含系统对进程管理需要的全部信息。进程标识用户标识进程状态调度参数现场信息家族联系程序地址当前打开文件消息队列指针资源使用情况进程队列指针进程进程的组成

进程控制块:由于进程控制块中包含程序的地址信息,通过它可以找到程序在内存或外存的存放地址,也就找到了整个进程.PCB存于系统空间,只有操作系统能够对其存取,用户程序不能访问.实际上用户甚至感觉不到PCB的存在;程序:进程的“躯体”,其中包括代码和数据两个部分.现代操作系统都支持程序共享的功能,这就要求代码是“纯”的,即在运行期间不修改自身。数据一般包括静态变量、动态堆和动态栈。进程进程的表示PCB程序PCB代码数据+堆栈系统空间用户空间(a)(b)进程进程的队列为实现对进程的管理,系统需要按照某种策略将进程排成若干队列,由于PCB是进程的代表,因而进程队列实际上是由进程PCB构成的队列.因为该队列通常由链的形式实现的,所以也称PCB链。系统中的进程队列分为如下三类:就绪队列、等待队列、运行队列。进程进程的队列就绪队列整个系统一个。所有处于就绪状态的进程按照某种组织方式排在这一队列中。等待队列每个等待事件一个,当进程等待某一事件时,进入与该事件相关的等待队列中;当某事件发生时,与该事件相关的一个或多个进程离开相应的等待队列,进入就绪队列。运行队列在单CPU系统中只有一个,在多CPU系统中每个CPU各有一个,每个队列中只有一个进程,指向运行队列头部的指针被称作运行指示字。进程进程的类型系统进程——运行操作系统程序,完成操作系统的某些功能;用户进程——运行用户程序,直接为用户服务。进程的特性并发性:与其它进程一道在宏观上同时向前推进;动态性:进程是执行中的程序.此外进程的动态性还体现在如下两个方面:首先,进程是动态产生、动态消亡的;其次,在进程的生存期内,其状态处于经常性的动态变化之中;独立性:进程是调度的基本单位,它可以获得处理机并参与并发执行;交往性:进程在运行过程中可能会与其它进程发生直接或间接的相互作用;异步性:每个进程都以其相对独立、不可预知的速度向前推进;结构性:每个进程有一个控制块PCB。

进程两个特征资源特征,包括程序执行所必需的计算资源,例如程序代码、内存地址空间、文件系统、I/O设备、程序计数器、寄存器、栈空间等执行特征,包括在进程执行过程中动态改变的特征,例如指令路径(即进程执行的指令序列)、进程的控制与执行状态等。进程通讯现代操作系统提供基本的系统调用函数,允许位于同一台处理机或不同处理机的多个进程之间相互交流信息三种表现形式:通信:进程间的数据传递称为进程间通信。两个进程间传递的数据称为消息;这种操作称为消息传递同步:同步是使位于相同或不同处理机中的多个进程之间相互等待的操作,它要求进程的所有操作均必须等待到达某个控制状态之后才进行。聚集(或规约):聚集将位于相同或不同处理机中的多个进程的局部结果综合起来,通过某种操作,产生一个新的结果,存储在某个指定的或者所有的进程的变量中。具体实现:在共享存储环境中,通过读/写操作系统通过的共享数据缓存区来实现在分布式存储网络环境中,通过网络通信来实现进程通讯

定义:进程之间的互斥、同步及信息交换统称进程通讯(Inter-ProcessCommunication,IPC)低级通讯:将进程互斥与进程同步称作进程之间的低级通讯;高级通讯:进程之间大数据量的传递称作进程之间的高级通讯。

进程通讯的模式进程通讯主要有两种模式:共享内存模式和消息模式。共享内存模式相互通讯的进程之间需要有公共内存,一组进程向该公共内存中写,另一组进程由该公共内存中读,如此便实现了进程之间的信息传递。需要解决两个问题:为相互通讯的进程之间提供公共内存;为访问公共内存提供必要的同步机制。信息传递模式(通讯通过两个基本的系统调用命令,即发送命令和接收命令)直接方式间接方式进程通讯的模式直接方式:是指相互通讯的进程之间在通讯时直呼其名,发送者在发送时要指定接收者的名字,接收者在接收时要指定发送者的名字两种系统调用形式:对称形式——通讯形式的特点是一对一的,调用命令:send(R,M):将消息M发给进程R;receive(S,N):由进程S处接收消息至N。非对称形式——通讯形式的特点是多对一的,调用命令:send(R,M):将消息M发给进程R;receive(pid,N):接受消息至N,返回pid为发送进程标识。信息传递两种途径:有缓冲途径无缓冲途径进程通讯的模式间接方式:是指相互通讯的进程之间在通讯时不是直呼对方名字,而是指明一个中间媒体,即信箱,进程之间通过信箱来实现相互间的通讯.此时,系统所提供的高级通讯原语以信箱取代进程.发送和接收原语如下:send(MB,M):将消息M发送到信箱MB;receive(MB,N):由信箱MB中接收消息至N。进程的创建与撤销

进程创建

建立一个PCB,并对其内容进行初始化;为该进程分配必要的存储空间,并加载所要执行的程序(在UNIX系统中需要通过另外一个系统调用execl实现);将PCB送入就绪队列。进程撤销完成使命的进程需要终止自己并告知操作系统,系统将对进程进行善后处理(收集进程状态信息、通知其父进程等),之后将收回进程所占有的所有资源(打开文件、内存等),最后撤销其PCB。,非正常终止也将进入操作系统进行善后处理。线程的概念进程不适合细粒度的共享存储并行程序设计。线程(thread)是进程上下文(context)中执行的代码序列,又被称为轻量级进程(lightweightprocess),是进程内的一个相对独立的执行流。进程可由单个线程来执行,即通常所说的串行执行;或者由多个线程来并行执行,此时,多个线程将共享该进程的所有资源特征,并可以使用不同的CPU,对不同的数据进行处理,从而达到提高进程执行速度的目的。线程的概念在支持多线程的系统中:进程成为资源分配和保护的实体线程是被调度执行的基本单元。进程的资源包括进程的地址空间,打开的文件和I/O等属于同一个进程的线程共享该进程的代码段和数据段,打开的文件,信号等还包含各自的线程ID,线程执行状态,CPU寄存器状态和栈线程的概念进程和线程的区别进程——是指程序在一个数据集合上运行的过程,是系统进行资源分配和调度运行的一个独立单位,有时也称为活动、路径或任务。操作系统中引入进程的目的,是为了使多个程序并发执行,以改善资源利用率及提高系统的吞吐量。操作系统中再引入线程则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。进程是资源的分配单位。线程——是进程中的一个实体,是被系统调度和分配的基本单元。每个程序至少包含一个线程,那就是主线程。线程自己只拥有很少的系统资源(如程序计数器、一组寄存器和栈),但它可与同属一个进程的其他线程共享所属进程所拥有的全部资源。同一进程中的多个线程之间可以并发执行,从而更好地改善了系统资源的利用率。线程是CPU的调度单位。线程是“进程中的一条执行路径或线索”或“进程中的一个可调度实体”线程的概念单线程与多线程处理器模型线程的概念线程的概念线程的优点上下文切换速度快:由同一进程中的一个线程切换到另一个线程只需改变寄存器和栈,包括程序和数据在内的地址空间不变;系统开销小:创建线程比创建进程所需完成的工作少,因而对于客户请求,服务器动态创建线程比动态创建进程具有更高的响应速度;通讯容易:由于同一进程中的多个线程地址空间共享,一个线程写到数据空间的信息可以直接被该进程中的另一线程读取,方便快捷;终止一个线程比终止一个进程的代价要小。线程的概念调度在传统的操作系统中,CPU调度和分派的基本单位是进程。而在引入线程的操作系统中,则把线程作为CPU调度和分派的基本单位,进程则作为资源拥有的基本单位,从而使传统进程的两个属性分开,线程便能轻装运行,从而显著地提高系统的并发性。同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用。但是在由一个进程中的线程切换到另一进程中的线程时,依然会引起进程切换。线程的概念并发性

在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的并发性,从而能更有效地使用系统资源和提高系统的吞吐量。例:在一个未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被封锁时,便没有其他的文件服务进程来提供服务。在引入了线程的操作系统中,可以在一个文件服务进程中设置多个服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程封锁时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统的吞吐量。线程的概念系统开销

不论是引入了线程的操作系统,还是传统的操作系统,进程都是拥有系统资源的一个独立单位,它可以拥有自己的资源。一般地说,线程自己不拥有系统资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源。亦即一个进程的代码段、数据段以及系统资源(如已打开的文件、I/O设备等),可供同一进程的其他所有线程共享。线程的概念拥有资源

由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。在进行进程切换时,涉及到整个当前进程CPU环境的保存环境的设置以及新被调度运行的进程的CPU环境的设置。线程切换只需保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。因此进程切换的开销远大于线程切换的开销。由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现也变得比较容易。线程的概念线程的结构线程的概念线程控制块(ThreadControlBlock,TCB):线程控制块是标志线程存在的数据结构,其中包含系统对于线程进行管理所需要的全部信息线程的实现方式用户级线程(UserLevelThread)在用户层通过线程库来实现核心级线程(KernelLevelThread)由操作系统直接支持硬件线程(HardwareThread)。硬件线程就是线程在硬件执行资源上的表现形式。用户级线程和内核级线程用户级线程和内核级线程用户级线程库是用于用户级线程管理的例程包,支持线程的创建、终止,以及调度线程的执行并保存和恢复线程的上下文,这些操作都在用户空间进行,无需内核的支持。核心级线程所有管理操作都是由操作系统内核完成的。内核保存线程的状态和上下文信息,当一个线程执行了引起阻塞的系统调用时,内核可以调度该进程的其他线程执行。在多处理器系统上,内核可以分派属于同一进程的多个线程在多个处理器上运行,提高进程执行的并行度。组合模式有的操作系统提供了组合的线程模式,在Solaris中,用户创建的多个用户级线程被映射到一些内核线程上,内核线程的数目可能少于用户级线程的数目。用户级线程用户级线程和内核级线程用户级线程优点:线程不依赖于操作系统,可以采用与问题相关的调度策略,灵活性好;同一进程中的线程切换不需进入操作系统,因而实现效率较高;有关线程的所有管理工作都由在用户级实现的线程库来支持。用户级线程缺点:同一进程中的多个线程不能真正并行;由于线程对操作系统不可见,调度在进程级别,某进程中的一个线程通过系统调用进入操作系统受阻,该进程的其它线程也不能运行。用户级线程特征:户级线程的创建和管理等操作无须内核参与,操作更快并行性不高,一个线程被系统阻塞后,整个进程被阻塞用户级线程和内核级线程核心级线程通过系统调用由操作系统创建,线程的控制结构TCB保存于操作系统空间,线程状态转换由操作系统完成,线程是CPU调度的基本单位。用户级线程和内核级线程核心级别线程的优点是并发性好,在多CPU环境中同一进程中的多个线程可以真正并行执行

核心级别线程的缺点是线程控制和状态转换需要进入操作系统完成,系统开销比较大.

特点并行性高,多个线程可被同时调度充分利用多处理器创建和管理代价高用户级线程和内核级线程多线程的映射模型对于实现了用户级线程和内核级线程的操作系统,用户级线程和内核级线程之间的可以有不同的映射方式。多对一模型一对一模型多对多模型多线程的映射模型多对一模型多对一模型把多个用户级线程映射到一个内核级线程。线程的管理在用户空间实现,所以效率高。当一个线程因调用系统调用被阻塞时,整个进程被阻塞。用户级线程不能在多处理器上并发执行,不支持内核级线程的操作系统使用多对一模型。一对一模型一对一模型把每个用户级线程影射到一个内核级线程。当一个线程阻塞时,其他线程仍然可以运行。实例:Windows95/98/NT/2000OS/2多线程的映射模型多对多模型多对多模型将m个用户级线程影射到n个内核级线程,m≥n。用户可以创建所需要的用户级线程,通过分配适当数目的内核级线程获得并发执行的优势并节省系统资源。例:Solaris2

多线程的映射模型线程生命周期线程的标识通常用一个整数来标识一个线程线程的创建自动创建从main函数开始的主线程调用函数库接口创建一个新的线程(pthread_create)线程的终止执行完毕,或者调用了pthread_exit主线程退出导致整个进程会终止线程状态的转换线程的状态就绪(ready):线程等待可用的处理器。运行(running):线程正在被执行。阻塞(blocked):线程正在等待某个事件的发生(比如I/O的完成,试图加锁一个被上锁的互斥量)。终止(terminated):线程从起始函数中返回或者调用pthread_exit。线程的应用许多任务在逻辑上涉及多个控制流,控制流具有内在的并发性,当其中一些控制流被阻塞时,另外一些控制流仍可继续。在没有线程支持的条件下,只能采用单进程或多进程模式,单进程不能表达多控制流,多进程开销大而且在无共享存储空间的条件下进程间交往困难。采用多线程一方面可以提高应用程序的并行性,另一方面也使程序设计简洁明晰。例:Word文字编辑工具、Web服务器等。多线程程序设计为什么要多线程程序设计某些应用具有内在的多个控制流结构,这些控制流具有合作性质,需要共享内存,采用多线程易于对问题建模,从而得到最自然的解决算法;在需要多控制流的应用中,多线程比多进程在速度上具有绝对优势,统计测试表明,线程的建立速度比进程的建立速度快100倍,进程内线程间的切换速度与进程间切换速度也有数量级之差;采用多线程可以提高处理机与设备之间的并行性.在单控制流情形下,启动设备的进程进入核心后将被阻塞,此时该进程的其它代码也不能执行.若此时无其它可运行程序,处理机将被闲置.多线程结构在一个线程等待时,其它线程可以继续执行,从而使设备和处理机并行工作;在多核环境下,多线程可以并行执行,既可提高资源利用效率,又可提高进程推进速度。多线程机制多核处理器的基本结构是共享存储的,多线程程序设计技术被认为是能够充分挖掘共享存储系统性能潜力的最有效的技术。多线程机制的优点:创建一个线程比创建一个进程代价要小;线程之间的切换比进程间的切换代价小;充分利用多处理器;数据共享;快速响应特性;多线程编程可以使程序更加更加模块化,简化程序逻辑。多线程机制在多处理器系统上,如果一个应用具有如下特征,就可以利用多线程技术达到目标:前台后台操作;异步处理;需要加速执行;模块化程序结构。多线程环境下的进程控制语义单线程环境下的进程控制接口在多线程环境下语义可能会发生变化,包括进程创建、进程终止、进程执行、信号处理等操作。

进程创建创建进程的系统调用完成后,被创建的新进程复制调用进程的内容,当进程的一个线程中创建一个子进程,新的进程可以复制整个进程(包括所有线程)也可以只复制调用线程的内容;执行新的程序在进程中执行新的程序,函数的语义在多线程环境下没有发生大的变化。exec将会终止所有的线程,用新的程序覆盖进程的地址空间,并开始执行新的程序;多线程环境下的进程控制语义进程结束在任何一个线程中调用exit将会结束整个进程,另外从主线程返回也等同于调用exit而导致进程结束。如果要从线程中退出则调用专用的线程退出函数。信号处理信号是UNIX系统中通知进程的重要机制。信号可能是同步的也可能是异步的。发送给进程的信号在多线程环境下有多种选择:发送给引发信号的线程;发送给所有的线程;发送个特定的线程;指定一个线程处理所有的信号。多线程带来的问题由于线程共享同一进程的内存空间,多个线程可能需要同时访问同一个数据。对共享数据的并发访问可能导致数据的不一致性.如果没有正确的保护措施,对共享数据的访问会造成数据的不一致和错误。竞争条件若干进程并发地访问并且操纵共享数据的情况;共享数据的值取决于哪个进程最后完成;防止竞争条件,并发进程必须被同步.线程的同步例:如果一个进程有一个共享变量counter,两个线程producer和consumer,线程producer执行counter++,线程consumer执行counter--,这两个操作都需要多个机器指令来完成,Counter=5counter++counter--register1=counterregister2=counterregister1=register1+1register2=register2-1counter=register1counter=register2可能的序列:Producer:register1=counter(register1=5)Producer:register1=register1+1(register1=6)Consumer:register2=counter(register2=5)Consumer:register2=register2-1(register2=6)Producer:counter=register1(counter=6)Consumer:counter=register2(counter=4)线程的同步同步:一组进程(线程),为了协调其推进速度,在某些点处需要相互等待与相互唤醒,进程之间这种相互制约的关系称作进程同步,简称同步(synchronization).进程同步是进程之间直接的相互作用形式,是合作进程之间有意识的行为,这种相互作用只发生在相关的进程之间。进程合作(cooperation):一组进程,如果它们单独不能正常进行,但并发可以正常进行,称这种现象为进程合作,参与合作的进程称作合作进程(cooperatingprocess)。线程的同步同步例子:要求:(1)关车门后方能启动车辆;(2)到站停车后方能开车门.同步机制

同步机制:用于实现进程间同步的工具称作同步机制,亦称同步设施(synchronizationmechanism)同步机制应当满足如下几个基本要求:描述能力够用:即用此种同步机制应当能够描述操作系统及并发程序设计中所遇到的各种同步问题;可以实现;效率高;使用方便。顺序程序程序的顺序性包括内部顺序性和外部顺序性。内部顺序性:对于一个进程来说,它的所有指令是按序执行的;外部顺序性,对于多个进程来说,所有进程是依次执行的。P1活动:a1a2a3a4,P2活动:b1b2b3b4顺序执行时,有如下两种情形:情形1:a1a2a3a4b1b2b3b4情形2:b1b2b3b4a1a2a3a4线程的同步顺序程序的特性顺序性:处理机严格按照指令次序依次执行,即仅当一条指令执行完后才开始执行下一条指令;封闭性:程序在执行过程中独占系统中的全部资源,该程序的运行环境只与其自身动作有关,不受其它程序及外界因素影响;可再现性:程序的执行结果与执行速度无关,而只与初始条件有关,给定相同的初始条件,程序的任意多次执行一定得到相同的执行结果.线程的同步并发程序程序的并发性含义:内部并发性,对于一个进程来说,它的所有指令可能按序执行,也可能不按次序执行;外部并发性:对于多个进程来说,所有进程是交叉(interleave)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论