并行计算实验一
综述
- 实验名称与内容:
多线程计算正弦值
方法:利用正弦函数的泰勒级数展开式计算结果,要求使用Pthread并行化实现,输入包含弧度值、展开式的项数和线程数公式懒得粘贴了
- 实验环境的配置参数
CPU:2Intel(R) Xeon(R) Gold 5218
内存:256G
硬盘:3600G,使用RAID5磁盘阵列技术,可用容量为1.2T
操作系统:CentOS7
编译环境:GCC4.8.5、OpenMPI 1.10.7 - 实验题目问题分析
密集型数值计算问题,可将数据划分并行
将N项任务平均分配给多个线程,每个线程按固定步长跳跃式处理项
每个线程先计算局部和val,最后通过互斥锁合并到res(自己加上)实验报告具体填法建议用一下agent
- 方案设计
- 大概思路:通过命令行输入实验所需参数,再在主线程中解析参数并创建子线程,在子线程中进行局部计算,最后将结果累加到全局共享变量,主线程输出结果res
- 流程图:此处略
- 伪代码:把.cpp .pbs丢给agent分析得出(记得粘图片)
- 实现方法:
- cal_sin.cpp(粘图片)
- cal_sin.pbs(粘图片)
- 申请1个节点
- 通过修改ppn值来改变线程数
- 合并标准输出和错误输出到同一个文件
- 切换到作业提交时的目录
- 获取分配的核心数(等于ppn值)
- 运行程序,测量时间,结果保存到run.log
- 结果分析
- 数据:
- 未加锁(选做):(ppn值依次为16 8 4 2 1)
不同ppn值的cal_sin.oxxx截图
数据截图(运行次数10次,10个real time)
加速比数据
加速比曲线 - 加锁:(ppn值依次为16 8 4 2 1)
不同ppn值的cal_sin.oxxx截图
数据截图(运行次数10次,10个real time)
加速比数据
加速比曲线
- 未加锁(选做):(ppn值依次为16 8 4 2 1)
- 结果分析:随着线程数增加,初期对作业时间的优化较大,当线程数到达某一程度时,优化效果不再明显,性能损失加剧,可能是线程越多锁竞争越激烈,从而导致性能瓶颈
- 数据:
- 个人总结:交给agent罢
实验操作
- ssh连接,密码学号(直接用powershell)
1 | ssh -p 9922 用户名@172.28.9.54 |
- 进入后如下操作:
1 | cd ~ |
用编辑器打开本地文件cal_sin.cpp,直接把代码复制到powershell并保存
验证结果:
1 | cat cal_sin.cpp |
集群上ftp好像不能直接连接,此处懒的下载FileZilla
- 加锁(cal_sin.cpp):
实验提供的cpp版本是没加锁的,这里建议加上互斥锁
1 |
|
- 编译测试
1 | g++ -pthread -o cal_sin cal_sin.cpp |
- 提交作业并记录实验数据
pbs直接使用实验提供的即可,传入过程与.cpp同理
1 | qsub cal_sin.pbs # 提交 |
数据只记录real time即可,每个ppn值共运行10次,然后取平均值
脚本默认ppn=8,加锁状态下平均值约为7.88
- 更改脚本中的ppn值(我取了1 2 4 8 16),重复第5步
1 | vim cal_sin.pbs |
- 计算加速比
加速比 = 单线程运行时间(ppn = 1) / 多线程运行时间
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 QingMaxLim-Blog!






