并行计算实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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编码,即由编译器自动优化程序并分配子线程进程计算,因而忽略线程数目和其他偶然因素,随着输入数据的不断增加,运行时间应该急剧增大,结果值也应该急剧增大,而且伴随着存储空间溢出的危险。由上表可见当输入数据不断增多时,运算结果的确迅速变大,运行时间和存储空间的需求都在不断加大,这和预期是相符的。