并行计算实验

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

并行计算

学院软件学院

年级2008级

班级一班

学号3007218144

姓名赵立夫

2010 年 3 月31 日

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

作者:赵立夫

完成时间:3月31日

一、 实验内容

1. 掌握Thread 类用法

2. 掌握java 多线程同步方法

3. 使用多线程计算π;

4. 对结果进行性能评价。

二、 实验原理

使用积分方法,即

计算π值,并使用java 多线程进行多线程操作。

三、 程序流程图

N N i dx x N i 15.0141402102⨯⎪

⎭⎫ ⎝⎛++≈+=∑⎰≤≤π

图1-1 主线程流程图

四、实现方法

1.方法简述:

本程序使用java多线程方法:

首先启动主进程,输入基数N和线程数threadNum;

第二步,通过主进程创建子进程并为每个子进程分配计算任务;

第三步,子进程执行计算认为并将结果返回到数组sums[]中;

最后,主进程将sums[]元素进行累加得到最终结果并输出。

2.程序的主要方法

PaiThread类,实现计算指定区间内的累加和

threadHandle.start()启动子线程,子线程将自动执run()方法

threadHandle.join()确保主进程在所有子进程计算完毕后执行后续

任务。

五、实验结果

1.实验结果数据表

编号计算基数子线程数计算结果使用

时间

1 1000000 0 3.1415946535889754 36ms

2 1000000 2 3.1415946535889017 26ms

3 1000000 3 3.141594653588898 22ms

4 1000000 4 3.141594653588918 25ms

5 1000000 5 3.141594653588914 26ms

6 100000 3 3.141612653498134 14ms

7 10000000 3 3.141592853589695 80ms

2.部分结果截图

图1-2 单线程pai计算结果图

图1-3多线程pai计算结果图3.理论性能及实际结果分析

编号子线程数

(不包括主

线程)计算结果使用

时间

加速

1 0 3.1415946535889754 36ms 1.0

2 2 3.1415946535889017 26ms 1.38

3 3 3.141594653588898 22ms 1.64

4 4 3.141594653588918 25ms 1.44

5 5 3.141594653588914 26ms 1.38

本程序使用多线程方法来提升程序的执行速度,所以当线程数不断增多时,程序运行时间应逐渐减少;再考虑到创建进程和信息传递的开销,当线程数大于计算机的内核数量时,程序运行时间应该随着线程数目的增加而增加。

由于运行计算机为四核系统,所以当子线程数(除去主线程)由单线程增加到3子线程运行时,程序运行时间由36ms降低为22毫秒,而当子线程增加到4个(即线程数目大于内核数量时),程序运行时间又上升到25ms(参照结果1至5),这与预期结果相符合;在看当基数改变时的情况,在结果3,6,7中,子线程数量均为3个,运算基数以10倍递增,运行时间也是成倍的减少或增加,(具体结果见上表),同样和预期结果相符。通过实验数据的分析验证了并行计算在程序运行性能上的理论。

六、总结展望

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

在并行化方面的开销较少。通过本次实验主要是对并行化原理的一个验证,证明了由多处理器分别运行线程带来的性能上的提高。也通过实验证明了当线程数超过实际处理器数量时,性能的下降。通过本次实验,我掌握了使用java进行多线程编程的基础知识,以及使用join等方法实现线程间的同步。

实验二 3PCF计算的多线程实现

作者:杨春白

完成时间:4月7日

一、实验内容

1.理解3PCF的计算原理;

2.掌握OPENMP编译制导语句的使用

3.掌握Linux环境下,openMP的编译执行

4.使用OPENMP实现3PCF计算

二、实验原理

1.定义:

点集D、R。

定义D中的点为a i∈D,R中的点为b i∈R。

距离:r1、r2、r3、err

2.求:

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

,|a i-b m|=r1±err且|a i-b n|=r2±err且|b m-b n|=r3±err

3.实验解法:

对于D中每一点a i,在R中找到与之距离为r1的点集R’,找到与之距离为r2

的点集R’’。在点集R’与R’’中,查找两点间距离为r3的点组数目。累加。

三、程序流程图

图2-1 3pcf程序流程图四、实现方法

1.方法简述:

本次实验通过使用OPENMP方法实现并行:

首先完成程序的单线程执行代码,原理见实验原理,执行过程见流程

图,主要通过for循环来实现,主循环for用来遍历dataD集合,第

二个for循环查找dataR中符合条件一的点,第三个for循环寻找

dataR中符合条件二的点,最后在以上找出的两个点集中找出的两点

是否符合条件三,如果符合,累加至sum,否则,继续循环;

并行化方案为,将第二和第三个for循环进行并行

最后,输出结果。

2.程序的主要方法

#pragma omp parallel

shared(pointSet1,pointSet2,pSet1Size,pSet2Size,num)

#pragma omp for

#pragma omp critical

#pragma omp atomic

五、实验结果

1.实验结果数据表

编号文件1名称文件2名称计算结果并行计算

时间

串行计算

时间

1 D32.txt R32.txt 3341

2 D256.txt R256.txt

3 D512.txt R512.txt

4 D1024.txt R1024.txt

5 D2048.txt R2048.txt

6 R4096.txt R4096.txt

7 R8192.txt R8192.txt

8 R10240.txt R10240.txt

9 R20480.txt R20480.txt

2.结果截图

3.理论性能及实际结果分析

本次实验使用OPENMP编码,即由编译器自动优化程序并分配子线程进程计算,因而忽略线程数目和其他偶然因素,随着输入数据的不断增加,运行时间应该急剧增大,结果值也应该急剧增大,而且伴随着存储空间溢出的危险。由上表可见当输入数据不断增多时,运算结果的确迅速变大,运行时间和存储空间的需求都在不断加大,这和预期是相符的。

相关文档
最新文档