并行计算1

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

并行计算

学院名称计算机科学与技术学院专业计算机科学与技术

学生姓名

学号

年班级

2016年5 月20 日

一、实验内容

本次试验的主要内容为采用多线程的方法计算pi的值,熟悉linux下pthread 形式的多线程编程,对实验结果进行统计并分析以及加速比曲线分析,从而对并行计算有初步了解。

二、实验原理

本次实验利用中值积分定理计算pi的值

图1 中值定理计算pi

其中公式可以变换如下:

图2 积分计算pi公式的变形

当N足够大时,可以足够逼近pi,多线程的计算方法主要通过将for循环的计算过程分到几个线程中去,每次计算都要更新sum的值,为避免一个线程更新sum 值后,另一个线程仍读到旧的值,所以每个线程计算自己的部分,最后相加。三、程序流程图

程序主体部分流程图如下:

多线程执行函数流程图如下:

四、实验结果及分析

令线程数分别为1、2、5、10、20、30、40、50和100,并且对于每次实验重复十次求平均值。结果如下:

图5 时间随线程的变化

实验加速比曲线的计算公式类似于

结果如下:

图5 加速比曲线

实验结果与预期类似,当线程总数较少时,线程数的增多会对程序计算速度带来明显的提升,当线程总数增大到足够大时,由于物理节点的核心数是有限的,因此会给cpu带来较多的调度,线程的切换和最后结果的汇总带来的时间开销较大,所以线程数较大时,增加线程数不会带来明显的速度提升,甚至可能下降。

五、实验总结

本次试验的主要内容是多线程计算pi的实现,通过这次实验,我对并行计算有了进一步的理解。上学期的操作系统课程中,已经做过相似的题目,因此程序主体部分相似。不同的地方在于,首先本程序按照老师要求应在命令行提供参数,而非将数值写定在程序里,其次是程序不是在自己的电脑上运行,而是通过ssh和批处理脚本等登录到远程服务器提交任务执行。

在运行方面,因为对批处理任务不够熟悉,出现了提交任务无结果的情况,原因在于windows系统要采用换行的方式来表明结束。在实验过程中也遇到了其他问题,大多还是来自于经验的缺乏。

在分析实验结果方面,因为自己是第一次分析多线程程序的加速比,因此比较生疏,参考网上资料和ppt后分析得出结果。

从自己遇到的问题来看,自己对批处理的理解和认识还比较有限,经过本次实验,我对并行计算的理解有了进一步的提高,也意识到了自己存在的一些问题。

六、程序代码及部署

程序源代码见cpp文件

部署说明:

使用gcc编译即可,编译时加上-pthread参数,运行时任务提交到服务器上。

编译命令如下:

gcc -pthread PI_3013216011.cpp -o pi

pbs脚本(runPI.pbs)如下:

#!/bin/bash

#PBS -N pi

#PBS -l nodes=1:ppn=8

#PBS -q AM016_queue

#PBS -j oe

cd $PBS_O_WORKDIR

for ((i=1;i<=10;i++))

do

./pi num_threads N >> runPI.log

done

提交命令:

qsub runPI.pbs

之后查看runPI.log结果即可。

相关文档
最新文档