实验三多线程编程方法学
- 格式:doc
- 大小:59.50 KB
- 文档页数:4
路漫漫其修远兮,吾将上下而求索 - 百度文库
- 1 -
实验三:多线程编程方法学
模块一: Intel Parallel Studio基本使用
一 Parallel Amplifier的应用
4 确保编译正确通过。Ctrl+F5运行记录运行时间
s。
9 选择“Bottom-up” 选项,将会看到函数运行情况和CPU使用情况。
路漫漫其修远兮,吾将上下而求索 - 百度文库
- 2 -
在本项目中 threadFunction() 函数执行时间最长,执行时间
s。
10 结论:如果将本项目并行化,则应将 threadFunction()函数并行化。
二 Parallel Inspector的应用
6 在“summary”选项中将会看到项目中存在的问题是
创建线程函数出错
7 双击错误提示,进入源代码,有问题的代码是
threadHandles[i] =
CreateThread( NULL,0,threadFunction,(LPVOID)&tNum[i],0,NULL);
9 编译执行,运行时间________。此时,虽然代码执行结果正确,但是运行效率
极低。
13 选择“Bottom-up” 选项,将会看到项目中的线程同步过程。分析线程同步过
程中存在的问题是
多个线程同时访问和离开临界区时,会出现长时间的等待14 继续优化代码,
达到满意优化效果。
优化代码后,运行时间________。
代码如下:
路漫漫其修远兮,吾将上下而求索 - 百度文库
- 3 -
static long num_steps= 10000000;//将迭代的次数适当的缩减
EnterCriticalSection(&gCS);
sum = sum + 4.0/(1.0 + x*x); //compute partial sums at each th
LeaveCriticalSection(&gCS);
模块二: 多线程编程综合练习
一 编译执行串行代码
2 编译PrimeSingle项目成功后,打开项目属性对话框,通过Configuration
Properties中的Debugging,在Command Arguments参数中输入1 2000,如下
图所示。记录执行结果,质数个数: 303 ,执行时间: 0.03
s
3 将Command Arguments参数中输入1 5000000,记录执行结果,质数个数:
669 ,执行时间: 0.06 s
二 用Parallel Amplifier工具查找PrimeSingle项目的热点
8 选择“Bottom-up” 选项,将会看到函数运行情况和CPU使用情况。
在本项目中 ShowProgress() 函数执行时间最长,执行时间 0.015
s。
9 结论:如果将本项目并行化,则应将 ShowProgress()函数并行化。
三 编译执行并行代码
2 打开OpenMP开关,编译PrimeOpenMP项目,确认编译通过后,将Command
Arguments参数修改为1 5000000。 多次执行记录执行结果,
质数个数: 348513 ,执行时间: 56.57 s
质数个数: 348513 ,执行时间: 66.57 s
执行结果的不唯一,说明程序存在问题。
四 用Parallel Inspector工具查找PrimeOpenMP项目中存在的问题
4 在“summary”选项中将会看到项目中存在的问题是_数据有冲突
7 修正后程序输出结果(参数为 1 5000000):
质数个数: 348513 ,执行时间: 7.97 s
加速比: 8.50
五 性能提升——减少printf语句的调用次数
路漫漫其修远兮,吾将上下而求索 - 百度文库
- 4 -
2 修正后程序输出结果(参数为 1 5000000):
质数个数: 348513 ,执行时间: 6.81 s
加速比: 10.15
六 性能提升——用InterlockedIncrement代替critical
2 修正后程序输出结果(参数为 1 5000000):
质数个数: 348513 ,执行时间: 4.45 s
加速比: 15.13
简答与思考
实验总结