.net4.0并行计算技术基础(2)new

.net4.0并行计算技术基础(2)new

ID:18977585

大小:79.52 KB

页数:6页

时间:2018-09-27

.net4.0并行计算技术基础(2)new_第1页
.net4.0并行计算技术基础(2)new_第2页
.net4.0并行计算技术基础(2)new_第3页
.net4.0并行计算技术基础(2)new_第4页
.net4.0并行计算技术基础(2)new_第5页
资源描述:

《.net4.0并行计算技术基础(2)new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、.NET4.0并行计算技术基础(2)上一部分介绍了CPU与“核”以及“并行”和“并发”的区别,这一部分我们将进一步介绍并行计算的性能衡量与并行计算系统的大致分类,为后面介绍.NET4.0的并行计算打下基础。  3如何衡量并行计算的性能提升?之所以要研究并行计算,其目的是获得更好的性能。一个软件系统的性能,通常使用两个指标来进行衡量:(1)      响应速度(Responsiveness):用户向软件系统提交一个工作任务,软件系统要花费多长的时间才能处理完毕并将结果通知用户?(2)      吞吐率

2、(Throughput):在单位时间间隔内软件系统最多可以处理多少个工作任务?并行计算的优势就在于它可以缩短系统完成单个工作任务的时间和提升系统的吞吐率。那么,我们怎样定量衡量因为“并行”而带来的系统性能提升?很明显,这里所说的“提升”是有参照物的,对于并行算法,最直观的参照物就是完成同样功能的串行算法。人们使用“加速系数(speedupfactory)[1]有的书中将其称为“加速比”。 扩充阅读:“乐观”的Gustafson定律“阿姆达尔定律”的结论让人沮丧,但到了20世纪80年代晚期,Sandi

3、a国家实验室的科学家们在对具有1024个处理器的超立方体结构上观察到了3个实际应用程序随着处理器的增加发生线性加速的现象,科学家JohnL.Gustafson基于此实验数据在1988年提出了一个新的计算加速系数的公式:与“阿姆达尔定律”一样,S(p)代表加速系统,p代表处理器数量,f代表算法中串行部分所占的比例。Gustafson定律说明在许多实际的应用程序中得到接近线性的加速效果是可能的。“阿姆达尔定律”的问题出在它的前提过于理想化。因为并行算法通常能处理比串行算法更大规模的问题,即使算法仍然存在

4、着串行部分,但由于问题规模的不断扩大,往往会导致算法中串行部分所占比例的持续减少。 Gustafson定律又点燃了人们继续研制集成更多处理器(或集成更多执行核的处理器)的计算机系统的热情。可以预测,未来的计算机将集成更多的处理器,当前双核个人电脑的普及只不过是一个开始罢了。 4实际测量并行程序的性能不管是“悲观”的阿姆达尔定律还是“乐观”的Gustafson定律都只是一种理论上的结果,在真实的运行环境中,影响程序性能的因素有许多,仅靠几个简单的公式并不能真正计算出一个真实的“并行”程序比相应的“串行

5、”版本到底快了多少。最可靠的方法还是实地测试,在同样的软件和硬件环境中,先后运行程序的“并行”和“串行”两个版本,比对它们的执行时间,就知道结果了。在.NET程序中,我们可以使用StopWatch类来测试算法的性能。以下是使用StopWatch测试算法运行时间的代码框架: Stopwatchsw=newStopwatch();sw.Start();//启动计时//编写代码执行被测试的算法sw.Stop();//停止计时//获取算法执行时间longUsedTime=sw.ElapsedMillisec

6、onds;//... 另外,调用StopWatch对象的Reset()方法可以重置计时值,再接着调用Start()方法就可以开始一个新的计时。5并行计算系统的大致分类有两种主要的并行计算系统类型。一种称为“共享存储器(SharedMemory)的多处理器”系统,其思想很简单,所有处理器都可以访问同一个主存储器,从而允许运行在多个处理器上的各个线程可以通过主存储器方便地共享信息。  基于共享存储器的并行计算系统发展已有许多年,人们也为开发运行于这种平台的软件提供了不少工具,其中得到广泛应用的是Open

7、MP,它可以帮助程序员使用Fortran(或C/C++)语言高效地开发多线程并行计算程序。C#和VisualBasic编译器没有遵循OpenMP标准,但通过给.NET基类库添加并行扩展(ParallelExtensions),可以使用比OpenMP更方便的方法设计并行计算程序。扩充阅读: OpenMP简介针对共享存储器的并行计算系统,为了简化软件开发工作,人们设计了一个OpenMP标准,通过给代码中添加特定的编译指令,让实现了此标准编译器自动地帮助我们生成并行指令代码。例如,以下是一个典型的循环代码

8、: for(inti=0;i<100000;i++){//……} 给上述代码添加一个特殊的编译指令: #pragmaompparallelforfor(inti=0;i<100000;i++){//……} 遵循OpenMP标准开发的编译器“认识”此指令,在编译时会自动生成相关的指令让此代码可以并行执行。OpenMP的实现机制决定要创建的线程个数,以及如何能够尽善尽美地管理这些线程。开发人员只需告诉OpenMP哪个循环应该以多线程方式执行,至于那些为了利用并行性而进行的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。