高性能科学计算理论和方法全册配套课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《高性能科学计算理论和方法全册配套课件.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 性能 科学 计算 理论 方法 配套 课件
- 资源描述:
-
1、高性能科学计算理论和方法高性能科学计算理论和方法全册配套课件全册配套课件高性能科学计算理论和方法高性能科学计算理论和方法教材n主要教材:并行程序设计导论帕切克 美国旧金山大学教授参考教材陈国良,中国科学技术大学教授课程考核n平时表现:包括出勤情况、课堂表现、课堂练习,占20n分组报告:课堂将有几次分组讨论作业,要求学生分组并完成相应的课后作业或者编程作业,并在课堂上进行演示,占40%。n期末考试:课程报告,可以是理论课程报告,也可以是实践课程报告,占40%第一章 为什么要并行计算n为什么需要不断提升的性能n为什么需要构建并行系统n为什么需要编写并行程序n怎样编写并行程序时代变迁n从1986年到
2、2002年,微处理器的性能以平均每年50%的速度不断提升n从2002年开始,单处理器的性能提升速度降低到每年大约20%一个聪明的解决方案n不再继续开发速度更快的单处理器芯片单处理器芯片,而是开始将多个完整的单处理器放到一个集成集成电路芯片上。对程序员的影响n大多数串行程序串行程序是在单个单个处理器上运行的,不会因为简单地增加更多的处理器就获得极大的性能提高n串行程序不会意识到多个多个处理器的存在,它们在一个多处理器系统上运行的性能,往往与在多处理器系统的一个处理器上运行的性能相同相同。为什么需要不断提升的性能n不断提升的计算能力已经成为许多飞速发展领域(如科学、互联网、娱乐等)的核心力量。n随
3、着计算能力的提升,我们要考虑解决的问题也在增加,下面举些例子气候模拟蛋白质折叠药物发现能源研究数据分析并行程序设计n为什么需要不断提升的性能n为什么需要构建并行系统n为什么需要编写并行程序n怎样编写并行程序为什么需要构建并行系统n到目前为止,单处理器性能大幅度提升的主要原因之一,是日益增加的集成电路晶体管密度(晶体管是电子开关)n但也有内在的问题一点物理常识n更小的晶体管=速度更快的处理器n更快的处理器=增大的耗电量n增大的耗电量=增加的热量n增加的热量=不可靠的处理器解决方案n与其构建更快、更复杂的单处理器,不如在单个芯片上放置多个相对简单的处理器。n核( “core” )已经成为中央处理器
4、或者CPU的代名词。 n 答案是并行!并行程序设计n为什么需要不断提升的性能n为什么需要构建并行系统n为什么需要编写并行程序n怎样编写并行程序为什么需要编写并行程序n大多数为传统单核系统编写的程序无法利用多核处理器n虽然可以在多核系统上运行一个程序的多个实例,但这样意义不大。例如,在多个处理器上运行一个喜爱的游戏程序的多个实例并不是我们需要的。n运行得快!串行问题的处理方法n将串行程序改写为并行程序n编写一个翻译程序来自动地将串行程序翻译成并行程序n非常困难n鲜有突破更多的问题n尽管我们可以编写一些程序,让这些程序辨识串行程序的常见结构,并自动将这些结构转换成并行程序的结构,但转化后的并行程序
5、在实际运行时可能很低效n一个串行程序的高效并行实现可能不是通过发掘其中每一个步骤的高效并行实现来获得,相反,最好的并行化实现可能是通过一步步回溯,然后发现一个全新的算法来获得的例子n假设我们需要计算n个数的值再累加求和n串行代码:例子(续)n现在我们假设有p个核,且p远小于nn每个核能够计算大约n/p个数的值并累加求和,以得到部分和此处的前缀my_代表每个核都使用自己的私有变量,并且每个核能够独立于其他核来执行该代码块例子(续)n每个核都执行完代码后,变量my_sum中就会存储调用Compute_next_value获得的值的和n例如,假如有8个核,n=24,24次调用Compute_next
6、_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核将收到的部分和累加而得到全局总和:例子(续)Core01234567my_sum8197157131214Global sum8 + 19 + 7 + 15 + 7 + 13 + 12 + 14 = 95Core01234567my_sum95197157131214n别急!还有一个更好的方法来计算全局总和更好的并行算法n不要由mast
7、er核计算所有部分和的累加工作n将各个核两两结对,0号核将自己的部分和与1号核的部分和做加法,2号核将自己的部分和与3号核的部分和做加法,4号核将自己的部分和与5号核的部分和做加法,以次类推。多个处理器求全局总和分析比较n在8个核的情况下,第一种方法中,master核需要执行7次接收操作和7次加法n第二种方法中,master核仅需要执行3次接收操和3次加法n第二种方法比第一种方法快2倍!分析比较(续)n当有更多的核时,两者的差异更大。n在1000个核的情况下,第一种方法需要999次接收和加法操作,而第二种方法只需要10次,提高了100倍。n非常明显,第一种计算全局总和的方法是对串行求和程序的一
8、般化:将求和的工作在核之间平分,等到每个核都计算出部分和之后,master简单地重复串行程序中基本的串行求和。而第二种计算全局总和的方法与原来的串行程序没有多大关系。并行程序设计n为什么需要不断提升的性能n为什么需要构建并行系统n为什么需要编写并行程序n怎样编写并行程序怎么编写并行程序n任务并行n将待解决问题所需要执行的各个任务分配到各个核上执行.n数据并行n将待解决问题所需要处理的数据分配给各个核.n每个核在分配到的数据集上执行大致相似的操作.例子15 个问题300 份试卷3个助教数据并行TA#1TA#2TA#3100 exams100 exams100 exams任务并行TA#1TA#2T
9、A#3Questions 1 - 5Questions 6 - 10Questions 11 - 15求和例子的第一部分数据并行n数据是通过Compute_next_value计算得到的值,每个核在所赋予的数据集上执行大致相同的操作:通过调用Compute_next_value获取所需的数据,再将数据累加求部分和。求和例子的第二部分任务并行n总共有两个任务:一个任务由master核执行,负责接收从其他核传来的部分和,并累加部分和; 另一个任务由其他核执行, 负责将自己计算得到的部分和传递给master核。第一章的课堂练习n练习1. 为求全局总和例子中的my_first_i和my_last_i推
10、导一个公式。需要注意的是:在循环中,应该给各个核分配数目大致相同的计算元素。quotient = n / p;remainder = n % p;if (my_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;练习2n尝试写出树形结构求全局总和的伪代码。假设核的数目
11、是2的幂(1、2、4、8等)。提示:使用变量divisor来决定一个核应该是发送部分和还是接收部分和,divisor的初始值为2,并且每次迭代后增倍。使用变量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_v
12、alue;while ( divisor = number of cores ) if ( my_rank % divisor = 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;练习3n作为前面问题的另一种解法,可以使用C语言的位操作位操作来
13、实现树形结构树形结构的求全局总和。为了了解它是如何工作的,写下核的二进制数编号二进制数编号是非常有帮助的,注意每个阶段相互合作的成对的核。n从表中我们可以看到在第一阶段,每个核与其二进制编号的最右位最右位不同编号的核配对,在第二阶段与其二进制编号的最右第二位最右第二位不同编号的核配对,第三阶段与其二进制编号的最右第三位最右第三位不同编号的核配对。因此,如果在第一阶段有二进制掩码(bitmask)0012、第二阶段有0102、第三阶段有1002,那么可以通过将编号中对应掩码掩码中非零位置的二进制数取反来获得配对核的编号,也即通过异或操作或者操作。n使用位异或位异或操作或者左移左移操作编写伪代码来
14、实现上述算法。bitmask = 1;divisor = 2;sum = my_value;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. 最初的求全局总和的伪代码。
15、 b. 树形结构求全局总和。制作一张表来比较这两种算法在总核数是2、4、8、1024时,0号核执行的接收与加法操作的次数。n(a)接收次数为p-1,加法次数为p-1n(b)接收次数为log2(p),加法次数为log2(p)练习5n全局总和例子中的第一部分(每个核对分配给它的计算值求和),通常认为是数据并行的例子; 而第一个求全局总和例子的第二个部分(各个核将它们计算出的部分和发送给master核,master核将这些部分和再累加求和),认为是任务并行。第二个全局和例子中的第二部分(各个核使用树形结构累加它们的部分和),是数据并行的例子还是任务并行的例子?为什么?第二章第二章 并行硬件和并行软件
16、53背景知识54串行硬件和软件输入输出程序一次只执行单个任务55“经典”的冯诺依曼结构56主存(Main memory)n主存中有许多区域,每个区域都可以存储指令和数据。n每个区域都有一个地址,可以通过这个地址来访问相应的区域及区域中存储的数据和指令。57中央处理单元(CPU)n中央处理单元中央处理单元分为控制单元和算术逻辑单元(Arithmetic Logic Unit,ALU)。n控制单元控制单元负责决定应该执行程序中的哪些指令。nALU负责执行指令。add 2+258关键术语n寄存器CPU中的数据和程序执行时的状态信息存储在特殊的快速存储介质中n程序计数器控制单元中一个特殊的寄存器,用来
17、存放下一条指令的地址。n总线指令和数据通过CPU和主存之间的互连结构进行传输。这种互连结构通常是总线,总线中包括一组并行的线以及控制这些线的硬件。59memoryCPUfetch/read当数据或指令从主存传送到CPU时,我们称数据或指令从内存中取出或者读出。60memoryCPUwrite/store当数据或指令从CPU传送到主存中时,我们称数据或指令写入或者存入内存中。61冯诺依曼瓶颈主存和CPU之间的分离称为冯诺依曼瓶颈。这是因为互连结构限定了指令和数据访问的速率。程序运行所需要的大部分数据和指令被有效地与CPU隔离开。62一个操作系统“进程”n进程是运行着的程序的一个实例。n一个进程包
18、括如下实体:n可执行的机器语言程序.n一块内存空间.n操作系统分配给进程的资源描述符.n安全信息.n进程状态信息.63多任务n大多数现代操作系统都是多任务的。 这意味着操作系统提供对同时运行多个程序的支持。n这对于单核系统也是可行的,因为每个进程只运行一小段时间(几毫秒),亦即一个时间片。在一个程序执行了一个时间片的时间后,操作系统就切换执行其他程序64多任务n在一个多任务操作系统中,如果一个进程需要等待某个资源,例如需要从外部的存储器读数据,它会阻塞。这意味着,该进程会停止运行,操作系统可以运行其他进程。例如:航班预定系统在一个用户因为等待座位图而阻塞时,可为另一个用户提供可用的航线查询。6
19、5线程n线程包含在进程中。n线程为程序员提供了一种机制,将程序划分为多个大致独立的任务,当某个任务阻塞时能执行其他任务。n此外,在大多数系统中,线程间的切换比进程间的切换更快。66一个进程和两个线程the “master” thread(主线程)starting a threadIs called forking(派生)(派生)terminating a threadIs called joining(合并)(合并)67对冯诺依曼模型的改进68缓存 (Cache)nCPU Cache 是一组相比于主存,CPU能更快速地访问的内存区域。nCPU Cache位于与CPU同一块的芯片或者位于其他芯片
20、上,但比普通的内存芯片能更快地访问。69局部性原理n程序访问完一个存储区域往往会访问接下来的区域,这个原理称为局部性。n空间局部性访问附近的位置n时间局部性访问在不久的将来70局部性原理float z1000;sum = 0.0;for (i = 0; i 1000; i+) sum += zi;71缓存的分层(level)L1L2L3最小 & 最快最大 & 最慢72Cache命中(hit)L1L2L3x sumy z totalA radius r1 centerfetch x73Cache缺失(miss)L1L2L3y sumr1 z totalA radius centerfetch x
21、x主存74与缓存有关的问题n当CPU向Cache中写数据时,Cache中的值与主存中的值就会不同或者不一致(inconsistent)。n有两种方法来解决这个不一致性问题:写直达(write-through) 和写回(write-back) 75与缓存有关的问题n在写直达(write-through) Cache中,当CPU向Cache写数据时,高速缓存行会立即写入主存中。n在写回(write-back) Cache中,数据不是立即更新到主存中,而是将发生数据更新的高速缓存行标记成脏(dirty)。当发生高速缓存行替换时,标记为脏的高速缓存行被写入主存中。76缓存映射n全相联(fully as
22、sociative) Cache每个高速缓存行能够放置在Cache中的任意位置。n直接映射(directed mapped) Cache每个高速缓存行在Cache中有唯一的位置。nn路组相联(n-way set associated)每个高速缓存行都能放置到Cache中n个不同区域位置中的一个。77n路组相联n当内存中的行(多于一行)能被映射到Cache中的多个不同位置(全相联和n路组相联)时,需要决定替换或者驱逐Cache中的哪一行。x78例子假设主存有16行,分别用015标记,Cache有4行,用03标记。在全相联映射中,主存中的0号行能够映射到Cache中的0、1、2、3任意一行。在直接
23、映射Cache中,可以根据主存中高速缓存行的标记值除以4求余,获得在Cache中的索引。因此主存中0、4、8号行会映射到Cache的0号行,主存中的1、5、9号行映射到Cache的1号行,以此类推。79虚拟内存(1)n如果运行一个大型的程序,或者程序需要访问大型数据集,那么所有的指令或者数据可能在主存中放不下。n利用虚拟存储器(或虚拟内存),使得主存可以作为辅存的缓存。80虚拟内存(2)n虚拟内存通过在主存中存放当前执行程序所需要用到的部分,来利用时间和空间局部性.81虚拟内存(3)n交换空间(swap space)那些暂时用不到的部分存储在辅存的块中,称为交换空间。n页(page) 数据块和
24、指令块.n页通常比较大.n大多数系统采用固定大小的页,从416kB不等.82虚拟内存(4)program Aprogram Bprogram Cmain memory83虚拟页号n在编译程序时,给程序的页赋予虚拟页号。n当程序运行时,创建一张将虚拟页号映射成物理地址的表。n程序运行时使用到虚拟地址,这个页表就用来将虚拟地址转换成物理地址。假如页表的创建由操作系统管理,那么就能保证程序使用的内存不会与其他程序使用的内存重叠84页表n假如虚拟地址有32位,页大小是4KB = 4096字节,那么可以用12位来标识页中的每个字节。因此,可以用虚拟地址的低12位来定位页内字节,而剩下的位用来定位页。表2
25、-285思考题n在表2-2中,虚拟地址由12位字节偏移量和20位的虚拟页号组成。如果一个程序运行的系统上拥有这样的页大小和虚拟地址空间,这个程序有多少页?86转译后备缓冲区( TLB )n尽管多个程序可以同时使用主存了,但使用页表会增加程序总体的运行时间。n为了解决这个问题,处理器有一种专门用于地址转换的缓存,叫做转译后备缓冲区(TranslationLookaside Buffer,TLB)。87转译后备缓冲区(2)nTLB在快速存储介质中缓存了一些页表的条目(通常为16512条)。n页面失效假如想要访问的页不在内存中,即页表中该页没有合法的物理地址,该页只存储在磁盘上,那么这次访问称为页面
展开阅读全文