自然对数底E值的并行计算_第1页
自然对数底E值的并行计算_第2页
自然对数底E值的并行计算_第3页
自然对数底E值的并行计算_第4页
自然对数底E值的并行计算_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、自然对数底E值的并行计算,数学10-02班 朱建伟,摘要,e是数学中最重要的数学符号之一,称为自然常数,是自然对数的底数。它最先由瑞士数学家欧拉在1727 年使用。利用级数的方法求解e的值具有计算精确,速度较快的特点。其基本计算公式为,本文主要采用多线程技术,对e值的计算进行加速,得出计算时间与加速比,从而判断多线程技术加速效果,进而证明多核技术在数值计算方面的优越性。 并且文中采用不同的并行方式来比较不同结果,查看哪种方式在并行计算中具有优越性,获得最终结果,关键字,e的计算 多线程 加速比 高性能计算,引言,e值在数学史上具有十分重要的意义,所以对e的计算进行研究也从未间断。已经有多种方式

2、对e值进行快速精确的计算,于是想到依托于现有算法,对其进行改造获得多线程算法,查看其计算速度,获得其加速比。通过对其加速效果的观察,获得多线程计算式中高性能计算方式,可以用于数值计算,重要常量值,const int numSteps = 2000000;/计算终止值 CRITICAL_SECTION cs;/临界区声明 int k = 1; double e = 1.0; double fact = 1.0; /获得电脑线程数(核数) int numOfProcessors; SYSTEM_INFO SysInfo; GetSystemInfo,串行计算,double temp_e = 1.0

3、; double temp_fact = 1.0; for (int i=1 ; inumSteps ; i+) temp_fact *= I; temp_e += 1.0 / temp_fact;,利用临界区进行同步,方式一: EnterCriticalSection,方式二: while (k numSteps) fact *= k; e += 1.0 / fact; EnterCriticalSection(,利用线程ID号控制,int threadID = *(int*)arg); double fact = 1.0; for (int j=1; j=threadID+1; j+) f

4、act *= j; e += 1.0 / fact; for (int i=threadID; inumSteps; i+=numOfProcessors) for (int j=2; jnumOfProcessors+2; j+) fact *= (i + j); e += 1.0 / fact;,利用Open MP并行,double temp_e1 = 0.0; double *temp_fact1 = new doublenumOfProcessors; double temp = 1.0; int j = 0; int end_num = (numOfProcessors-1) *(n

5、umSteps/numOfProcessors,初始化 for (int i=1; i=end_num+1; i+) if (i = (numSteps/numOfProcessors)*j+1) temp_fact1j = temp; j +; temp *= I;,pragma omp parallel for firstprivate(temp_fact1) reduction(+:temp_e1) for (int i=1 ; i=numSteps ; i+) temp_fact1omp_get_thread_num() *= I; temp_e1 += 1.0 / temp_fact

6、1omp_get_thread_num();,加速比,返回,numSteps=2,000,000,加速比,numSteps=20,000,000,加速比(两线程,结果,一、通过对表1与表2的比较可以看出,在计算e值的时候,运算量与计算时间成正相关,与实际加速效果联系不算太大,即运算量越大,计算时间越长,但加速比并未有明显提升,二、通过对表1与表3的比较可以看出,在计算e值的时候,同样运算量的情况下,加速效果双核与四核差别不大,运行时间也差别不大。说明线程之间共享数据会占用一部分时间,在简单数值计算中,数据的交流与共享可能会浪费掉很多时间,算法优化,fact *= i; e += 1.0 / f

7、act,fact /= i; e += fact,运行速度有巨大提升,比较,算法优化时间,注意,1、实际计算过程中,double类型的数据能够存储数据十分有限,最多可以存储到 ,实际就是计算阶乘到170时还在计算机数系之内,而计算到171时就不在表示范围之内了。而除法计算可以稍微多计算一些步,但是已经超出double类型数据范围,也只能计算到177步,对于第178步则不能计算,所以选取numSteps=2000000是为了增加计算量,对数据结果精确度提高没有什么影响,2、OMP并行的时候,parallel for采取是是分段并行的策略,必须做好初始化工作,因为不同线程开始工作的节点不同,所以要

8、想得到正确结果,必须给予正确的初始值,3、OMP并行也可以采取复制执行的方式,即运用parallel,但是在此时线程函数必须做出较大改变,其实就是将第二种实现方式前面加上即可,二者在基本原理上并无本质不同,就是具体实现方式与封装性上差别,5、在进行OMP并行计算时,必须了解其具体执行方式之后再进行改写串行算法,也不要只看表面结果前几位正确就以为万事大吉。它的优点是封装性好,具体调度工作有操作系统完成,缺点是灵活性太差,如果不了解原理往往结果具有不确定性,4、临界区进行同步的时候,避免频繁进入临界区,这样会浪费大部分时间。但是在不同计算机上有很大差别,具体情况因计算机的不同而不同,6、算法检测是

9、否准确,由于在170步以后已经超出double类型数据所能表示最大值,可以减少步数,比如选取100进行算法准确性检测,尤其是对OMP并行检测,结束语,经过对e值进行并行计算,更加深刻的明白多核计算的本质与内涵,与串行计算相比,并行计算就像是在赛道上跑步: 主程序进行准备安排好赛道,发令枪一响,多个线程同时开始运行就像是同时起跑,个人不会对其他人产生影响就像是线程间不会相互影响,而同步的概念就是几个线程等到齐头并进。临界区表示人为在跑道上营造一个每次只允许一个人通过的通道,所有人到达临界区必须按顺序一个一个通过。而互斥量就像是一枚标志物,拿到标志物的人在与大家齐头并进后可以顺利通过,而其他人必须等标志物传给他之后才能继续行进。信号量就是一段区域控制每次可以进去多个,可以出来多个,但是总量有限制,在进行信息交流时如果不能及时把信息给另一个人,另一个人就会不管不顾直接继续跑,就会产生错误。而事件就是跑步前的人为安排,安排好谁先谁后。而OMP并行则是运动员要跑玩一段路程,具体哪条跑道让他们自己去选取,但是初始状态你一定要给他们选好,及每个人要跑多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论