多核编程之挑战与应对.ppt

上传人:w****2 文档编号:16587312 上传时间:2020-10-16 格式:PPT 页数:27 大小:248.50KB
返回 下载 相关 举报
多核编程之挑战与应对.ppt_第1页
第1页 / 共27页
多核编程之挑战与应对.ppt_第2页
第2页 / 共27页
多核编程之挑战与应对.ppt_第3页
第3页 / 共27页
点击查看更多>>
资源描述
多核编程之挑战与应对 报 告 人:孔 晓 华 学号: S306060144 2007年 12月 29日 主要内容: 什么是多核 多核技术带给软件开发的挑战 如何对应多核编程革命 分块的程序设计思维 并行设计的方法 合适的编程语言选择 旧程序如何应对多核环境? 什么是多核 简单的讲,多内核是指在一枚处理器中集 成两个或多个完整的计算引擎 (内核 )。 多核处理器是多枚芯片 (也称为 “ 硅核 ” ), 能够直接插入单一的处理器插槽中,但操 作系统会利用所有相关的资源,将它的每 个执行内核作为独立的逻辑处理器。通过 在多个执行内核之间划分任务,多核处理 器可在特定的时钟周期内执行更多任务。 什么是多核 单核与多核的区别 单核处理器: 通过提高主频来提升效率,随之提高的还 有处理器的功耗和成本。 多核处理器: 通过多核结构的并行计算提高效率,功耗 小,但是单个任务的处理速度不会提升。 多核的好处 首先,由于是多个执行内核可以同时进行运算, 因此可以显著提升计算能力,而每个内核的主 频可以比以前低,因而总体功耗增加不太大。 其次,与多 CPU相比,多核处理器采用与单 CPU相同的硬件机构,用户在提升计算能力的 同时无需进行任何硬件上的改变,这对用户来 说非常方便。 正是由于多核的这些优点,所以,多核很快被 用户接受,并得以普及。 多核带来的挑战 毫无疑问,多核给我们提供了更经济的计算能 力。但是,这种能力能否善加利用还要取决于 软件。 如果不针对多核进行软件开发,不仅多核提供 的强大计算能力得不到利用,相反还有可能不 如单核 CPU好用。 “从某种程度上说,对于软件开发者而言, CPU主频提升就像是免费的午餐,此前所有的 程序很自然地会从主频的提升中受益,而如今 多核出现了,这种免费的午餐没有了。我们必 须针对多核重新进行软件设计。” 多核带来的挑战 多核对于不用应用领域的软件影响并不相同: 第一类是传统的科学计算机用户,他们的软件大部分 是高性能计算专家写的,也多是并行的,他们对 MPI ( Multi Point Interface, 多点接口 )、 OpenMP等并行 编程模型也已经掌握。 第二类是一般意义上提到的服务器,如银行以及搜狐、 Google这样的互联网公司,它们主要的业务特征是并 发的访问。这些应用具有天然的并行性,如多用户的 访问本身就是并行的。 第三类是移动用户和桌面用户,他们是面临挑战最大 的群体。这些用户的原有大部分程序都是串行的,如 大部分串行程序是用 Visual Basic语言编写。 分块的程序设计思维 线程是操作系统分配 CPU资源的最小单位,所 以如果想要设计多核并行的程序,那么我们就 要用分块思维去设计程序。 如何分块? 例 1. 统筹方法 中的泡茶问题 分块的程序设计思维 比如,想泡壶茶喝:开水没有;水壶要洗,茶壶茶杯 要洗;火生了,茶叶也有了。怎么办? 甲: 洗好水壶,灌上凉水,放在火上;在等待水开的 时间里,洗茶壶、洗茶杯、拿茶叶;等水开了, 泡茶喝。 乙:做好一些准备工作,洗水壶,洗茶壶茶杯,拿茶 叶;一切就绪,灌水烧水;坐待水开了泡茶喝。 丙:洗净水壶,灌上凉水,放在火上,坐待水开;水 开了之后,急急忙忙找茶叶,洗茶壶茶杯,泡茶 喝。 分块的程序设计思维 如果我们有两个机器人,让它们给我们泡茶 喝,那最好的方法显然是按照“办法甲”分 工:机器人 A去烧水,机器人 B洗茶具;等水 开了,泡茶喝。看,不经意间,我们就应用 了分块的思维 把不相关的事务分开给不 同的处理器执行 。 分块的程序设计思维 例 2. 有数据类型为 T的序列 A,求序列中值与 K 相等的元素个数。 分块的程序设计思维 Count(k,p,n) = Count(k,p,n/2) + Count(k,p+n/2,n-n/2) 前半段值为 K的元素个数 +后半段值为 K的元素个数 。 如果我们开启两条线程: 线程 1执行 Count(k,p,n/2), 线程 2执行 Count(k,p+n/2,n-n/2), 那么在双核系统上我们将可以节省一半的运行时间。 分块的程序设计思维 以上分块的思维都是简单直接的,如果是 复杂的任务,就不可能容易地找出分块的 方案了,所以需要 并行设计的方法 来指 导我们。 并行设计的方法 如果由甲一人来完成这个 泡茶过程的话,图中红色 虚框部分可以并行。 如果由两机器人来完成, 而且有不少于 2个水龙头 供机器人使用,那绿色虚 框的部分都可以并行而且 能取得更高的效率。 可见能够合理利用的资源 越多,并行的加速比率就 越高。 例 1. 统筹方法 中的泡茶问题 并行设计的方法 例 2. 对某一 N维向量乘以一个实数值 for( int i = 0; i N; +i) vi *= r; 如果有 N个处理器 ,那么这 N次带有数据并行性的 迭代可以同时执行。 并行设计的方法 数据并行性 : 有不相关的任务对数据集的不同元素 进行相同的操作,我们称这种数据相关表现了 功能并行性 :有不相关的任务对数据集的不同元素 进行不同的操作。 流水线: 在处理单个问题上不存在并行性,但如果 需要处理多个问题,且每个问题可以分为几个阶段, 那么就能支持与阶段数相同的并行性。 并行程序设计思想 目前比较流行的三种: 一、扩张编译器 开发并行化编译器,使其能够发现和表达现有 串行语言程序中的并行性,例如 Intel C+ Compiler就有自动并行循环和向量化数据操作的功 能。这种把并行化的工作留给编译器的方法虽然 降低了编写并行程序的成本,但因为循环和分枝 等控制语句的复杂组合,编译器不能识别相当多 的可并行代码而错误地编译成了串行版本。 并行程序设计思想 二、扩展串行编程语言 这是当前最为流行的方式,通过增加函数调用 或者编译指令来表示低层语言以获取并行程序。 用户能够创建和结束并行进程或线程,并提供同 步与通信的功能函数等。这方面较为杰出的库有 MPI和 OpenMP等;在解释型脚本阵营, ParallelPython也吸引了不少粉丝。 并行程序设计思想 三、创造一个并行语言 虽然这是一个疯狂的想法,但事实上近几十年 来一直有人在做这样的事情,如 HPF( High Performance Fortran)是 Fortran90的扩展,用多种 方式支持数据并行程序。 合适的编程语言选择 合适的编程语言选择 C#、 java、 Python脚本语言提供了对多线程 的原生支持: 如: C#的 System.Threading.Thread java的 java.lang.Thread Python的 Threading.Thread。 编译语言通过平台相关的库来提供对多线程 的支持: 如: Win32 SDK、 POSIX threads等。 合适的编程语言选择 没有统一的标准,造成使用 C/C+编写多线程 程序需要考虑更多的细节,提高了项目成本。 PHP/Ruby/Lua等脚本语言 并没有提供内核级 线程支持,它们的多线程是用户级的甚至不 支持线程,用它们编写的多线程程序仍然无 法完全利用多核优势。 合适的编程语言选择 从语言级提供多线程支持方面, C/C+失去了优势。 不过,当前的主流操作系统都以 C语言接口的方式 提供创建线程的 API,而 C/C+又有相当丰富的程 序库,在一定程度上弥补了语言上的不足。 但是对于多核程序员来说,使用这些库进行多线程 编程的话,要增加一倍的关键代码,比较复杂。 综合以上各方面的对比, 推荐使用 C#、 java、 Python等 脚本语言。 旧程序如何应对多核环境? 一、精确地评估旧程序是否需要作出修改。 如 Foxmail、 Windows优化大师之类的桌面软件 原本就只占用极少的 CPU资源,那么就不需要针对 多核改写。而作为网站服务器端运行的 CGI程序基 本上都是以多进程或多线程的方式来响应请求的, 将可以平滑地充分利用多核系统的性能优势,一般 而言也不需要针对多核改写。 旧程序如何应对多核环境? 二、就重避轻。 一个应用程序,性能瓶颈通常都只有几个或者 一两个甚至这些瓶颈相关的功能还是用户很少使用 的。那么为了这些少量需求而对已有程序进行伤筯 动骨的改造是不合适的,更不宜以多线程的架构重 写整个应用。如果应用程序是使用 C/C+/Fortran编 写的,那使用 OpenMP使性能瓶颈部分的代码并行化 是相当好的选择。如果代码是使用 C#/java/Python等 脚本编写的,可能需要多花一些功夫来完成同样的 工作。 旧程序如何应对多核环境? 三、不追逐潮流。 一句话,如果旧的应用程序没有性能瓶颈,那 就不要作任何改动,否则只会引火烧身。像暴风影 音、千千静听这一类多媒体播放软件,针对多核优 化是可做可不做的事情;但如果做了,用户可能反 而会觉得太占用资源,因为换了双核系统还觉得播 放视频 /音频的时候做其它事情仍然有点“卡”,那 就不如不做。 报告完毕,谢谢大家!
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!