多核体系结构与并行编程模型计算机科学导论第八讲ppt课件_第1页
多核体系结构与并行编程模型计算机科学导论第八讲ppt课件_第2页
多核体系结构与并行编程模型计算机科学导论第八讲ppt课件_第3页
多核体系结构与并行编程模型计算机科学导论第八讲ppt课件_第4页
多核体系结构与并行编程模型计算机科学导论第八讲ppt课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、多核体系构造与并行编程模型多核体系构造与并行编程模型计算机科学导论第八讲计算机科学导论第八讲计算机科学技术学院计算机科学技术学院陈意云陈意课课 程程 内内 容容 课程内容课程内容 围绕学科实际体系中的模型实际围绕学科实际体系中的模型实际, 程序实际和程序实际和计算实际计算实际 1. 模型实际关怀的问题模型实际关怀的问题 给定模型给定模型M,哪些问题可以由模型,哪些问题可以由模型M处理处理;如何比较模型的表达才干;如何比较模型的表达才干 2. 程序实际关怀的问题程序实际关怀的问题 给定模型给定模型M,如何用模型,如何用模型M处理问题处理问题

2、包括程序设计范型、程序设计言语、程序设包括程序设计范型、程序设计言语、程序设计、方式语义、类型论、程序验证、程序分计、方式语义、类型论、程序验证、程序分析等析等 3. 计算实际关怀的问题计算实际关怀的问题给定模型给定模型M和一类问题和一类问题, 处理该类问题需多处理该类问题需多少资源少资源讲讲 座座 提提 纲纲 根本知识根本知识 多核体系构造、并行编程模型多核体系构造、并行编程模型 内存一致性模型内存一致性模型 严厉一致性模型、顺序一致性模型、内存一严厉一致性模型、顺序一致性模型、内存一致性模型的重要性致性模型的重要性 共享内存并行编程模型共享内存并行编程模型 同步、锁、临界区、条件变量、死锁

3、、数据同步、锁、临界区、条件变量、死锁、数据竞争竞争 音讯传送并行编程模型音讯传送并行编程模型 音讯传送、同步与异步音讯传送、同步与异步 对称多处置器对称多处置器 对称多处置器的体系构造对称多处置器的体系构造二级二级缓存缓存内存内存总线总线二级二级缓存缓存二级二级缓存缓存二级二级缓存缓存一级一级缓存缓存一级一级缓存缓存一级一级缓存缓存一级一级缓存缓存处置器处置器处置器处置器处置器处置器处置器处置器基基 本本 知知 识识 必需在必需在处置器的处置器的缓存中找缓存中找到它操作到它操作的大部分的大部分数据,以数据,以保证性能保证性能 经过共享内存来进展通讯 几个概念的粗略解释几个概念的粗略解释 义务

4、:普通性的笼统术语,指由软件完成的义务:普通性的笼统术语,指由软件完成的一个活动。例如,矩阵分块乘就是把矩阵乘一个活动。例如,矩阵分块乘就是把矩阵乘分成多个义务分成多个义务, 以便于在对称多处置器上并行以便于在对称多处置器上并行执行这些义务执行这些义务 进程:义务在程序中的对应物,它有本人的进程:义务在程序中的对应物,它有本人的数据和代码,需求在处置器上运转直至终了数据和代码,需求在处置器上运转直至终了。进程是操作系统进展资源分配和调度的独。进程是操作系统进展资源分配和调度的独立单位立单位 线程:是把进程细分出现的实践运转单位,线程:是把进程细分出现的实践运转单位,线程是进程中一段顺序执行的语

5、句序列。把线程是进程中一段顺序执行的语句序列。把进程分成假设干线程是为了提高进程执行过进程分成假设干线程是为了提高进程执行过程中的并行性。线程是操作系统调度的根本程中的并行性。线程是操作系统调度的根本单位单位 下面未严厉区分进程和线程下面未严厉区分进程和线程基基 本本 知知 识识 几个概念的粗略解释几个概念的粗略解释 并行并行(parallel): 多个可以同时执行的义务,在多个可以同时执行的义务,在多处置器上同时执行多处置器上同时执行 并发并发(cuncorrent):多个可以同时执行的义务:多个可以同时执行的义务,在单处置器上交错执行,在单处置器上交错执行并发是逻辑上同时发生,而并行是物理

6、上并发是逻辑上同时发生,而并行是物理上同时发同时发 生。下面不区分并行和并发生。下面不区分并行和并发基基 本本 知知 识识tABtAB 对称多处置器对称多处置器 对称多处置器的体系构造对称多处置器的体系构造二级二级缓存缓存内存内存总线总线二级二级缓存缓存二级二级缓存缓存二级二级缓存缓存一级一级缓存缓存一级一级缓存缓存一级一级缓存缓存一级一级缓存缓存处置器处置器处置器处置器处置器处置器处置器处置器基基 本本 知知 识识 多个高性能处置器多个高性能处置器可以集成在一块芯片可以集成在一块芯片上上基基 本本 知知 识识 单核构造与多核系统构造单核构造与多核系统构造执行单元执行单元 缓存缓存CPU形状形

7、状中断逻辑中断逻辑执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑单核构造单核构造多处置器构造多处置器构造执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑CPU形状形状中断逻辑中断逻辑超线程构造超线程构造 超线程技术充分利用执行超线程技术充分利用执行单元中的空闲资源,以便在单元中的空闲资源,以便在一样时间内完成更多任务一样时间内完成更多任务 执行单元中的资源:内存执行单元中的资源:内存访问部件、算术运算部件和访问部件、算术运算部件和浮点功能部件等浮点功能部件等基基 本本 知知 识识 单核构造与多核系统构造单核构造与多核系统

8、构造执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑单核构造单核构造多处置器构造多处置器构造执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑CPU形状形状中断逻辑中断逻辑超线程构造超线程构造 超线程技术本质上就是多超线程技术本质上就是多个线程共享一个执行核个线程共享一个执行核 两套两套CPU形状形状 +中断逻辑中断逻辑是为了顺应两个线程同时执是为了顺应两个线程同时执行的需求行的需求基基 本本 知知 识识 单核构造与多核系统构造单核构造与多核系统构造共享缓存的多核体系构

9、造共享缓存的多核体系构造执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑执行单元执行单元 缓存缓存CPU形状形状中断逻辑中断逻辑多核体系构造多核体系构造执行单元执行单元缓缓 存存CPU形状形状中断逻辑中断逻辑执行单元执行单元CPU形状形状中断逻辑中断逻辑 多核处置器是把两个甚至更多的独立执行核嵌入到一个处置器的内部,每个线程都有完好的硬件执行环境,各线程之间实现了真正意义上的并行基基 本本 知知 识识 单核构造与多核系统构造单核构造与多核系统构造体系构造越来越复杂,假设这些复杂的特体系构造越来越复杂,假设这些复杂的特征都要反征都要反 映到编程言语中,才干写出较好利用体系构映到编程言语中

10、,才干写出较好利用体系构造优点造优点 的程序,那么编写程序将是很困难的任务的程序,那么编写程序将是很困难的任务需求设计好的编程模型并经过编译器和操需求设计好的编程模型并经过编译器和操作系统作系统 的协助和支持来处理的协助和支持来处理采用超线程技术的多核体系构造采用超线程技术的多核体系构造执行单元执行单元缓存缓存CPU形状形状中断逻辑中断逻辑CPU形状形状中断逻辑中断逻辑执行单元执行单元缓存缓存CPU形状形状中断逻辑中断逻辑CPU形状形状中断逻辑中断逻辑基基 本本 知知 识识 并行编程模型并行编程模型 是底层体系构造与上层运用程序之间的桥梁是底层体系构造与上层运用程序之间的桥梁 向上隐藏并行处置

11、器的细节,并向程序员提向上隐藏并行处置器的细节,并向程序员提供表达并行的方法供表达并行的方法 向下充分利用硬件资源,高效且正确地完成向下充分利用硬件资源,高效且正确地完成运用需求运用需求 义务划分、义务映射、数据分布、通讯和同义务划分、义务映射、数据分布、通讯和同步是设计并行编程模型时需求思索的五个关步是设计并行编程模型时需求思索的五个关键要素键要素 并行编程模型的另一种说法并行编程模型的另一种说法 并行编程模型是编写可被编译和运转的并行并行编程模型是编写可被编译和运转的并行程序的一种模型程序的一种模型基基 本本 知知 识识 并行编程模型的分类并行编程模型的分类 1. 按进程交互的机制来分按进

12、程交互的机制来分 共享内存模型:进程共享可以异步地读写的共享内存模型:进程共享可以异步地读写的全局数据空间全局数据空间 音讯传送模型音讯传送模型: 进程经过相互传送音讯来交换进程经过相互传送音讯来交换数据数据 隐式模型:进程之间交互是用户不可访问的隐式模型:进程之间交互是用户不可访问的 2. 按问题分解按问题分解 义务并行:每个处置器执行不同的义务义务并行:每个处置器执行不同的义务 数据并行:把大义务分别成假设干个一样的数据并行:把大义务分别成假设干个一样的子义务子义务 3. 内存一致性模型内存一致性模型 内存一致性模型内存一致性模型 描画的是,在有共享内存的多处置器系统上描画的是,在有共享内

13、存的多处置器系统上,在它们读写共享内存操作的能够执行顺序,在它们读写共享内存操作的能够执行顺序中,哪些顺序是正确的中,哪些顺序是正确的 内存一致性模型是了解并行程序语义的一个内存一致性模型是了解并行程序语义的一个关键关键 为确保写出正确的并行程序,程序员必需准为确保写出正确的并行程序,程序员必需准确了解并行程序的语义确了解并行程序的语义 随着多核处置器的广泛运用,并行程序设计随着多核处置器的广泛运用,并行程序设计曾经由一种特殊的、只需少数高端技术人才曾经由一种特殊的、只需少数高端技术人才掌握的技巧,变为一种大多数程序员都应该掌握的技巧,变为一种大多数程序员都应该掌握的根本技艺掌握的根本技艺内存

14、一致性模型内存一致性模型 严厉一致性原子一致性模型严厉一致性原子一致性模型任何对内存位置任何对内存位置x的读操作,得到的是最的读操作,得到的是最近一次对近一次对 x的写操作所写入的值的写操作所写入的值 单处置器遵守严厉一致性单处置器遵守严厉一致性 下面下面, P1和和P2是处置器是处置器, x是共享变量是共享变量, 初值初值是是0。 W(x)1表示表示: 把把1写到写到x中;中;R(x)3表示表示: 读取读取x,得值得值3 P1: W(x)1 P1: W(x)1 P2: R(x)1 R(x)1 P2: R(x)0 R(x)1 P1: W(x)1 P2: R(x)0 R(x)1ttt 左边不符合

15、严厉一致性 多处置器+共享内存时, 会出现读写或写写操作的冲突 顺序一致性模型顺序一致性模型 比严厉一致性弱的模型比严厉一致性弱的模型 在多处置器共享内存情况下,每个处置器执在多处置器共享内存情况下,每个处置器执行的单个线程严厉按照程序规定的顺序逐语行的单个线程严厉按照程序规定的顺序逐语句地进展内存访问操作句地进展内存访问操作 比顺序一致性还弱的统称为弱内存模型不比顺序一致性还弱的统称为弱内存模型不同情况有不同称号同情况有不同称号 大多数程序员假定并行程序的运转满足顺序大多数程序员假定并行程序的运转满足顺序一致一致 性,但现实中几乎一切的并行程序都在某种性,但现实中几乎一切的并行程序都在某种弱

16、内存弱内存 模型下运转,而且不同的并行言语和处置器模型下运转,而且不同的并行言语和处置器的内存的内存 模型不同模型不同内存一致性模型内存一致性模型 顺序一致性模型顺序一致性模型 例:互斥运用临例:互斥运用临 界区的并行线程界区的并行线程 假设两个线程严厉按照给出的语句顺序逐假设两个线程严厉按照给出的语句顺序逐条执行,条执行, 那么它们能实现互斥功能,由于那么它们能实现互斥功能,由于r1和和r2不能不能够同时为够同时为0现实中,编译器和处置器内部进展的现实中,编译器和处置器内部进展的优化都会导优化都会导 致内存操作的实践顺序和代码中的语句顺序致内存操作的实践顺序和代码中的语句顺序不一致不一致,

17、使得两个条件判别都为真,两个线程都进入使得两个条件判别都为真,两个线程都进入临界区临界区内存一致性模型内存一致性模型x和和y: 共享变量共享变量, 初始初始:x = 0, y = 0 x = 1;y = 1;r1 = y;r2 = x;if (r1= 0)if (r2= 0) critical region critical region 内存一致性模型的重要性内存一致性模型的重要性 它作为系统实现和程序员之间的接口,对处它作为系统实现和程序员之间的接口,对处置器体系构造的实现、并行言语的实现、并置器体系构造的实现、并行言语的实现、并行程序的开发和验证都有重要意义行程序的开发和验证都有重要意义

18、 以并行言语的设计和实现为例以并行言语的设计和实现为例 编译器的优化算法会调整源程序中的内存操编译器的优化算法会调整源程序中的内存操作顺序,使得目的程序和源程序的顺序不一作顺序,使得目的程序和源程序的顺序不一致致 目的程序的执行顺序又能够被处置器进一步目的程序的执行顺序又能够被处置器进一步改动改动 并行言语的设计和实现必需思索到这两种情并行言语的设计和实现必需思索到这两种情况及其效果的叠加,对源程序能够表现出的况及其效果的叠加,对源程序能够表现出的行为进展准确描画行为进展准确描画(并行言语的内存模型并行言语的内存模型),便,便于正确编程于正确编程内存一致性模型内存一致性模型 编程言语内存一致性

19、模型的现状编程言语内存一致性模型的现状由于优化算法的多样性,编程言语内存模由于优化算法的多样性,编程言语内存模型比体型比体 系构造的内存模型复杂系构造的内存模型复杂 Gosling等为第一版等为第一版Java言语给出的内存一致言语给出的内存一致性模型性模型, 无法支持常用的优化算法无法支持常用的优化算法, 是一个失是一个失败的模型败的模型 Manson等给出的等给出的Java模型,虽被言语新规范模型,虽被言语新规范所采用,但模型非常晦涩,是所采用,但模型非常晦涩,是Java言语中最言语中最复杂部分复杂部分, 极少有人能正确了解其含义极少有人能正确了解其含义 Boehm和和Adve试图为试图为C

20、+提供一个简单的模提供一个简单的模型,但很多地方有歧义或不明晰型,但很多地方有歧义或不明晰内存一致性模型内存一致性模型共享内存并行编程模型共享内存并行编程模型 运用共享内存的错误例子运用共享内存的错误例子 并行计算并行计算Fibonacci序列下一个元素的两个线序列下一个元素的两个线程程 对两个线程的执行没有任何约束对两个线程的执行没有任何约束 下面是两个线程某次并行时的语句执行顺序下面是两个线程某次并行时的语句执行顺序prev和和curr: 初值分为初值分为0和和1的共享变量的共享变量int retval; int retval;retval = curr; retval = curr; c

21、urr = curr+prev; curr = curr+prev; prev = retval; prev = retval; t共享内存并行编程模型共享内存并行编程模型 运用共享内存的错误例子运用共享内存的错误例子 并行计算并行计算Fibonacci序列下一个元素的两个线序列下一个元素的两个线程程 对两个线程的执行没有任何约束对两个线程的执行没有任何约束 下面是两个线程某次并行时的语句执行顺序下面是两个线程某次并行时的语句执行顺序prev和和curr: 初值分为初值分为0和和1的共享变量的共享变量int retval; int retval;retval = curr; retval =

22、curr; curr = curr+prev; curr = curr+prev; prev = retval; prev = retval; t111111共享内存并行编程模型共享内存并行编程模型 运用共享内存的错误例子运用共享内存的错误例子 并行计算并行计算Fibonacci序列下一个元素的两个线序列下一个元素的两个线程程 对两个线程的执行没有任何约束对两个线程的执行没有任何约束 下面是两个线程某次并行时的语句执行顺序下面是两个线程某次并行时的语句执行顺序 显然结果显然结果 不对不对 缘由:缘由: 对共享变对共享变 量的访问缺量的访问缺 乏约束乏约束prev和和curr: 初值分为初值分为

23、0和和1的共享变量的共享变量int retval; int retval;retval = curr; retval = curr; curr = curr+prev; curr = curr+prev; prev = retval; prev = retval; t111111共享内存并行编程模型共享内存并行编程模型 同步同步 同步是对线程执行的顺序进展强行限制的一同步是对线程执行的顺序进展强行限制的一种机制,用来控制线程执行的相对顺序,可种机制,用来控制线程执行的相对顺序,可以有效处理任何线程之间的冲突,而这些冲以有效处理任何线程之间的冲突,而这些冲突有能够会导致线程的执行出现异常行为突有

24、能够会导致线程的执行出现异常行为 简言之,同步主要用于协调线程执行和管理简言之,同步主要用于协调线程执行和管理共享数据共享数据 同步机制同步机制 信号量、锁又可细分成多种、条件变量信号量、锁又可细分成多种、条件变量、共享内存并行编程模型共享内存并行编程模型 锁锁 用来表达一种互斥的并行控制战略用来表达一种互斥的并行控制战略 一个线程在同一个时辰只能运用一个锁,一一个线程在同一个时辰只能运用一个锁,一个锁至多由一个线程获得。锁有两个原子操个锁至多由一个线程获得。锁有两个原子操作:作: 1. acquire: 等待锁状等待锁状 态变为未加态变为未加 锁形状,然锁形状,然 后将其置为后将其置为 已加

25、锁形状已加锁形状prev和和curr: 初值分为初值分为0和和1的共享变量的共享变量L是锁是锁int retval; int retval;L-acquire(); L-acquire();retval = curr; retval = curr;curr = curr+prev; curr = curr+prev;prev = retval; prev = retval; 共享内存并行编程模型共享内存并行编程模型 锁锁 用来表达一种互斥的并行控制战略用来表达一种互斥的并行控制战略 一个线程在同一个时辰只能运用一个锁,一一个线程在同一个时辰只能运用一个锁,一个锁至多由一个线程获得。锁有两个原子

26、操个锁至多由一个线程获得。锁有两个原子操作:作: 2. release: 将锁形状将锁形状 由已加锁变由已加锁变 为未加锁为未加锁prev和和curr: 初值分为初值分为0和和1的共享变量的共享变量L是锁是锁int retval; int retval;L-acquire(); L-acquire();retval = curr; retval = curr;curr = curr+prev; curr = curr+prev;prev = retval; prev = retval;L-release(); L-release(); 共享内存并行编程模型共享内存并行编程模型 临界区临界区cr

27、itical section指包含有共享变量的一段代码,这些共享指包含有共享变量的一段代码,这些共享变量和变量和 多个线程之间存在相关关系多个线程之间存在相关关系多线程编程的主要挑战在于需求以多个线多线程编程的主要挑战在于需求以多个线程执行程执行 互斥操作的互斥操作的 方式实现临方式实现临 界区,以保界区,以保 证多个线程证多个线程 不会同时访不会同时访 问临界区问临界区prev和和curr: 初值分为初值分为0和和1的共享变量的共享变量L是锁是锁int retval; int retval;L-acquire(); L-acquire();retval = curr; retval = cu

28、rr;curr = curr+prev; curr = curr+prev;prev = retval; prev = retval;L-release(); L-release(); 条件变量条件变量 例:消费者例:消费者/消费者问题消费者问题 一个典型的同步问题一个典型的同步问题 也称有限缓冲区问题也称有限缓冲区问题 消费者向缓冲区中写入消费者向缓冲区中写入数据数据 消费者从缓冲区获得数消费者从缓冲区获得数据并对数据进展操作据并对数据进展操作 消费者和消费者并行执消费者和消费者并行执行行共享内存并行编程模型共享内存并行编程模型void producer() / 临界区开场临界区开场 / 产

29、生下一个数据产生下一个数据 / 临界区终了临界区终了void consumer() / 临界区开场临界区开场 / 消费下一个数据消费下一个数据 / 临界区终了临界区终了 条件变量条件变量右边是消费者线程,条右边是消费者线程,条 件变量件变量C运用锁运用锁L来完成来完成 对共享数据的访问,可对对共享数据的访问,可对 条件变量条件变量C执行执行3种原子操种原子操 作作LC 的初值为的初值为false 1. wait(L): 释放本身持有释放本身持有 的锁并处于的锁并处于C的等待队列。的等待队列。 执行终了时,锁已被其他执行终了时,锁已被其他 线程获得线程获得共享内存并行编程模型共享内存并行编程模型

30、void producer() while(1) L-acquire(); / 临界区开场临界区开场 while(LC = true) C-wait(L); / 产生下一个数据产生下一个数据 LC = true; C-signal(L); / 临界区终了临界区终了 L-release(); 条件变量条件变量右边是消费者线程,条右边是消费者线程,条 件变量件变量C运用锁运用锁L来完成来完成 对共享数据的访问,可对对共享数据的访问,可对 条件变量条件变量C执行执行3种原子操种原子操 作作LC 的初值为的初值为false 2. signal(L): 发信号,允许发信号,允许 等待等待C的一个线程往下

31、执的一个线程往下执 行。该操作终了后,锁仍行。该操作终了后,锁仍 然被发信号的线程持有然被发信号的线程持有共享内存并行编程模型共享内存并行编程模型void producer() while(1) L-acquire(); / 临界区开场临界区开场 while(LC = true) C-wait(L); / 产生下一个数据产生下一个数据 LC = true; C-signal(L); / 临界区终了临界区终了 L-release(); 条件变量条件变量右边是消费者线程,条右边是消费者线程,条 件变量件变量C运用锁运用锁L来完成来完成 对共享数据的访问,可对对共享数据的访问,可对 条件变量条件变量

32、C执行执行3种原子操种原子操 作作LC 的初值为的初值为false 3. broadcast(L): 发信号,发信号, 允许一切等待允许一切等待C的线程往的线程往 下执行。该操作终了后下执行。该操作终了后, 锁锁 依然被发信号的线程持有依然被发信号的线程持有共享内存并行编程模型共享内存并行编程模型void producer() while(1) L-acquire(); / 临界区开场临界区开场 while(LC = true) C-wait(L); / 产生下一个数据产生下一个数据 LC = true; C-signal(L); / 临界区终了临界区终了 L-release(); 消费者消费

33、者/消费者问题消费者问题 void producer() void consumer() while(1) while(1) L-acquire(); L-acquire(); / 临界区开场临界区开场 / 临界区开临界区开场场 w h i l e ( L C = = t r u e ) w h i l e ( L C = = f a l s e ) C-wait(L); C-wait(L); / 产生下一个数据产生下一个数据/ 消费下一消费下一个数据个数据 LC = true;LC = false; C-signal(L);C-signal(L); / 临界区终了临界区终了/ 临界区终临界区

34、终了了 L-release();L-release() 共享内存并行编程模型共享内存并行编程模型Conditon C; Lock L;BooL LC = false; 条件变量条件变量条件变量本身本质上条件变量本身本质上 并没有需求检验的条件并没有需求检验的条件 值,而是运用共享数据值,而是运用共享数据 的形状来保管线程的条的形状来保管线程的条 件值,用于多线程之间件值,用于多线程之间 关于共享数据形状变化关于共享数据形状变化 的通讯的通讯 当特定条件满足时,当特定条件满足时, 线程等待或者唤醒其他线程等待或者唤醒其他 协作线程协作线程共享内存并行编程模型共享内存并行编程模型void prod

35、ucer() while(1) L-acquire(); / 临界区开场临界区开场 while(LC = true) C-wait(L); / 产生下一个数据产生下一个数据 LC = true; C-signal(L); / 临界区终了临界区终了 L-release(); 死锁死锁当一个线程因等待另一个线程的资源当一个线程因等待另一个线程的资源而阻塞,而而阻塞,而 同时该资源永远不会被释放同时该资源永远不会被释放 自死锁或递归死锁:线程自死锁或递归死锁:线程T试图获得一个锁,试图获得一个锁,而该锁已被线程而该锁已被线程T本人拥有本人拥有 错序死锁:线程错序死锁:线程T1占有资源占有资源r1并等

36、待由线程并等待由线程T2占有资源占有资源r2;而线程;而线程T2占有资源占有资源r2并等待并等待由线程由线程T1占有资源占有资源r1 编程中的问题:怎样防止出现死锁编程中的问题:怎样防止出现死锁共享内存并行编程模型共享内存并行编程模型 数据竞争数据竞争多个并行线程都访问某个共享变量多个并行线程都访问某个共享变量v,其,其中至少有中至少有 一个线程修正一个线程修正v ,并且这些线程没有运用锁来,并且这些线程没有运用锁来控制控制 它们对它们对v的访问的访问 在有数据竞争的场所,各线程对数据的访问在有数据竞争的场所,各线程对数据的访问次序是不确定的,计算结果依赖于这个次序次序是不确定的,计算结果依赖

37、于这个次序 数据竞争有时是共享数据和通讯的一种方式数据竞争有时是共享数据和通讯的一种方式,但多数情况下属于程序错误,但多数情况下属于程序错误 编程中的问题:怎样发现程序中的数据竞争编程中的问题:怎样发现程序中的数据竞争共享内存并行编程模型共享内存并行编程模型 音讯传送音讯传送 音讯传送是进程之间交换信息的一种方式,音讯传送是进程之间交换信息的一种方式,运用共享变量是另一种方式运用共享变量是另一种方式 在音讯传送场所下,由于一个音讯在被接纳在音讯传送场所下,由于一个音讯在被接纳者接纳之前,必需由发送者发送,因此隐含者接纳之前,必需由发送者发送,因此隐含了同步机制了同步机制 音讯传送可以在分布式系

38、统、共享内存的多音讯传送可以在分布式系统、共享内存的多处置器系统和单处置器系统中实现。在分布处置器系统和单处置器系统中实现。在分布式系统上实现共享变量有较大难度式系统上实现共享变量有较大难度 实现音讯传送依托两个通讯原语:实现音讯传送依托两个通讯原语:send和和receive音讯传送并行编程模型音讯传送并行编程模型 音讯传送的发送和接纳对象音讯传送的发送和接纳对象 进程对进程的传送:两个进程不依赖于线程进程对进程的传送:两个进程不依赖于线程自行进展通讯,是最常见的音讯传送方式自行进展通讯,是最常见的音讯传送方式 进程间的传送:属于不同进程的线程之间进进程间的传送:属于不同进程的线程之间进展通

39、讯展通讯 进程内的传送:属于同一个进程的线程之间进程内的传送:属于同一个进程的线程之间进展通讯进展通讯音讯传送并行编程模型音讯传送并行编程模型 音讯传送的同步与异步音讯传送的同步与异步 同步:音讯发送后,发送者必需等待,直到同步:音讯发送后,发送者必需等待,直到接纳者的呼应才干进展其他操作接纳者的呼应才干进展其他操作 异步:发送者不用等待接纳者的呼应就可以异步:发送者不用等待接纳者的呼应就可以继续执行继续执行 对于采用共享存储模型的系统来说,音讯传对于采用共享存储模型的系统来说,音讯传送必需是同步的送必需是同步的 对于采用分布式存储模型的系统来说,音讯对于采用分布式存储模型的系统来说,音讯传送那么是异步的传送那么是异步的音讯传送并行编程模型音讯传送并行编程模型 用音讯传送机制处理消费者用音讯传送机制处理消费者/消费者问题消费者问题 void producer() void consumer() message pmsg; message cmsg; while (1) while (1) r e c e i

温馨提示

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

评论

0/150

提交评论