并行计算机系统1培训课件.ppt

  1. 1、本文档共96页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程化 例1 编译器通常会将循环不变的读操作移到循环之外,这样读操作就只会进行一次,而不是每次迭代都执行一次。在多线程的情况下,这样做会产生什么问题? for (i=0; i<100; i++0) { int x; x = GlobalX; . . . } int x = GlobalX; for (i=0; i<100; i++0) { . . . } 多线程化 例2 指令调度时通常可以将一条load指令提到它前面的的一条与之不相关的store指令之前执行,在多线程的情况下,这样做会产生什么问题? 多线程化 线程化的优点 创建速度较进程快 资源利用率高 便于数据共享 线程化的缺点 增加程序设计的复杂性 程序调试较难 数据竞争、同步、死锁 多线程并行程序设计方法 任务划分 将一个任务划分成多个并行子任务 使得处理器负载平衡 数据划分 将数据对象划分成多个并行子集 提高访存的效率以及cache的命中率 数据流划分 根据数据处理的过程划分 一个子任务的输出是另一个子任务的输入 划分的目标 负载平衡 降低调度开销、通信开销和同步开销 任务与线程 任务task 应用级的计算单位 单任务线程 为每个任务动态创建和终止 创建和终止开销问题 大量线程时的开销 线程池 预先创建的固定数量的线程 与处理器数量匹配 可完成多个任务 应用程序中动态任务分配和调度 线程中任意时刻只能运行一个纤程 1 1 1 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 6 6 7 9 8 3 8 3 3 8 8 9 1 10 7 6 11 多线程并行程序设计方法 任务划分的例子 按颜色划分 按区域划分 同步机制 临界区critical section 访问共享数据的程序段 在某段时间内仅允许一定数目的线程访问的一段代码 大多数情况下一次只有一个线程能够进入同一个临界区 可采用互斥机制实现 同步机制 共享存储器型多处理机 信号量 PV操作 互斥机制 锁 条件变量 屏障 栅栏 消息传递型多处理机 消息的发送和接收 信号量 通过PV操作在线程间传递同步信息 P操作将一个变量减1 减后的变量小于0时线程被阻塞 V操作将一个变量加1 加后的变量大于或等于0时释放一个线程 变量初始化为0或1 互斥量Mutex PV操作都是原子的 不可中断的操作 用于保护共享的资源 生产者-消费者问题 锁 两个基本的原子操作 Acquire 原子地等待锁的状态变成打开的状态 将打开的锁状态变成关闭的状态 这时该线程获得了锁 Release 原子地将锁的状态从关闭状态变成打开的状态 这时线程释放了锁 锁的类型 互斥量 用PV操作上锁和解锁 有阻塞 可以加上时间属性 递归锁 可以递归地获得的锁 用于递归程序 读写锁 多读单写锁 限制写操作只能由一个线程执行 用于对共享变量的读写操作 自旋锁 非阻塞的锁 用于多处理机系统和多核系统 阻塞型锁机制的问题 优先级的颠倒priority inversion 当一个低优先级的线程占用了一个锁之后,需要同一个锁的高优先级线程就只能等待。 护航Convoying 当一个线程拥有一个锁而被切换出去时其他的线程如果需要同一个锁的话都不能运行下去 其他线程都围着拥有锁的线程团团转 死锁Deadlock 锁的拥有和依赖关系形成一个环 死锁及其解决 死锁的原因 对资源(锁)的访问是独占的 线程在已经持有一个资源时继续请求其他资源 所有线程都不放弃已经持有的资源 线程对资源的请求形成一个环 解决方法 复制需要独占访问的资源 按照一定的顺序获取资源 有序嵌套 无法获取其他资源时放弃已持有的资源 调用构件时避免使用锁 条件变量 基于信号量机制 但操作不涉及存储的数值 等待的线程被阻塞 条件满足时才被唤醒 而不是循环等待 满足条件时唤醒其他协作的线程 三种操作 等待 发信号 广播 栅栏与屏障 栅栏fence 通过指令实现 保证存储器操作的一致性 保证所有在栅栏之前的访存操作完成 在此之前停下所有在栅栏之后的访存操作 屏障barrier 线程执行的协调机制 通过同步机制实现 运行的线程必须等待所有的线程都运行到指定同步点 然后各线程才继续下一步的运行 需要对到达的线程进行原子的计数操作 同步操作中的硬件原语 原子交换atomic exchange 实现锁 测试并设置test-and-set 实现锁 读取并加1fetch-and-increment 实现屏障 读取并更新test-and-update 实现PV操作 原子交换 将一个寄存器的数值与一个存储器中的数值进行交换 难以在并行机中实现 it requires both a memo

文档评论(0)

youngyu0318 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档