并行计算机存储结构多级存储体系结构为了解决存储墙memorywall.ppt

并行计算机存储结构多级存储体系结构为了解决存储墙memorywall.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
并行计算机存储结构多级存储体系结构为了解决存储墙memorywall

* 并行程序设计相关问题 数据依赖 循环引起的数据依赖 for (i = 1;i100;i++) a[i] = a[i-1]*32 循环独立但数据是依赖的 task 1 task 2 ------ ------ X = 2 X = 4 . . . . Y = X^2 Y = X^3 * 并行程序设计相关问题 数据依赖 如何处理数据依赖: 分布式存储结构- 通信要求数据在同步点上。 共享存储结构-在任务间采用同步“读/写”操作 * 并行程序设计相关问题 负载均衡 负载均衡 是指在任务之间分发工作的方法,该方法要所有的任务在所有的时候保持忙 负载均衡对于并行程序的性能是很重要的。 * 并行程序设计相关问题 如何获得负载平衡 相等地划分每个任务所接受的工作 对于数组和矩阵操作每个任务完成相似的工作,在任务间均衡地分布数据集。 对于循环迭代,让每次迭代的工作相似,在任务间均衡地分布迭代。 如果使用不同性能特性的不同机制的混合,确定使用一些性能分析工具来发现任何负载的不均衡,并相应调整工作。 * 并行程序设计相关问题 如何获得负载平衡 使用动态工作指派 即使数据在任务间均衡分布,有些类型的问题依然会引起负载不均衡 当任务要执行的工作量是变化的,或者是不可预测的时候,使用一个诸如任务池的调度器是有帮助的。每个任务完成自己的工作后,从队列中获得新的工作 可能有必要设计一个算法来检测和处理在代码中动态发生的负载不均衡问题。 * 并行计算基础 内容 什么是并行计算 弗林经典分类 并行计算机存储结构 并行编程模型 并行程序设计相关问题 程序性能优化方法 * 程序性能优化方法 性能评估 Amdahl定律 * 程序性能优化方法 性能评估 Amdahl定律 程序潜在的加速(speedup)是用的可并行的那部分code(P)来定义的 Sspeedup = 1/(1-P) 如果代码没有任何部分可并行,P = 0 并且 speedup = 1 (没有加速). 如果所有的代码都可以并行,P = 1 并且speedup是无穷 (理论上). 如果一半的代码可以并行化,则最大的speedup = 2, 意味着代码会以2倍的速度执行。 * 程序性能优化方法 性能评估 Amdahl定律 引入执行并行部分工作的处理器的个数,这时P = 并行部分, N = 处理器个数并且 T = 串行部分=1-P, 上述公式可以改成: * 程序性能优化方法 串行程序性能优化 调用高性能的库函数,比如BLAS,FFTW等. 是用合适的编译器优化选项。 合理定义数组维数 … S个(多体交叉存储) int a[m][n]; for(i=0,iM,i++) a[i][j]=… //n和S是什么关系比较好? C语言中的数组是行主序的 * int a[128][40960]; int b[128][40960]; for(int i=0;i128;i++) { for(int j=0;j40960;j++) a[i][j] = b[i][j]; } for(int i=0;i40960;i++) { for(int j=0;j128;j++) a[j][i] = b[j][i]; } 程序性能优化方法 嵌套循环的顺序对于数据访问的局部性是很重要的 * int a=0; for(int i=0;i100000000;i++) { for(int j=0;j5;j++) a ++; } for(int i=0;i5;i++) { for(int j=0;j100000000;j++) a ++; } 程序性能优化方法 嵌套循环的顺序对于数据访问的局部性是很重要的 * 程序性能优化方法 for(i=0;in;i++) for(j=0;jn;j++) a[i]+=b[j]; for(j=0;jn;j+=s) for(i=0;in;i++) for(jj=j;jjmin(j+s-1,n);jj++) a[i]+=b[jj] 数据分块 * 程序性能优化方法 for(i=0;in;i++) d+=a[i]; for(i=0;i(n%4),i++) d+=a[i]; for(i=((n%4)+1);in;i+4) d+=a[i]+a[i+1]+a[i+2]+a[i+3]; 循环展开 * 程序性能优化方法 并行程序性能优化 减少通信量,提高通信粒度 在全局

文档评论(0)

ailuojue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档