多线程编程方法综述讲义.ppt

三种多线程编程模型 流水线 工作组 客户端/服务器 3.1 流水线编程模型 What Is Pipelining Laundry(洗衣) Example Ann, Brian, Cathy, Dave each have one load of clothes to wash, dry, and fold Washer takes 30 minutes Dryer takes 40 minutes “Folder” takes 20 minutes A B C D What Is Pipelining Sequential laundry takes 6 hours for 4 loads If they learned pipelining, how long would laundry take? A B C D 30 40 20 30 40 20 30 40 20 30 40 20 6 PM 7 8 9 10 11 Midnight T a s k O r d e r Time What Is Pipelining Start work ASAP Pipelined laundry takes 3.5 hours for 4 loads A B C D 6 PM 7 8 9 10 11 Midnight T a s k O r d e r Time 30 40 40 40 40 20 3.1 流水线编程模型 在流水线方式中,数据元素流串行地被一组线程顺序处理。 每个线程反复地在数据系列集上执行同一种操作,并把操作的结果传递给下一步骤的其他线程 3.1 流水线编程模型 3.2 工作组编程模型 数据由一组线程独立地处理 循环的“并行分解”就属于这种模式,通常这种模式称为SIMD并行处理。 也可以在不同的数据上执行不同的操作,与MIMD并行处理的定义相似。 3.2 工作组编程模型 3.3 客户端/服务器方式 客户端请求服务器对一组数据执行某个操作。 4. 多线程编程的原则及要点 负载平衡 静态负载平衡 人工地将程序分割成多个可并行执行的部分,并保证分割的各个部分能均衡地分布到各个CPU上。 动态负载平衡 程序在运行过程中来进行任务的分配达到负载平衡的目的。 如:循环的次数是由外部输入决定的 动态负载平衡中对任务的调度一般是由系统来实现的。 负载平衡的难题 程序中的可并行执行块很多要靠程序员来划分,CPU核数较少时,划分并不困难。但随着核数增多,划分的粒度将变得越来越细,划分难度增加。 负载划分的误差会随着CPU核数的增加而放大。 负载划分的难题体现在CPU核数上。 负载划分的难题体现在软件升级上。 串行化问题 加锁保护导致的串行化问题,如果任务数量固定的前提下,串行化所占的比例是随软件规模的增加而减少的,但不幸的是它会随着任务数量的增加而增加。 也就是说处理器个数越多,锁竞争导致的串行化越严重。 解决措施 少用锁,甚至采用无锁编程 使用原子操作代替锁,使用原子操作本质上并没有解决串行化的问题,只不过让串行化的速度大大提升,从而使得串行化所占执行时间比例大大下降。 从设计和算法层面来缩小串行化所占的比例。 从芯片设计方面来考虑的,在芯片层面设计一些新的并行指令 * * * * * * * * * 多线程编程方法综述 免费午餐结束了 为了充分利用多个计算核心,提高整个程序的吞吐率,主要是利用多线程 线程的基本概念 线程的同步 多线程编程模型 多线程编程的原则及要点 内容 * 1. 线程的基本概念 进程 (早期)进程作为能独立运行的基本单位。 进程是程序在计算机上的一次执行活动。 程序是死的(静态的),进程是活的(动态的)。 进程是系统进行资源分配和调度运行的一个独立单位(也称为任务)。 引入进程的目的:为了使多个程序并发执行,来改善资源利用率及提高系统的吞吐量。 引入线程的目的:为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。 线程 线程:是进程中的一个实体,是被系统调度和分配的基本单元。 每个程序至少包含一个线程,主线程。 线程拥有很少的系统资源:程序计数器、一组寄存器和栈 同一进程所属的各线程共享进程的全部资源 同一个进程中的多个线程可以并发执行,从而更好地改善了资源利用率。 1.1 线程与进程的区别 线程是轻量级的进程,是CPU调度和分配的基本单位。 传统意义的进程是重量级进程。 1.1 线程与进程的区别 调度 传统的操作系统,进程是CPU调度和分配的基本单位。 引入线程的操作系统,线程是CPU调度和分配的基本单位,而进程是资源拥有的基本单位。 进程的两个属性分开,线程轻装运行,可以显著提高系统的并发性。 同一个进程的线程切换简单。 1.1 线程与进程的区别 并发性 进程之间可以

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档