多核编程之挑战与应对 报 告 人:孔 晓 华 学号:S306060144 2007年 12月 29日.

Slides:



Advertisements
Similar presentations
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
Advertisements

高校教师、高级项目经理 任铄 QQ : 第一章 操作系统引论 1.1 操作系统的目标和作用 1.2 操作系统的发展过程 1.3 操作系统的基本特性 1.4 操作系统的主要功能 1.5 OS 结构设计.
面向侧面的程序设计 方林博士 本文下载地址:
高级服务器设计和实现 1 —— 基础与进阶 余锋
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
第10章 多核系统结构与编程 张晨曦 刘依 微信公众号: arch365.
Tool Command Language --11级ACM班 金天行.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
OpenMP简介和开发教程 广州创龙电子科技有限公司
SVN的基本概念 柳峰
第二讲 搭建Java Web开发环境 主讲人:孙娜
学习前的准备工作 讲师:burning.
R in Enterprise Environment 企业环境中的R
SVN服务器的搭建(Windows) 柳峰
走进编程 程序的顺序结构(二).
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
第二章 Java语言基础.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
厂商—型号 海尔-PAD002 外观设计 建议零售价格:2999元 上市时间:2011年3月 目标人群:有移动互联需求的商务人士
CPU结构和功能.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
DevDays ’99 The aim of this mission is knowledge..
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
厂商—型号 荣耀-HiRouter-H1 外观设计 产品类型:无线路由器 建议零售价格:149元 上市时间:2017 年 5月
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
HUAWEI—S7-301c 外观设计 建议零售价格:2899元 上市时间:2012年5 月15日
第二章 Java基本语法 讲师:复凡.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
Web安全基础教程
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
信号量(Semaphore).
解决“最后1公里”问题.
Thomson-252G 外观设计 上市时间:2011年1月 目标人群:普通消者,行业用户费 标准配置:一电一充\耳机\数据线\DC充电器
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
华为— S7-201c 外观设计 S7-201c 建议零售价格:2588元 上市时间:2011年 10月 20 日
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
2019/5/8 第2章 数据分析软件介绍.
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
Chapter 18 使用GRASP的对象设计示例.
iReader R6003 外观设计 产品类型:电子书阅读器 建议零售价格:958元 上市时间:2017 年 6 月
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
华为—HUAWEI EC19 9 建议零售价格:299元 上市时间:2012年4月18日 目标人群:移动办公用户;其它有移动上网需求的用户
临界区问题的硬件指令解决方案 (Synchronization Hardware)
OpenStack vs CloudStack
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第二节 C语言的特点.
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
华为-HUAWEI—EC156 建议零售价格:329元 上市时间:2012年 1 月 1 日 目标人群:大众消费群体 标准配置:无配件
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
iReader R6006 外观设计 产品类型:电子书阅读器 建议零售价格:1058元 上市时间:2018 年 4月
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

多核编程之挑战与应对 报 告 人:孔 晓 华 学号: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), 那么在双核系统上我们将可以节省一半的运行时间。

分块的程序设计思维 以上分块的思维都是简单直接的,如果是复杂的任务,就不可能容易地找出分块的方案了,所以需要并行设计的方法来指导我们。

并行设计的方法 例1. 《统筹方法》中的泡茶问题 如果由甲一人来完成这个泡茶过程的话,图中红色虚框部分可以并行。 如果由两机器人来完成,而且有不少于2个水龙头供机器人使用,那绿色虚框的部分都可以并行而且能取得更高的效率。 可见能够合理利用的资源越多,并行的加速比率就越高。

for( int i = 0; i < N; ++i) 并行设计的方法 例2. 对某一N维向量乘以一个实数值 for( int i = 0; i < N; ++i) v[i] *= 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等脚本编写的,可能需要多花一些功夫来完成同样的工作。

旧程序如何应对多核环境? 三、不追逐潮流。 一句话,如果旧的应用程序没有性能瓶颈,那就不要作任何改动,否则只会引火烧身。像暴风影音、千千静听这一类多媒体播放软件,针对多核优化是可做可不做的事情;但如果做了,用户可能反而会觉得太占用资源,因为换了双核系统还觉得播放视频/音频的时候做其它事情仍然有点“卡”,那就不如不做。

报告完毕,谢谢大家!