实验一多线程计算π及性能分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一多线程计算π及性能分析
作者:赵立夫
完成时间:月5日
1、实验内容
1.掌握类用法
2.掌握多线程同步方法
3.使用多线程计算π;
4.对结果进行性能评价。

2、实验原理
计算π值,并使用
3、程序流程图
图主线程流程图
4、实现方法
1.方法简述:
本程序使用多线程方法:
首先启动主进程,输入基数和线程数;
第二步,通过主进程创建子进程并为每个子进程分配计算任务;
第三步,子进程执行计算认为并将结果返回到数组[]中;
最后,主进程将[]元素进行累加得到最终结果并输出。

2.程序的主要方法
类,实现计算指定区间内的累加和
()启动子线程,子线程将自动执()方法
()确保主进程在所有子进程计算完毕后执行后续任务。

5、实验结果
1.实验结果数据表
2.部分结果截图
图单线程计算结果图
图多线程计算结果图
3.理论性能及实际结果分析
本程序使用多线程方法来提升程序的执行速度,所以当线程数不断增多时,程序运行时间应逐渐减少;再考虑到创建进程和信息传递的开销,当线程数大于计算机的内核数量时,程序运行时间应该随着线程数目的增加而增加。

由于运行计算机为四核系统,所以当子线程数(除去主线程)由单线程增加到子线程运行时,程序运行时间降低,而当子线程增加到个(即线程数目大于内核数量时),程序运行时间又上升,这与预期结
果相符合。

通过实验数据的分析验证了并行计算在程序运行性能上的
理论。

6、总结展望
这次实验较为简单,并行化的方法非常直观,程序的逻辑也十分清晰。

在并行化方面的开销较少。

通过本次实验主要是对并行化原理的一个验证,证明了由多处理器分别运行线程带来的性能上的提高。

也通过实验证明了当线程数超过实际处理器数量时,性能的下降。

实验二计算的多线程实现
作者:赵立夫
完成时间:月日
一、实验内容
已知:点集、。

定义中的点为∈,中的点为∈。

距离:、、、
求:满足以下条件的三元组(空间中三角形)的数目
<, , >,±且±且±
二、实验原理
对于中所有点,判断两两之间是否满足距离,若满足,保存点对。

在中每个点都和点对做比较,判断是否满足一边距离为,另一边距离为,若满足则累加。

三、程序流程图
四、实验结果: ()数据图表:
)线程数相同,计算量不同
5101520253035data_size=32
data_size=256
data_size=512
data_size1024
data_size=2048
)计算量相同,线程数不同
0.511.5
22.5线程数1
线程数2
线程数3
线程数4
()效果图:
)线程数相同,计算量不同 )计算量相同,线程数不同
六、理论性能分析
首先,本算法比起以往的算法的优势在于先计算出中符合条件的点对,这样使得计算效率有所提升。

然后是本算法的并行实现也同样在于域分解,及对中点并行处理,同中点进行比较判断,所以同样可以提高效率。

在线程数相同的时候,随着计算量的增加,计算时间会相应增加,而这种增加是呈立方增加的。

而计算量不同的时候,计算时间也会随着线程数的增加而相应减少。

七、实验结果分析
实验结果与上述结果基本符合。

在线程数相同的时候,增大计算量会使得
计算时间呈立方形式增加。

而在计算量相同的时候,增加线程数会使得效率有所提升,计算时间相应减少。

八、总结展望
对于问题,始终没有突破性的算法来解决问题,但是,并行的引入已经使得我们提升了不少效率。

尤其在处理大量数据的时候,并行的优势体现的尤为明显,相信并行会占据越来越大的程序份额。

实验三实现迭代
作者:赵立夫
完成时间:月日
1、实验内容
. 理解迭代的原理;
. 掌握的使用方法;
. 使用实现迭代。

2、实验原理
即矩阵中每一点的值等于上下左右四点的值的平均值。

3、程序流程图
4、实现方法
1.方法简述:
本程序使用方法:
首先,采用行划分原则,将矩阵划分为四等份;
第二,编写初始化矩阵方法;
第三,发写消息发送和接受方法;
第四,应用函数计算每点的值;
第五,迭代计算,总次数为十次。

(需要注意边界模块处理的特殊性。


2.程序的主要方法
([][], , ,
, ); ([][], , ,
, , );
5、实验结果
.实验结果数据表
.理论性能及实际结果分析
这次实验室使用方法对进行并行计算。

有公式可以看出,迭代的次数越多,计算结果精度越准确,实验结果也证明,迭代的次数与计算结果精度成正比。

.总结展望
这次实验的目的是对的编程方式的了解,更熟悉了六个基本函数的使用方法。

在迭代中体现为:把总问题分为四个矩阵,第一个和第四个矩阵与其他两个的处理方式有所不同,那么应该对第一和四矩阵修改,使他们与其他两个一样。

采用同样的方法处理这四个矩阵。

同时我们吸收分治法的思想,将大问题分解为小问题,将容易解决的问题求解后再将结果合成求解。

实验四:对并行化的深入分析设计
作者:赵立夫
完成时间:月日
一、问题的分析
问题——
已知:点集、。

定义中的点为∈,中的点为∈。

距离:、、、
求:满足以下条件的三元组(空间中三角形)的数目
<, , >,±且±且±
分析——
问题相当于有两个闭包的球体球和球,每个球体内部有很多个点,现在要求我们在球内部选定一个点,在球内部选择两点,使得这三个点构成的三角形,满足的条件。

二、实验原理
方法一:如果只是很少的点,那么我们可以直接用暴力破解的方法。

在中任选一点,在中选两个点,然后判断是否满足条件,直至遍历中所有的点对,然后在中再选另一个点,同样的操作,在中遍历所有的点。

这样的想法很简单,我们也很容易看到这个算法的复杂度。

中遍历一边复杂的为,中遍历一遍复杂度为,一共复杂度为,显然随着数据量的增大,这种复杂度是不能忍受的。

虽然很容易并行化,但方法还是过于暴力。

方法二:考虑用矩阵相乘的方法。

遍历中每一点,在中找到与之相距为或的点,获得矩阵和;
遍历中每一点,在中找到与之相距为的点,形成矩阵;
×(×) ××;
这种方法实现很容易,先构造矩阵,然后直接相乘,从图中就可以看到复杂度应为,但是这种方法有一个致命的缺点就是空间占用太大,若有个点,每个点的类型为型,则需要一个400M的空间来存储矩阵,同理和都需要400M的空间,这样一共需要1.2G的空间来存放数据,当数据增多时,这种方法占用的空间将是非常恐怖的。

而且并行化方面和方法一比较,相对复杂些。

方法三:综合方法一,方法二。

第一步,遍历中每个点,在中找到与之相距为的点,保存点对到。

第二步,遍历中每个点,在的点对中找到同时满足与之相距为和的点对,累加。

即得到最终结果。

这种方法结合了前两种方法,既没有的高复杂度,也没有占用大量空间。

当中点对数大于中数据数量时,复杂度为*;
当中点对数小于中数据量时,复杂度为。

并行化程度基于方法一和方法二。

方法三程序流程图如上图所示。

三、论证
首先考虑方法一,由于方法一是大多数人所能想到的一个比较传统的方法,其思想是根据题目要求一步步求解,即先分别求出符合和的点对,然后再从所求出的点对中找出符合的点对,这样所求得的由三个点构成的集合即为一个解。

根据以上分析,其正确性是毋庸置疑的。

本算法由于先要对中每个点进行遍历,还要从中取两个点,所以复杂度为。

÷
其次考虑方法二,本方法为老师所提供的方法。

是在方法一上的一部分改进,是说先从集合中找出符合的点对,记录在一个*矩阵中,这样符合的记为,不符合的记为。

这样,进行下一步运算或的时候,就不必再去整个遍历,根据前一部分维护的矩阵即可立即找到符合条件的点对,继续判断记录为的对应点是否符合令一个或者。

虽然本算法在效率上有所提高,但是对于内存的使用非常大,考虑到处理大量数据时,要维护的一个*矩阵的代价时相当大的,所以本方法并不十分可取,但比起第一个方法来说已经有了相当大的进步。

最后考虑方法三,本方法是在方法一和方法二的基础上得到的一个方法。

首先也是要对集合进行计算,求出其中符合的点对,不同的是这次不是维护一个矩阵,而是维护一个数组,其中的一个元素保存的是符合条件的点对。

然后遍历中的点,与以上数组的元素进行判断分析,即可求出符合条件的解。

本算法的重点改进在于维护了一个一维数组而非矩阵,并且这个数组的大小是随着数据不同而不同的,不会耗费大量空间,远远小于固定矩阵所带来的开销。

而这也是在处理海量数据时所必须要考虑的问题。

另外,应用并行求解本题也是对的一个重大突破,同样处理大量数据时,用多线程的方法会带来大量的效率提升,使得我们的算法可行性有了更大的提高。

相关文档
最新文档