多核多线程期末考试复习完美总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Intel® Parallel Studio 2011
• Family of Parallel Programming Models
• Intel® Parallel Advisor – parallelism design innovation • General Enhancements • Supports Visual Studio 2010
微处理器发展史
• 1945年,世界上第一台全自动电子数字计算机ENIAC。 • 处理器发展
• 第一代(1971~1973):4 位或 8 位微处理器。代表:8008 • 第二代(1974~1977):集成度提高1-4倍,运算速度提高10-15 倍。代表:Z80,8080 • 第三代(1978~1984):16位。代表:8086 • 第四代(1985~1992):32 位微处理器,代表80386 • 第五代微处理器(1993—1995 年),64位数据总线,32位地址总线, CPU内部采用超标量流水线设计,代表: 奔腾,K5,powerpc • 第六代(1993~2002):350nm以下工艺微处理器,平行并发计算 而设计(EPIC)架构,代表:安腾 • 多核时代(2002~今):从2002年超线程技术开始的多核时代, 代表:酷睿2
2
并行计算的弗林分类
• Flynn根据指令流和数据流的不同组织方式,把计算机 系统的结构分为以下四类:
• 单指令流单数据流(Single Instruction stream Single Data stream, SISD) • 单指令流多数据流(Single Instruction stream Multiple Data stream, SIMD) • 多指令流单数据流(Multiple Instruction stream Single Data stream, MISD) • 多指令流多数据流(Multiple Instruction stream Multiple Data stream, MIMD)
Thread类
• join方法 //合并线程 A线程中调用B.join(t),则A线程会等B线程执行t时间后执行,若调用无 参join方法,则等待B线程执行完后A线程继续执行,A、B线程合并。 • interrupt方法 //中断线程 中断处于阻塞状态的线程。 • stop方法 destroy方法 • currentThread静态方法 用来获取当前线程 eg. System.out.println(Thread.currentThread().getName()); System.out.println(Thread.currentThread().getID());
北京科技大学天津学院-信息工程系
多线程技术
• 线程的状态及其转换
进入 调度 结束
新建
就绪
超时 事件发生
执行
等待事件
终止
阻塞
北京科技大学天津学院-信息工程系
用户与操作系统的关系
普通 用户
软件设计师
应用程序
实用程序 操作系统
计算机硬件
操作系统 设计师
多核程序开发流程
开始 1.问题描述 2.是否具有并行性 和并行价值 是 3.确定分解模 式 4.设计并行算 法 5.选取一种编程模型进行实现 6.性能调优 结束 否 第二部分 编程模型与实现 第三部分 性能调优 第一部分 多核程序设计
多核程序设计
• 3.分解模式
• 任务分解 • 数据分解 • 数据流分解
北京科技大学天津学院-信息工程系
任务分解
• 示例:建造房屋
美化 屋顶 筑墙 安装电气 外部墙修饰
叠瓦
石膏板
数据分解
• 许多问题可被理解为在一个核心数据结构上的一系列操作。 • 结构中的所有元素在计算中被更新或被使用 • 数据结构被分为连续的子结构或子区域。 • Arrays: divide along one or more dimensions
北京科技大学天津学院-信息工程系
多核程序设计
• 4.相关性分析
• 解决数据依赖关系可能更复杂 • 最简单的例子是没有依赖 • 处理任务之间的数据依赖关系的战略:
• • • • 变量本地化 改造变量 规约 明确的同步机制
北京科技大学天津学院-信息工程系
多核程序设计
• 5.数据竞争
• 明显表征是内存冲突,多个线程同时访问同一内存空间, 且至少有一个线程对该内存进行更新操作。 • “抢椅子”游戏 • 读写冲突、写写冲突 • 当多个线程访问同一资源时,需要以某种顺序来确保该资 源某一时刻只能被一个线程使用,这种对线程的执行顺序 进行强制性限制的机制称为同步。
北京科技大学天津学院-信息工程系
线程同步
常用的同步机制
• • • • 临界区(critical section) 信号量(semaphore) 互斥量(mutex) 栅障(barrier)
• 锁的粒度 • 死锁
目录
• 基本线程技术 • Thread类 • 同步互斥访问
• 新特性 concurrent工具包
}
continuation
work work work
}
spawned function (child)
cilk_sync;
sync
Work Stealing
when another worker is available
void f() { steal! cilk_spawn g();
void g() {
9
多线程技术
• 进程与线程的主要区别在于:
• 进程拥有独立的地址空间,而线程和其他线程共享进程的 地址空间。 • 进程之间的通信可以使用操作系统原语或通过共享存储空 间来实现,而线程使用当前程序设计语言的原语或者通过 进程共享空间来实现通信。 • 进程上下文的切换是重量级的,进程所有状态都要保存。 而线程之间的切换是轻量级的,只需要保存当前寄存器的 状态。
• Lists: define sublists of discrete elements
• Graphs: construct subgraphs
任务分解vs数据分解
• 示例:园丁工作包括翻地和除草。
• 任务分解:两个园丁分别完成各自功能,但在工作中也需 要项目协调,两个园丁不能对同一个地方又翻地又除草。 • 数据分解:将草坪划分成两半,各自完成一半草坪的翻地 和除草工作。 • 在计算领域,采用哪种分解形式更高效取决于问题本身的限制。 如果需要修剪草坪的地块非常小以至于没必要用两个人修剪, 修剪草坪最好只被分配给一个园丁做,任务分解是最好的选择。 数据分解或许适用于其他的任务序列,例如当修剪草坪完成后, 两个园丁并行地铲除杂草。
• No 2nd thread is created or required! • If there are no available workers, then the child will execute as a serial function call. • The scheduler may steal the parent and run it in parallel with the child function. • The parent is not guaranteed to run in parallel with the child.
北京科技大学天津学院-信息工程系
多线程技术
• 进程与线程
• 程序是指令的有序集合,是一个 静态的概念。 • 进程是正在被执行的程序,是系 统进行资源分配和调度的一个独 立单位,是一个动态的概念。 • 线程是程序的有序控制流,是被 执行的指令序列。 • 线程属于进程,线程运行在进程 空间内。 • 每个进程至少包含一个主线程, 负责对进程进行初始化并开始执 行初始指令,创建其他子线程。
堆栈 主线程
堆栈 线程1
堆栈 线程N
代码段 数据段
北京科技大学天津学院-信息工程系
cilk_spawn and cilk_sync
• cilk_spawn (or _Cilk_spawn) gives the runtime permission to run a child function asynchronously.
Thread类
• 常用方法
• start方法 //启动一个线程 当调用start方法后,系统才会开启一个新的线程来执行用户定义的 子任务,在这个过程中,会为相应的线程分配需要的资源 • run方法 不需要用户来调用的,通过start方法启动一个线程之后,当线程获 得了CPU执行时间,便进入run方法体去执行具体的任务。 • sleep方法 //让线程睡眠一个时间段,让CPU去执行 其他的任务 • yield方法 //交出CPU权限 它跟sleep方法类似,但是调用yield方法并不会让线程进入阻塞状 态,而是让线程回到可运行状态,以允许具有相同优先级的其他线 程获得运行机会,这一点是和sleep方法不一样的
基本线程技术
创建线程
• 使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程
• 继承Thread类,重写run( )方法,然后通过start()方法去启动线程 • 实现Runnable接口,重写run( )方法,然后将其交由Thread去执行
北京科技大学天津学院-信息工程系
多核概念
• 单芯片多处理器(Chip Multiprocessors,简称 CMP),CMP是由美国斯坦福大学提出的,其将大规模 并行处理器中的SMP(对称多处理器)集成到同一芯 片内,各个处理器并行执行不同的进程。 • CMP vs SMT
• 同时多线程(Simultaneous Multithreading,简称SMT), 是在单物理核上增加部分硬件资源,映射单物理核为多个 物理核的技术。最早在P4处理器中出现,命名为超线程 (Hyper Threading)。 • 由于CMP结构已经被划分成多个处理器核来设计,每个核都 比较简单,有利于优化设计,因此更有发展前途。
北京科技大学天津学院-信息工程系
数据流分解
• 将一个复杂的过程划分成多个任务,这些任务按照某 种顺序执行,这种分解方式成为数据流分解。例如一 个任务需要另一个任务的输出结果,只有产生输出结 果的任务执行完毕,这个任务才能继续执行。 • 示例:一个园丁承担准备工具任务,他要完成为割草 机加油,清扫剪刀等工作。直到这些准备工作就绪后, 其他工作才能开始。著名例子是生产者-消费者问题。
work work work
cilk_sync;
work work work
}
Worker A Worker ? Worker B
work
}
Intel Parallel Advisor Offers guidance through the
methodology.
Annotation Wizard assists with the creation and insertion of Advisor annotations.
• cilk_sync (or _Cilk_sync) waits for all children to complete.
Anatomy of Hale Waihona Puke Baidu spawn void f()
spawning function (parent)
{
spawn
cilk_spawn g();
void g() {
work work work work
基本线程技术
Thread类
• Thread类实现了Runnable接口 • 关键属性
private char name[]; //线程名字 private int priority; //线程的优先级 private boolean daemon = false;//是否是守护线程 setDeamon(true) private Runnable target; //What will be run public final static int MIN_PRIORITY = 1; public final static int NORM_PRIORITY = 5; //The default priority that is assigned to a thread. • public final static int MAX_PRIORITY = 10; • • • • • •