多核程序设计.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多核程序设计

计算机的发展按照硬件工艺可以分为 第一代(1946~1958):电子管数字计算机。 第二代(1958~1964):晶体管数字计算机。 第三代(1964~1971):集成电路数字计算机。 第四代(1971年以后):大规模集成电路数字计算机。 现代计算机发展历程可以分为两个明显的发展时代: 串行计算时代 并行计算时代。 并行计算机是由一组处理单元组成的,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。 并行计算机个最主要的组成部分: 计算节点 节点间的通信与协作机制 Flynn根据指令流和数据流的不同组织方式,把计算机系统的结构分为以下四类: 单指令流单数据流(SISD) 单指令流多数据流(SIMD) 多指令流单数据流(MISD) 多指令流多数据流(MIMD) 指令流(instruction stream) 指机器执行的指令序列 数据流(data stream) 指指令流调用的数据序列,包括输入数据和中间结果。 SISD 计算机是传统的顺序执行的计算机 在同一时刻只能执行一条指令(即只有一个控制流)、处理一个数据(即只有一个数据流)。 缺点: 单个处理器的处理能力有限 没有并行计算能力 在MIMD计算机中没有统一的控制部件。 在SIMD机中,各处理单元执行的是同一个程序, 而在MIMD机上,各处理器可以独立执行不同的程序。 MIMD结构比SIMD结构更加灵活。 SIMD计算机用于对不同数据的相同运算(向量和矩阵运算) 而MIMD计算机可以适应更多的并行算法 从系统结构的角度来分类,一般有以下几种: 1)对称多处理器(SMP) 2)分布式共享存储多处理机(DSM) 3)大规模并行处理机(MPP) 4)并行向量处理机(PVP) 5)集群计算机。 加速比用于衡量统一问题并行后的执行时间与最佳串行执行时间相比较的效果。 公式 加速比 = 串行时间 / 并行时间 粒度 表示程序处理数据的规模 处理的数据相对较多,称粗粒度反之称为细粒度 恰当粒度会对加速比的提高起作用 负载平衡 分配给多个线程的工作量大致相同 有效的分配: 线程执行相同的工作量 各线程尽可能同时结束 相关性分析 共享 要进行同步 降低效率 解决方法: 减少共享数据的访问 变共享为私有,消除数据的相关性 数据竞争 竞争 是并行程序的常见问题 不通过同步保证程序执行的顺序,会引发数据竞争。 数据竞争 表现:内存访问冲突. 两种可能的冲突 读写冲突 写写冲突 多线程的层次 用户级多线程(User Level Thread) 在用户层通过线程库来实现 内核级多线程(Kernel Level Thread) 由操作系统直接支持 组合多线程、 用户级线程优点: 用户级线程有关线程的所有管理工作都由在用户级实现的线程库来支持 用户级线程的创建和管理等操作无须内核参与,操作更快 用户级线程缺点: 并行性不高 一个线程被系统阻塞后,整个进程被阻塞 内核级线程 内核级线程的所有管理操作都是由操作系统内核完成 特点 并行性高 多个线程可被同时调度 充分利用多处理器 创建和管理代价高 混合多线程 用户创建的多个用户级线程被映射到一些内核线程上,内核线程的数目可能少于用户级线程的数目。 线程的生命周期 线程的标识 通常用一个整数来标识一个线程 线程的创建 自动创建从main函数开始的主线程 调用函数库接口创建一个新的线程(pthread_create) 线程的终止 执行完毕,或者调用了pthread_exit 主线程退出导致整个进程会终止 线程的状态 就绪(ready):线程等待可用的处理器。 运行(running):线程正在被执行。 阻塞(blocked):线程正在等待某个事件的发生(比如I/O的完成,试图加锁一个被上锁的互斥量)。 终止(terminated):线程从起始函数中返回或者调用pthread_exit。 创建一个新的信号量 原型: HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // SD LONG lInitialCount, // initial count LONG lMaximumCount, // maximum count LPCTSTR lpName // object name ); (1) lpSemaphoreAttributes : 定义了信号量的安全特性 NULL——表示采用默认描述符。 (2) lInitialCount Long 信号量的初始计数 可设置值: 0—(lMaximu

文档评论(0)

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

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

1亿VIP精品文档

相关文档