logo资料库

基于Visual Studio的多线程编程及改进.pdf

第1页 / 共56页
第2页 / 共56页
第3页 / 共56页
第4页 / 共56页
第5页 / 共56页
第6页 / 共56页
第7页 / 共56页
第8页 / 共56页
资料共56页,剩余部分请下载后查看
第1章引言
1.1课题背景
1.2课题的价值及意义
1.3课题的国内外研究现状
1.4课题的难点、重点、核心问题及方向
1.4.1课题难点
1.4.2课题重点
1.4.3课题核心问题
1.4.4课题方向
第2章基本原理及相关知识简介
2.1积分中值定理
2.2蒙特卡洛方法
2.3π值的计算方法
2.3.1古典方法
2.3.2分析方法
2.3.3概率方法
2.3.4数值积分方法
2.4软件和硬件环境简介
2.4.1VisualStudio简介
2.4.2操作系统以及硬件环境简介
2.5MFC类库简介
2.5.1MFC类库概述
2.5.2MFC的特点
2.5.3三大基类
2.5.4应用类
2.5.5其它用户界面类
2.5.6绘图类
2.5.7其它MFC类
2.6进程简介
2.6.1进程的概念
2.6.2进程的状态
2.7线程简介
2.7.1线程的概念
2.7.2线程的类型
2.7.2.1用户级线程
2.7.2.2内核级线程
2.8进程与线程的区别
2.9线程常用API函数
第3章利用积分中值定理计算π值的实现
3.1利用积分中值定理计算π值的串行化算法实现
3.2利用积分中值定理计算π值的并行化算法实现
3.2.1多线程的应用
3.2.2线程的同步与互斥
3.2.3并行化算法的流程图
3.2.4并行化算法的具体实现
3.3利用积分中值定理计算π值的并行化算法实现的改进
3.4利用积分中值定理计算π值的串行化算法的程序运行结果分析
3.5利用积分中值定理计算π值的并行化算法的程序运行结果分析
3.6串行化算法和并行化算法比较
第4章利用蒙特卡洛方法计算π值的并行化算法实现
4.1蒙特卡洛方法介绍
4.1.1蒙特卡洛方法的概念
4.1.2蒙特卡洛方法的基本原理
4.1.3利用蒙特卡洛方法解决问题的步骤
4.2利用蒙特卡洛方法计算π值使用的具体模型
4.3利用蒙特卡洛方法计算π值的并行化算法的具体实现
4.4利用蒙特卡洛方法计算π值的并行化算法运行结果分析
第5章利用泰勒级数计算π值的并行化算法的实现
5.1由泰勒级数得到的公式
5.2利用泰勒级数计算π值的并行化算法的具体实现
5.2.1并行化算法的流程图
5.2.2并行化算法的具体实现
5.3利用泰勒级数求π值的并行化算法的具体实现的改进
5.4利用泰勒级数计算π值的并行化算法的程序运行结果分析
第6章不同的计算π值的并行化算法之间的比较
6.1利用蒙特卡洛方法与利用积分中值定理方法之间的差别
6.2利用积分中值定理方法与利用泰勒级数方法之间的差别
6.3线程数与程序运行时间的关系
第7章结束语
7.1基本结论
7.2本课题有待于进一步解决的问题及方向
7.3本人收获及体会
参考文献
致谢
附录
外文资料原文
外文资料译文
摘 要 摘 要 本课题设计的意义在于充分探讨了多线程编程的改进方法,完成了计算圆周 率的多种并行化算法,得到的结论是在多核计算机上多线程编程有助于提高程序 运行效率,但注重多线程编程的改进则能更进一步提高程序运行效率,但线程之 间的上下文切换会增加系统开销,延长程序运行时间,所以,要达到最优状态, 必须注意使用适当的线程数。 关键词:多线程编程,圆周率,并行计算 I
ABSTRACT ABSTRACT The significance of this project is to fully explore the design of a multi-threaded programming, improved methods for calculating pi to complete a variety of parallel algorithms, to the conclusion that multi-threaded multi-core computer programming help improve running efficiency, but pay attention to multi-threaded Improvement programming process is to further improve efficiency, but the context switching between threads will increase the system overhead, extended run time, therefore, to achieve the optimal state, must pay attention to use the appropriate number of threads. Keywords: multi-threaded programming, pi, parallel computing II
目 录 目 录 第 1 章 引言..................................................................................................................1 1.1 课题背景.........................................................................................................1 1.2 课题的价值及意义.........................................................................................1 1.3 课题的国内外研究现状.................................................................................1 1.4 课题的难点、重点、核心问题及方向.........................................................1 1.4.1 课题难点..............................................................................................1 1.4.2 课题重点..............................................................................................1 1.4.3 课题核心问题......................................................................................2 1.4.4 课题方向..............................................................................................2 第 2 章 基本原理及相关知识简介..............................................................................3 2.1 积分中值定理.................................................................................................3 2.2 蒙特卡洛方法.................................................................................................3 2.3 π值的计算方法.............................................................................................3 2.3.1 古典方法..............................................................................................3 2.3.2 分析方法..............................................................................................4 2.3.3 概率方法..............................................................................................5 2.3.4 数值积分方法......................................................................................5 2.4 软件和硬件环境简介.....................................................................................6 2.4.1 Visual Studio 简介...........................................................................6 2.4.2 操作系统以及硬件环境简介..............................................................6 2.5 MFC 类库简介..................................................................................................7 2.5.1 MFC 类库概述.......................................................................................7 2.5.2 MFC 的特点...........................................................................................7 2.5.3 三大基类...............................................................................................7 2.5.4 应用类..................................................................................................8 2.5.5 其它用户界面类..................................................................................8 2.5.6 绘图类..................................................................................................9 2.5.7 其它 MFC 类..........................................................................................9 2.6 进程简介.........................................................................................................9 2.6.1 进程的概念...........................................................................................9 2.6.2 进程的状态.........................................................................................10 2.7 线程简介.......................................................................................................10 2.7.1 线程的概念........................................................................................10 2.7.2 线程的类型........................................................................................11 2.7.2.1 用户级线程..............................................................................11 2.7.2.2 内核级线程.............................................................................11 2.8 进程与线程的区别.......................................................................................11 2.9 线程常用 API 函数.......................................................................................12 第 3 章 利用积分中值定理计算π值的实现............................................................15 3.1 利用积分中值定理计算π值的串行化算法实现.......................................15 3.2 利用积分中值定理计算π值的并行化算法实现.......................................16 3.2.1 多线程的应用.....................................................................................16 I
目 录 3.2.2 线程的同步与互斥.............................................................................17 3.2.3 并行化算法的流程图.........................................................................17 3.2.4 并行化算法的具体实现.....................................................................17 3.3 利用积分中值定理计算π值的并行化算法实现的改进...........................19 3.4 利用积分中值定理计算π值的串行化算法的程序运行结果分析...........20 3.5 利用积分中值定理计算π值的并行化算法的程序运行结果分析...........20 3.6 串行化算法和并行化算法比较...................................................................21 第 4 章 利用蒙特卡洛方法计算π值的并行化算法实现........................................22 4.1 蒙特卡洛方法介绍........................................................................................22 4.1.1 蒙特卡洛方法的概念........................................................................22 4.1.2 蒙特卡洛方法的基本原理................................................................22 4.1.3 利用蒙特卡洛方法解决问题的步骤................................................22 4.2 利用蒙特卡洛方法计算π值使用的具体模型...........................................22 4.3 利用蒙特卡洛方法计算π值的并行化算法的具体实现...........................23 4.4 利用蒙特卡洛方法计算π值的并行化算法运行结果分析.......................25 第 5 章 利用泰勒级数计算π值的并行化算法的实现............................................26 5.1 由泰勒级数得到的公式...............................................................................26 5.2 利用泰勒级数计算π值的并行化算法的具体实现...................................26 5.2.1 并行化算法的流程图........................................................................26 5.2.2 并行化算法的具体实现.....................................................................26 5.3 利用泰勒级数求π值的并行化算法的具体实现的改进...........................28 5.4 利用泰勒级数计算π值的并行化算法的程序运行结果分析...................28 第 6 章 不同的计算π值的并行化算法之间的比较................................................30 6.1 利用蒙特卡洛方法与利用积分中值定理方法之间的差别........................30 6.2 利用积分中值定理方法与利用泰勒级数方法之间的差别........................30 6.3 线程数与程序运行时间的关系....................................................................31 第 7 章 结束语............................................................................................................35 7.1 基本结论........................................................................................................35 7.2 本课题有待于进一步解决的问题及方向....................................................35 7.3 本人收获及体会............................................................................................35 参考文献......................................................................................................................36 致 谢............................................................................................................................37 附 录............................................................................................................................38 外文资料原文..............................................................................................................49 外文资料译文..............................................................................................................51 II
第 1 章 引言 第 1 章 引言 1.1 课题背景 自从出现了线程的概念,多线程编程就渐渐开始深入到程序开发的各个方 面,并得到了广泛的应用。 而 Visual Studio 作为一款主流的开发工具,很好的支持了多线程编程,本 课题就是在 Visual Studio 这个平台下利用 C++ 研究多线程编程并进行改进。 1.2 课题的价值及意义 基 于 Visual Studio 的 多 线 程 编 程 涉 及 了 操 作 系 统 中 的 同 步 与 互 斥 、 Windows API 等相关知识,涉及面较广,它的意义在于可以进一步加强对多线程 编程的认识和研究。 1.3 课题的国内外研究现状 多线程编程在现在的研究中越来越普遍,线程的概念是在进程的基础上提 出的,引入线程的目的就是为了减少并发执行时系统所付出的额外开销,使系统 具有更好的并发性。 国内外现在对多线程很重视对多线程的研究,从软件到硬件,软件上几乎 所有的操作系统都支持多线程,硬件上,多核 CPU、超线程等等都很好的兼容 了多线程。随着研究的进一步深入,多线程编程应用必将更加广泛。 1.4 课题的难点、重点、核心问题及方向 1.4.1 课题难点 课题难点是要实现多线程编程中的同步、互斥机制。 线程之间的同步与互斥是多个线程同时执行时必须面对的问题,当多个线程 需要访问临界资源时,比如修改全局变量,必须互斥的进行,否则会导致数据出 错。 处理好线程的同步与互斥,可以提高程序运行的效率,处理不好线程的同步 与互斥,则会导致死锁、无线等待的情况发生,更有甚者,会导致程序运行的结 果出错。 1.4.2 课题重点 课题的重点是要实现计算p值的各种算法,并提出改进方法。主要有:利用 中值积分定理计算p 值的串行算法、利用中值积分定理计算p 值的并行算法、利 用蒙特卡洛算法实现计算p值等。 1
电子科技大学学士学位论文 1.4.3 课题核心问题 课题的核心问题是如何充分利用多线程编程来实现程序的优化,如何充分利 用好多线程编程来提高程序运行速度。 课题采取的主要理论有: 1、积分中值定理:若 f 在[a,b]上连续,则至少存在一点 c 属于[a,b],使得 f 在[a,b]上的积分值等于 f(c)(b-a)。 2、蒙特卡洛方法:通过随机变量的统计实验求近似解。 1.4.4 课题方向 课题着眼于两个方向:多线程编程和改进计算p值的算法。二者汇合于一处, 那就是提高程序运行的效率。 2
第 2 章 基本原理及相关知识简介 第 2 章 基本原理及相关知识简介 2.1 积分中值定理 设 f Cab [ , ] Î ,则至少存在一点 [ , ]ab xÎ ,使 b ò a f xdx f b a ) ( )( x= ( ) - [1] 公式(2-1) 当 ( ) 0 f x ³ 时,公式(2-1)表明,若 f 在[ , ]ab 上连续,则在区间[ , ]ab 上至少能找到一点x,使得高为 ( )f x 底边长为b a- 的矩形面积恰好等于以 y f x= ( ) 为曲边梯形的面积。通常称 b 1 b a- ò a f xdx ( ) 为函数 f 在区间[ , ]ab 上的积分中值,也称公式(2-1)为积分中值定理。 2.2 蒙特卡洛方法 蒙特卡洛方法又称随机抽样技巧或统计实验方法。它是以概率统计理论 为基础的一种方法。由于蒙特卡洛方法能够比较逼真地描述事物的特点及物 理实验过程,解决一些数值方法难以解决的问题,因而该方法的应用领域日 趋广泛。 2.3 π值的计算方法 圆周率是人类获得的最古老的数学概念之一,早在大约 3700 年前,古 埃及人就已经在用 256/81 作为p的近似值了。 2.3.1 古典方法 起先人们采用的都是用圆内接正多边形和圆外切正多边形来逼近的古 典方法。 ® ® iii 正 6 边形 正 12 边形 正 24 边形 圆 图 2-1 利用古典方法求圆周率的示意图 3
电子科技大学学士学位论文 阿基米德曾用圆内接 96 边形和圆外切 96 边形夹逼的方法证明了 223 71 p< < 22 7 公式(2-2) 其中公式(2-2)右边的分数是由sin 公元 5 世纪,祖冲之指出 q q < < tan q 和 q p= / 96 推出。 3.1415926 p< < 3.1415927 公式(2-3) 比西方得到同样结果几乎早了 1000 年。 十五世纪中叶,阿尔.卡西给出p的十六位小数,打破了祖冲之的纪录。 1579 年,韦达证明 3.1415926535 p< < 3.1415926537 公式(2-4) 1630 年,最后一位用古典方法求p 的人格林伯格也只求到了p 的第 39 位小数。 2.3.2 分析方法 从 17 世纪中叶起,人们开始用更先进的分析方法来求 p 的近似值,其 中应用的主要工具是收敛的无穷乘积和无穷级数。 在微积分中的泰勒级数有 arctan x x = - x x x 3 9 9 3 5 5 + - ¥ åiii = k = 0 k ( 1) - x k 1 2 + k 2 1 + 公式(2-5) 当 1x= 时,有, p 4 容易证明 1 = - + - 1 1 1 1 3 5 7 9 + ¥ åiii = k = 0 ( 1) - k 1 k 2 + 1 公式(2-6) p 4 = arctan1 arctan = 1 2 + arctan 1 3 公式(2-7) 麦瑟(Machin)给出 4
分享到:
收藏