当前位置:
文档之家› 并行计算实验一:多线程计算π
并行计算实验一:多线程计算π
2.2 并行思想 在上述计算过程中唯一可以并行化的地方是随机数模拟了, 假设投入的总点 数为 kSamplePoints ,开启 num_threads 个线程,这样每个线程平均的去投 kSamplePoints/num_threads 个点,最后将所有线程的结果求和并计算概率 P, 这样比串行的效率高很多。
三、程序流程图
(1)串行流程图: 串行流程图只需要调用 hits 函数即可(hits 函数如下图) ,在此不再赘述。 (2)并行流程图
四、实验结果及分析
4.1 实验结果数据统计 (1)随机点个数为 107
串、并行运行结果: 线程数 PI 的值 0 3.1 411 3 153 947 1 1 2 3 4 5 6 7 8 9 10 3.14 3.14 3.14 3.14 3.14 3.14 3.14 3.14 3.14 3.14 113 113 113 113 113 113 113 113 113 113
4.2 加速比曲线 柱形图:
8 7 6 5 加速比 4 3 2 1 0 0 1 2 3 4 5 线程数 6 7 8 9 10 随机点个数为10^7 随机点个数为10^8
折线图:
8 7 6 5 加速比 4 3 2 1 0 0 1 2 3 4 5 线程数 6 7 8 9 10 随机点个数为10^7 随机点个数为10^8
ห้องสมุดไป่ตู้
3.89 5026
2.74 0197
(2)随机点个数为 10 线程数 PI 的值 运行时 间/微秒 加速比
8
串、并行运行结果: 0 1 2 3 4 5 6 7 8 9 10 3.1 3.14 3.14 3.14 3.14 3.14 3.1 3.14 3.14 3.14 3.1 417 17 17 17 17 17 417 17 17 17 417 153 1547 7974 5469 4191 3825 3352 2891 2304 2448 2865 49 93 15 72 35 31 52 11 34 736 753 1 1 0.99 1.92 2.81 3.66 4.01 4.5 5.31 6.67 6.27 5.3 3286 7849 0568 8113 8488 859 7178 1068 9787 653 2 7
1547 70 1075 52 1048 04 9090 5 6193 7 7704 6 4830 2 4142 5 3952 4 5618 1
运行时 间/微秒 加速比
0.99 4682
1.43 1373
1.46 8904
1.69 3493
2.48 5542
1.99 8118
3.18 7177
3.71 6282
一、实验内容
(1)利用蒙特卡罗方法求圆周率 PI (2)编写串行和多线程的代码分别计算并记录时间 (3)统计数据并画出加速比曲线 (4)对实验结果分析及感想
二、实验原理
2.1 计算原理 在数值积分法中, 我们利用求单位圆的 1/4 的面积来求得 Pi/4 从而得到 Pi。 单位圆的 1/4 面积是一个扇形, 它是边长为 1 单位正方形的一部分,只要能求出 扇行面积 S1 在正方形面积 S 中占的比例 K=S1/S 就立即能得到 S1,从而得到 Pi 的值。 怎样求出扇形面积在正方形面积中占的比例 K 呢?一个办法是在正方形中 随机投入很多点, 使所投的点落在正方形中每一个位置的机会相等看其中有多少 个点落在扇形内。 将落在扇形内的点数 m 与所投点的总数 n 的比 m/n 作为 k 的近 似值。 怎样实现这样的随机投点呢?任何一款计算机语言都有这种功能,能够产 生在区间[0,1]内均匀分布的随机数,产生两个这样的随机数 x,y,则以(x,y)为 坐标的点就是单位正方形内的一点 P,它落在正方形内每个位置的机会均等,P 落在扇形内的充要条件是 x^2+y^2<=1。 设投入的总点数为 S1 ,根据判定条件可计算出落入园内的为 S2 ,则有 ������ S2 =P= 4 S1 由上式即可算出������的值。
4.3 结果分析 分析结果得: (1)串行比单线程运行时间短(即加速比小于 1),此结果很好解释:单线程 相比于串行还要花费时间创建一个线程,自然运行时间比串行慢。 (2)理论上,随着线程数线性增大,运行速度应该相应的线性增大,但实际 上我们通过加速比曲线可以看出, 随着线程数的增大加速比大于 1 且总体趋势在 递增,但其增幅远远小于线性,分析此结果我认为是由于一下两个方面: 1)随着线程数的增大, 运行时需要开辟更多的内存空间,需要额外消耗一 部分时间。 2)本实验中的数据规模小于 108,故即使是采用 int 型的最大值 CPU 都可 以在很短的时间内计算完毕, 而开启线程所用的时间相对于此问题的计算时间来 说不能近似忽略,故采用多线程对速度的提升并不理想。 (3)对比 107 个随机点和 108 个随机点的加速比曲线,我们发现当数据点 越多时 PI 的计算越准确,而且由于计算时间的增大,创建线程所需的时间对总 时间的影响越小,从而多线程的优势越发明显。
并行计算实验一:多线程计算π
学院计算机科学与技术 专业计算机科学与技术 年级 2013 级 学号 姓名
2016 年 5 月 27 日
目录
一、实验内容................................................................................................................................... 3 二、实验原理................................................................................................................................... 3 2.1 计算原理........................................................................................................................... 3 2.2 并行思想........................................................................................................................... 4 三、程序流程图............................................................................................................................... 4 四、实验结果及分析....................................................................................................................... 6 4.1 实验结果数据统计 ........................................................................................................... 6 4.2 加速比曲线....................................................................................................................... 7 4.3 结果分析........................................................................................................................... 8 五、实验总结................................................................................................................................... 8
五、实验总结
通过这次实验我学会了很多内容,以前虽然学习过关于线程、进程的概念,但是 并没有真正的使用线程编写代码,利用随机数生成 PI 的多线程思想很简单,但 是从零开始的我花了好久才调通多线程的程序,当运行产生正确的输出结果时, 心里十分高兴。随后让我绝望的是,随着线程数的增加,运行时间成倍的上升, 这与实际矛盾,最后终于知道是由于在线程中生成随机数的原因,修改代码,并 行程序快的多了。 通过编写这个小的多线程程序,对计算机的线程、进程等资源的调度有了更 加深刻的认识。通过对实验的串行、并行结果的分析,更加清晰的认识到并行化 的重要性。