高性能科学计算理论和方法全册配套完整精品课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《高性能科学计算理论和方法全册配套完整精品课件.ppt》由用户(金钥匙文档)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 性能 科学 计算 理论 方法 配套 完整 精品 课件
- 资源描述:
-
1、高性能科学计算理论和方法高性能科学计算理论和方法 全册配套完整精品课件全册配套完整精品课件 高性能科学计算理论和方法高性能科学计算理论和方法 教材 n主要教材:并行程序设计导论 帕切克 美国旧金山大学教授 参考教材 陈国良,中国科学技术大学教授 课程考核 n平时表现:包括出勤情况、课堂表现、 课堂练习,占20 n分组报告:课堂将有几次分组讨论作业 ,要求学生分组并完成相应的课后作业 或者编程作业,并在课堂上进行演示, 占40%。 n期末考试:课程报告,可以是理论课程 报告,也可以是实践课程报告,占40% 第一章 为什么要并行计算 n为什么需要不断提升的性能 n为什么需要构建并行系统 n为什么需
2、要编写并行程序 n怎样编写并行程序 时代变迁 n从1986年到2002年,微处理器的性能以 平均每年50%的速度不断提升 n从2002年开始,单处理器的性能提升速 度降低到每年大约20% 一个聪明的解决方案 n不再继续开发速度更快的单处理器芯片单处理器芯片 ,而是开始将多个完整的单处理器放到 一个集成集成电路芯片上。 对程序员的影响 n大多数串行程序串行程序是在单个单个处理器上运行 的,不会因为简单地增加更多的处理器 就获得极大的性能提高 n串行程序不会意识到多个多个处理器的存在 ,它们在一个多处理器系统上运行的性 能,往往与在多处理器系统的一个处理 器上运行的性能相同相同。 为什么需要不断提
3、升的性能 n不断提升的计算能力已经成为许多飞速 发展领域(如科学、互联网、娱乐等) 的核心力量。 n随着计算能力的提升,我们要考虑解决 的问题也在增加,下面举些例子 气候模拟 蛋白质折叠 药物发现 能源研究 数据分析 并行程序设计 n为什么需要不断提升的性能 n为什么需要构建并行系统 n为什么需要编写并行程序 n怎样编写并行程序 为什么需要构建并行系统 n到目前为止,单处理器性能大幅度提升 的主要原因之一,是日益增加的集成电 路晶体管密度(晶体管是电子开关) n但也有内在的问题 一点物理常识 n更小的晶体管=速度更快的处理器 n更快的处理器=增大的耗电量 n增大的耗电量=增加的热量 n增加的热
4、量=不可靠的处理器 解决方案 n与其构建更快、更复杂的单处理器,不如在单 个芯片上放置多个相对简单的处理器。 n核( “core” )已经成为中央处理器或者CPU的 代名词。 n 答案是并行! 并行程序设计 n为什么需要不断提升的性能 n为什么需要构建并行系统 n为什么需要编写并行程序 n怎样编写并行程序 为什么需要编写并行程序 n大多数为传统单核系统编写的程序无法 利用多核处理器 n虽然可以在多核系统上运行一个程序的 多个实例,但这样意义不大。例如,在 多个处理器上运行一个喜爱的游戏程序 的多个实例并不是我们需要的。 n运行得快! 串行问题的处理方法 n将串行程序改写为并行程序 n编写一个翻
5、译程序来自动地将串行程序 翻译成并行程序 n非常困难 n鲜有突破 更多的问题 n尽管我们可以编写一些程序,让这些程序辨识 串行程序的常见结构,并自动将这些结构转换 成并行程序的结构,但转化后的并行程序在实 际运行时可能很低效 n一个串行程序的高效并行实现可能不是通过发 掘其中每一个步骤的高效并行实现来获得,相 反,最好的并行化实现可能是通过一步步回溯 ,然后发现一个全新的算法来获得的 例子 n假设我们需要计算n个数的值再累加求和 n串行代码: 例子(续) n现在我们假设有p个核,且p远小于n n每个核能够计算大约n/p个数的值并累加 求和,以得到部分和 此处的前缀my_代表每个核都使用自己的私
6、 有变量,并且每个核能够独立于其他核来执 行该代码块 例子(续) n每个核都执行完代码后,变量my_sum中 就会存储调用Compute_next_value获得 的值的和 n例如,假如有8个核,n=24,24次调用 Compute_next_value获得如下的值: 1,4,3, 9,2,8, 5,1,1, 5,2,7, 2,5,0, 4,1,8, 6,5,1, 2,3,9 例子(续) n当各个核都计算 完各自的 my_sum值后, 将自己的结果值 发送给一个指定 为“master”的 核(主核), master核将收到 的部分和累加而 得到全局总和 : 例子(续) Core01234567
7、 my_sum8197157131214 Global sum 8 + 19 + 7 + 15 + 7 + 13 + 12 + 14 = 95 Core01234567 my_sum95197157131214 n别急! 还有一个更好 的方法来计算 全局总和 更好的并行算法 n不要由master核计算所有部分和的累加 工作 n将各个核两两结对,0号核将自己的部分 和与1号核的部分和做加法,2号核将自 己的部分和与3号核的部分和做加法,4 号核将自己的部分和与5号核的部分和做 加法,以次类推。 多个处理器求全局总和 分析比较 n在8个核的情况下,第一种方法中, master核需要执行7次接收操作
8、和7次加 法 n第二种方法中,master核仅需要执行3次 接收操和3次加法 n第二种方法比第一种方法快2倍! 分析比较(续) n当有更多的核时,两者的差异更大。 n在1000个核的情况下,第一种方法需要 999次接收和加法操作,而第二种方法只 需要10次,提高了100倍。 n非常明显,第一种计算全局总和的方法是对串行求和程序的一般化:将 求和的工作在核之间平分,等到每个核都计算出部分和之后,master简 单地重复串行程序中基本的串行求和。而第二种计算全局总和的方法与 原来的串行程序没有多大关系。 并行程序设计 n为什么需要不断提升的性能 n为什么需要构建并行系统 n为什么需要编写并行程序
9、n怎样编写并行程序 怎么编写并行程序 n任务并行 n将待解决问题所需要执行的各个任务分配到 各个核上执行. n数据并行 n将待解决问题所需要处理的数据分配给各个 核. n每个核在分配到的数据集上执行大致相似的 操作. 例子 15 个问题 300 份试卷 3个助教 数据并行 TA#1 TA#2 TA#3 100 exams 100 exams 100 exams 任务并行 TA#1 TA#2 TA#3 Questions 1 - 5 Questions 6 - 10 Questions 11 - 15 求和例子的第一部分数据 并行 n数据是通过Compute_next_value计算得 到的值,
10、每个核在所赋予的数据集上执 行大致相同的操作:通过调用 Compute_next_value获取所需的数据, 再将数据累加求部分和。 求和例子的第二部分任务 并行 n总共有两个任务:一个任务由master核执行,负责接收从其他核传来的 部分和,并累加部分和; 另一个任务由其他核执行, 负责将自己计算得 到的部分和传递给master核。 第一章的课堂练习 n练习1. 为求全局总和例子中的 my_first_i和my_last_i推导一个公式 。需要注意的是:在循环中,应该 给各个核分配数目大致相同的计算 元素。 quotient = n / p; remainder = n % p; if (m
11、y_rank remainder) my_n_count = quotient + 1; my_first_i = my_rank * my_n_count; else my_n_count = quotient; my_first_i = my_rank * my_n_count + remainder; my_last_i = my_first_i + my_n_count - 1; 练习2 n尝试写出树形结构求全局总和的伪代码。假设核的数 目是2的幂(1、2、4、8等)。提示:使用变量divisor 来决定一个核应该是发送部分和还是接收部分和, divisor的初始值为2,并且每次迭代后
12、增倍。使用变量 core_difference来决定哪个核与当前核合作,它的初 始值为1,并且每次迭代后增倍。例如,在第一次迭代 中0 % divisor = 0,1 % divisor = 1,所以0号核负责 接收和,1号核负责发送。在第一次迭代中0 + core_difference = 1,1-core_difference = 0,所以0 号核与1号核在第一次迭代中合作。 divisor = 2; core_difference = 1; sum = my_value; while ( divisor = number of cores ) if ( my_rank % divisor
13、 = 0 ) partner = my_rank + core_difference; receive value from partner core; sum += received value; else partner = my_rank - core_difference; send my sum to partner core; divisor *= 2; core_difference *=2; 练习3 n作为前面问题的另一种解法,可以使用C 语言的位操作位操作来实现树形结构树形结构的求全局 总和。为了了解它是如何工作的,写下 核的二进制数编号二进制数编号是非常有帮助的,注 意每个
14、阶段相互合作的成对的核。 n从表中我们可以看到在第一阶段,每个核与其二进制 编号的最右位最右位不同编号的核配对,在第二阶段与其二 进制编号的最右第二位最右第二位不同编号的核配对,第三阶段 与其二进制编号的最右第三位最右第三位不同编号的核配对。因 此,如果在第一阶段有二进制掩码(bitmask)0012、 第二阶段有0102、第三阶段有1002,那么可以通过将 编号中对应掩码掩码中非零位置的二进制数取反来获得配 对核的编号,也即通过异或操作或者操作。 n使用位异或位异或操作或者左移左移操作编写伪代码来实现上述 算法。 bitmask = 1; divisor = 2; sum = my_valu
15、e; while ( bitmask number of cores ) partner = my_rank bitmask; if ( my_rank % divisor = 0 ) receive value from partner core; sum += received value; else send my_sum to partner core; bitmask = 1; divisor *= 2; 练习4 在下列情况中,推导公式求出0号核执行接 收与加法操作的次数。 a. 最初的求全局总和的伪代码。 b. 树形结构求全局总和。 制作一张表来比较这两种算法在总核数是2 、4、8
16、、1024时,0号核执行的接收与 加法操作的次数。 n(a)接收次数为p-1,加法次数为p-1 n(b)接收次数为log2(p),加法次数为log2(p) 练习5 n全局总和例子中的第一部分(每个核对分配给 它的计算值求和),通常认为是数据并行的例 子; 而第一个求全局总和例子的第二个部分( 各个核将它们计算出的部分和发送给master核 ,master核将这些部分和再累加求和),认为 是任务并行。第二个全局和例子中的第二部分 (各个核使用树形结构累加它们的部分和), 是数据并行的例子还是任务并行的例子?为什 么? 第二章第二章 并行硬件和并行软件 53 背景知识 54 串行硬件和软件 输入
17、输出 程序 一次只执行单个任务 55 “经典”的冯诺依曼结构 56 主存(Main memory) n主存中有许多区域,每个区域都可以存 储指令和数据。 n每个区域都有一个地址,可以通过这个 地址来访问相应的区域及区域中存储的 数据和指令。 57 中央处理单元(CPU) n中央处理单元中央处理单元分为控制单 元和算术逻辑单元( Arithmetic Logic Unit, ALU)。 n控制单元控制单元负责决定应该执 行程序中的哪些指令。 nALU负责执行指令。 add 2+2 58 关键术语 n寄存器CPU中的数据和程序执行时的 状态信息存储在特殊的快速存储介质中 n程序计数器控制单元中一个
18、特殊的寄 存器,用来存放下一条指令的地址。 n总线指令和数据通过CPU和主存之间 的互连结构进行传输。这种互连结构通 常是总线,总线中包括一组并行的线以 及控制这些线的硬件。 59 memory CPU fetch/read 当数据或指令从主存传送到CPU 时,我们称数据或指令从内存中 取出或者读出。 60 memory CPU write/store 当数据或指令从CPU传送到主存 中时,我们称数据或指令写入或 者存入内存中。 61 冯诺依曼瓶颈 主存和CPU之间的分离称为冯诺 依曼瓶颈。这是因为互连结构限 定了指令和数据访问的速率。程 序运行所需要的大部分数据和指 令被有效地与CPU隔离开
19、。 62 一个操作系统“进程” n进程是运行着的程序的一个实例。 n一个进程包括如下实体: n可执行的机器语言程序. n一块内存空间. n操作系统分配给进程的资源描述符. n安全信息. n进程状态信息. 63 多任务 n大多数现代操作系统都是多任务的。 这 意味着操作系统提供对同时运行多个程 序的支持。 n这对于单核系统也是可行的,因为每个 进程只运行一小段时间(几毫秒),亦 即一个时间片。在一个程序执行了一个 时间片的时间后,操作系统就切换执行 其他程序 64 多任务 n在一个多任务操作系统中,如果一个进 程需要等待某个资源,例如需要从外部 的存储器读数据,它会阻塞。这意味着 ,该进程会停止
20、运行,操作系统可以运 行其他进程。例如:航班预定系统在一 个用户因为等待座位图而阻塞时,可为 另一个用户提供可用的航线查询。 65 线程 n线程包含在进程中。 n线程为程序员提供了一种机制,将程序 划分为多个大致独立的任务,当某个任 务阻塞时能执行其他任务。 n此外,在大多数系统中,线程间的切换 比进程间的切换更快。 66 一个进程和两个线程 the “master” thread(主线程) starting a thread Is called forking(派生)(派生) terminating a thread Is called joining(合并)(合并) 67 对冯诺依曼模型的
21、改进 68 缓存 (Cache) nCPU Cache 是一组相比于主存,CPU能 更快速地访问的内存区域。 nCPU Cache位于与CPU同一块的芯片或者 位于其他芯片上,但比普通的内存芯片 能更快地访问。 69 局部性原理 n程序访问完一个存储区域往往会访问接 下来的区域,这个原理称为局部性。 n空间局部性访问附近的位置 n时间局部性访问在不久的将来 70 局部性原理 float z1000; sum = 0.0; for (i = 0; i 1000; i+) sum += zi; 71 缓存的分层(level) L1 L2 L3 最小 i 0) w = x ; e l s e w =
22、 y ; Z 应该是 正数 如果系统预测错误,需要回退机制, 然后执行w=y. 105 硬件多线程 n指令级并行是很难利用的,因为程序中有许多部分之 间存在依赖关系。 n硬件多线程(hardware multithreading)为系统提供了一 种机制,使得当前执行的任务被阻塞时,系统能够继 续其他有用的工作。 n例如,如果当前任务需要等待数据从内存中读出, 那么它可以通过执行其他线程而不是继续当前线程 来发掘并行性. 106 硬件多线程(2) n细粒度(fine-grained)在细粒度多线 程中,处理器在每条指令执行完后切换 线程,从而跳过被阻塞的线程。 n优点: 能够避免因为阻塞而导致机
23、器时间的 浪费. n缺点: 执行很长一段指令的线程在执行每条 指令的时候都需要等待. 107 硬件多线程(3) n粗粒度(coarse grained)只切换那些 需要等待较长时间才能完成操作(如从 主存中加载)而被阻塞的线程。 n优点: 不需要线程间的立即切换. n缺点: 处理器还是可能在短阻塞时空闲,线 程间的切换也还是会导致延迟. 108 硬件多线程(4) n同步多线程(Simultaneous Multithreading,SMT)是细粒度多线 程的变种。 n它通过允许多个线程同时使用多个功能 单元来利用超标量处理器的性能。如果 我们指定“优先”线程,那么能够在一 定程度上减轻线程减速
24、的问题。 109 并行硬件 并行硬件 110 并行硬件 n因为有多个复制的功能单元,所以多发射和流 水线可以认为是并行硬件。但是,这种并行性 通常对程序员是不可见的,所以我们仍把它们 当成基本的冯诺依曼结构的扩展。 n我们的原则是,并行硬件应该是仅限于对程序 员可见的硬件。换句话说,如果能够通过修改 源代码而开发并行性或者必须修改源代码来开 发并行性,那么我们认为这种硬件是并行硬件 111 Flynn分类法 SISD Single instruction stream Single data stream (SIMD) Single instruction stream Multiple da
25、ta stream MISD Multiple instruction stream Single data stream (MIMD) Multiple instruction stream Multiple data stream classic von Neumann not covered 112 SIMD n单指令多数据流(Single Instruction, Multiple Data,SIMD)系统是并行系统。 n顾名思义,SIMD系统通过对多个数据执 行相同的指令从而实现在多个数据流上 的操作。 113 SIMD例子 control unit ALU1ALU2ALUn for
展开阅读全文