- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高性能计算简介 TOP500的情况著名IT公司在高性能计算方面的情况并行编程简介未来可能的趋势 TOP500的情况 著名IT公司在高性能计算方面的情况 多核是目前整个IT产业最为关注的一个技术关键词。根据IDC新近发布的预测,2008年度在全球市场上发售的PC、PC服务器和笔记本电脑中,有 80%的机型将配备多核处理器。而2009年时几乎所有服务器、PC和笔记本电脑产品则将全面实现多核化。 随着这些硬件产品在多核技术上的逐渐就绪,如今 整个IT业界面临的最大挑战就是如何将原先仅用于高端应用开发的并行编程方式推广到所有软件开发的过程中,以打造出更多支持多线程并行化运行的应用软件, 全面释放多核处理器的性能潜力。 为促进业界对于并行化软件开发工作的重视,英特尔公司从上世纪90年代末就开始协同操作系统和应用软件开发商进行了大量有关软件线程性能优化和多核 软件开发技术方面的研究,并于近年推出了整套针对主流编程语言和操作系统的先进软件开发工具产品套件,该套件包含了线程分析工具、性能分析器、编译器、性 能库、群集工具包以及相关的白皮书等,它不但可帮助软件开发商快速、高效、低成本地跨越从串行编程到并行编程的技术门槛,实现从传统单线程软件开发商到多 核并行化应用开发商的角色转换,还能帮助他们开发出针对英特尔最新技术平台(包括多核、虚拟化)进行优化的产品。 为使并行编程更加容易和简便,今年2月底英特尔公司又发布了作为开放资源项目的英特尔?线程构建模块2.0(Intel Threading Building Blocks 2.0,Intel TBB 2.0),它是一个C++运行时库,只需较少的几行代码即可实现软件的并行化。它还能让开发者编写的程序在Windows、Linux、Mac OS等不同操作系统平台间方便地移植,并保证开发出的软件在未来硬件平台处理器内核数量增多时,也无需再做任何代码维护工作。 并行编程简介 各阶段的任务 划分:将计算任务分解成小任务以尽量开拓并行执行的可能性; 通信:确定小任务需要进行的通信,为组合做准备; 组合:将一些小任务组合成大任务以减少通信开销; 映射:将组合后的任务分配到处理器上,其目标是使总执行时间和通信开销尽量小,使处理器的利用率尽量高。 并行算法实例并行冒泡排序算法parallel bubble sort 在各种串行排序算法中,冒泡排序不论从理论上还是实际效果上都不是最好的,但其算法简单,因而应用比较广泛,尤其是对性能要求不高的场合。 并行冒泡排序算法parallel bubble sort 冒泡排序的变形之一:奇偶置换 odd-even transposition 冒泡排序按顺序依次比较相邻的元素,实际上这是一个串行的过程,很难并行化。奇偶置换冒泡排序是冒泡排序的一种变形,它容易并行化。 奇偶置换排序的示例 冒泡排序的变形之二:希尔排序 Shell sort 奇偶置换冒泡排序的主要缺点是一次只能把元素移动一个位置。如果整个序列中只有几个元素位置不对,或者元素到它们正确的位置的距离很远,此时仍然需要O(n2)的时间复杂度来完成排序 。 Shell排序能将元素移动比较远的距离。 冒泡排序的变形之二:希尔排序 Shell sort 冒泡排序的变形之二:希尔排序 Shell sort 实例1:计算PI的MPI程序 MPI_Init(argc,argv); MPI_Comm_size(MPI_COMM_WORLD,numprocs); MPI_Comm_rank(MPI_COMM_WORLD,myid); MPI_Get_processor_name(processor_name,namelen); fprint(stdout,”Process %d of %d on % s\n”,myid,numprocs, processor_name); n=0; if (myid==0) { printf(“Please give N=”); scanf(n); startwtime=MPI_Wtime(); for (j=1;jnumprocs;j++) { MPI_Send(n,1,MPI_INT,j,99,MPI_COMM_WORLD);
文档评论(0)