您的当前位置:首页并行计算实验

并行计算实验

2024-02-08 来源:飒榕旅游知识分享网
实验(一)多线程计算π,性能分析

一、实验内容及原理:

通过多线程方法,用C语言实现。采用积分法,由如下公式求π: 1441dx 201x2N0iNi0.51 N 并通过双向比较,分析性能:

1)计算量相同,线程数不同。例如,N取1000,000,测试使用1、2、3、4……个线程时所需要的时间。 2)线程数相同,计算量不同。例如,只考察单线程和双线程的性能对比,N分别取不同的数值。

二、程序流程图

开始第i个线程执行的函数开始线程数=N处理数据数=NUM线程数组thread[N]Pi=0i=0K=IThread[i]=0i=i+1k=k+Ni1)计算量相同,线程数不同。N=1000,000,thread_num=1,2,3,4,5性能对比。

0.080.070.060.050.040.030.020.010 线程数1线程数2线程数3线程数4线程数5N=1000000

2)线程数相同,计算量不同。thread_num=2,N取不同的数值。

0.30.250.20.150.10.050N=50000N=100000N=500000N=1000000N=5000000thread_num=2

(2)效果图:

1)计算量相同,线程数不同。N=1000,000,thread_num=1,2,3,4,5性能对比。

2)线程数相同,计算量不同。thread_num=2,N取不同的数值。

四、理论性能分析

首先,考虑单线程多个N的情况,随着N的加大,计算量加大,计算时间必然也会随着增加。其次,考虑多线程固定N的情况,随着线程数增加,同时计算的数量在增加,计算时间必然会相应减少,但是会有一个极限值,不会随着线程数的增加而无限制的减少。(值得注意的是,时间采用clock()计算精度不高。) 五、实验结果分析

如上面截图所示,在单线程计算量不同的情况下,计算时间会随着计算量的增加而增加。在多线程计算量相同的情况下,计算时间会相应减少。 六、总结展望

对于大量的重复式计算,我们可以利用所学习的并行知识解决问题,尤其像这种可以进行域分解的算法,我们完全可以创建多线程来减少计算时间,提高效率,相信以后的学习和工作中,并行会给我们带来更多的方便。

实验题目二:3PCF计算多线程实现

一、实验内容

已知:点集D、R。

定义D中的点为ai∈D,R中的点为bi∈R。 距离:r1、r2、r3、err

求:满足以下条件的三元组(空间中三角形)的数目

,|ai-bm|=r1±err且|ai-bn|=r2±err且|bm-bn|=r3±err 二、实验原理

对于R中所有点,判断两两之间是否满足距离r3,若满足,保存点对。在D中每个点都和点对做比较,判断是否满足一边距离为r1,另一边距离为r2,若满足则累加。

三、程序流程图

四、实验结果: (1)数据图表:

1)线程数相同,计算量不同

35302520151050data_size=32data_size=256data_size=512data_size1024data_size=2048线程数为42)计算量相同,线程数不同

2.521.5data_size=51210.50线程数1线程数2线程数3 线程数4

(2)效果图:

1)线程数相同,计算量不同 2)计算量相同,线程数不同

六、理论性能分析 首先,本算法比起以往的算法的优势在于先计算出R中符合r3条件的点对,这样使得计算效率有所提升。然后是本算法的并行实现也同样在于域分解,及对D中点并行处理,同R中点进行比较判断,所以同样可以提高效率。在线程数相同的时候,随着计算量的增加,计算时间会相应增加,而这种增加是呈立方增加的。而计算量不同的时候,计算时间也会随着线程数的增加而相应减少。 七、实验结果分析

实验结果与上述结果基本符合。在线程数相同的时候,增大计算量会使得计

算时间呈立方形式增加。而在计算量相同的时候,增加线程数会使得效率有所提升,计算时间相应减少。 八、总结展望

对于3-PCF问题,始终没有突破性的算法来解决问题,但是,并行的引入已经使得我们提升了不少效率。尤其在处理大量数据的时候,并行的优势体现的尤为明显,相信并行会占据越来越大的程序份额。

实验题目三:MPI实现Jacobi迭代

一、实验内容

通过MPI实现Jacobi迭代,掌握怎样进行MPI的环境配置,熟悉MPI的六个基本接口,掌握怎样进行进程间的消息传递。 二、实验原理

迭代公式:

Jacobi迭代:数据划分

Jacobi迭代:通信

三、效果图:

四、程序流程图:

五、理论性能分析

用MPI实现Jacobi迭代,通过进程间通信来传递数据,进而实现每一轮的迭代。显然,迭代次数越多,所需时间也就越长。理论上来讲,随着进程数增加,效率会有所提升,,但也会有一个极限值。 六、实验结果分析

通过多次试验分析验证了上述结论,但是当数据量较小的时候,随着进程数增加,效率降低的现象会出现,而这也是可以理解的。 七、总结展望

用MPI实现Jacobi迭代,同样给了我们另一种解决问题的思路,虽然效率方面没有得到具体实例的比较和论证,但是多线程在具有相当数据量之后的优势还是相当明显的,而处理海量数据也是多线程或者多进程明显优于串行的地方。

实验题目:基于MapReduce模型的Wordcount 作者:解云涵

时间:2011年5月10日 实验原理:

map

ƒ将数据源中的记录(文本中的行、数据库中条目等)作为map函数中的key*value对

–例如,(filename, line)

ƒmap()将生成一个或多个中间结果,以及与input相对应的一个output key

reduce

ƒmap操作结束后,所有与某指定out key相对应的中间结果组合为一个列表(list)。

ƒreduce()函数将这些中间结果组合为一个或多个对应于同一output key 的 final value

–(实际上每一个output key通常只有一个final value)

实现方法:

按照老师所给的hadoop配置说明在ubuntu上配置好环境,然后使用Lib4中的数据做性能分析。

实验结果:

性能分析:

做了三种mapreduce

第一个是例子,ls.txt,的使用时间为map为 3秒,reduce为6秒,共9秒 第二个是lab4 其中一个文件,map为3秒,reduce为6秒,共9秒

第三个是整个lab4所有数据文件,共20个,总共时间为120秒,平均每个是6秒。

所以,当文件夹里是单个文件的时候,运行时间与文件大小无关,很明显ls.txt比lab4的文件小。但是当我们将所有文件放到input文件夹后,20个文件平均的时间会缩小。

总结展望:

在此次hadoop环境配置中,不同的电脑,出现各种不同的问题。配了一下午的环境才差不多搞定,有时候出现问题,无法得到解决,但是没有任何解决,过一段时间,就能运行下去,始终不知道为啥。Hadoop还是挺强大的,他能在这么

短时间内运行起mapreduce,解决大量数据。我也较为深刻了解了mapreduce的理论知识。

因篇幅问题不能全部显示,请点此查看更多更全内容