欢迎来到天天文库
浏览记录
ID:37445021
大小:523.10 KB
页数:26页
时间:2019-05-12
《自然对数底E值的并行计算》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、自然对数底E值的并行计算数学10-02班朱建伟摘要e是数学中最重要的数学符号之一,称为自然常数,是自然对数的底数。它最先由瑞士数学家欧拉在1727年使用。利用级数的方法求解e的值具有计算精确,速度较快的特点。其基本计算公式为:本文主要采用多线程技术,对e值的计算进行加速,得出计算时间与加速比,从而判断多线程技术加速效果,进而证明多核技术在数值计算方面的优越性。并且文中采用不同的并行方式来比较不同结果,查看哪种方式在并行计算中具有优越性,获得最终结果。关键字e的计算多线程加速比高性能计算引言e值在数学史上具有十分重要的意义,所以对e的计算进行研究也从未间断。已经有多种方式对e值进行
2、快速精确的计算,于是想到依托于现有算法,对其进行改造获得多线程算法,查看其计算速度,获得其加速比。通过对其加速效果的观察,获得多线程计算式中高性能计算方式,可以用于数值计算。重要常量值constintnumSteps=2000000;//计算终止值CRITICAL_SECTIONcs;//临界区声明intk=1;doublee=1.0;doublefact=1.0;//获得电脑线程数(核数)intnumOfProcessors;SYSTEM_INFOSysInfo;GetSystemInfo(&SysInfo);numOfProcessors=SysInfo.dwNumberOf
3、Processors;串行计算doubletemp_e=1.0;doubletemp_fact=1.0;for(inti=1;i4、+;LeaveCriticalSection(&cs);}利用线程ID号控制intthreadID=*((int*)arg);doublefact=1.0;for(intj=1;j<=threadID+1;j++)fact*=j;e+=1.0/fact;for(inti=threadID;i5、umOfProcessors];doubletemp=1.0;intj=0;intend_num=(numOfProcessors-1)*(numSteps/numOfProcessors);//初始化for(inti=1;i<=end_num+1;i++){if(i==(numSteps/numOfProcessors)*j+1){temp_fact1[j]=temp;j++;}temp*=I;}#pragmaompparallelforfirstprivate(temp_fact1)reduction(+:temp_e1)for(inti=1;i<=numSteps;i++)6、{temp_fact1[omp_get_thread_num()]*=I;temp_e1+=1.0/temp_fact1[omp_get_thread_num()];}加速比序号计算方式计算结果运行时间/s平均时间/s加速比1串行计算2.718280.6710.6550.663001.0000.640.6862临界区2.718280.390.4060.382251.7340.3740.3593线程ID2.718280.530.5310.538251.2320.5620.534OpenMP2.718280.2190.2030.207003.2030.2030.203返回numSte7、ps=2,000,000加速比序号计算方式计算结果运行时间/s平均时间/s加速比1串行计算2.718286.6146.5056.590751.0006.6146.632临界区2.718283.5883.8223.728501.7683.8383.6663线程ID2.718285.1955.3975.522251.1935.9445.5534OpenMP2.718282.2462.2622.191753.0072.0752.184numSteps=20,000,000加速比(两线程
4、+;LeaveCriticalSection(&cs);}利用线程ID号控制intthreadID=*((int*)arg);doublefact=1.0;for(intj=1;j<=threadID+1;j++)fact*=j;e+=1.0/fact;for(inti=threadID;i5、umOfProcessors];doubletemp=1.0;intj=0;intend_num=(numOfProcessors-1)*(numSteps/numOfProcessors);//初始化for(inti=1;i<=end_num+1;i++){if(i==(numSteps/numOfProcessors)*j+1){temp_fact1[j]=temp;j++;}temp*=I;}#pragmaompparallelforfirstprivate(temp_fact1)reduction(+:temp_e1)for(inti=1;i<=numSteps;i++)6、{temp_fact1[omp_get_thread_num()]*=I;temp_e1+=1.0/temp_fact1[omp_get_thread_num()];}加速比序号计算方式计算结果运行时间/s平均时间/s加速比1串行计算2.718280.6710.6550.663001.0000.640.6862临界区2.718280.390.4060.382251.7340.3740.3593线程ID2.718280.530.5310.538251.2320.5620.534OpenMP2.718280.2190.2030.207003.2030.2030.203返回numSte7、ps=2,000,000加速比序号计算方式计算结果运行时间/s平均时间/s加速比1串行计算2.718286.6146.5056.590751.0006.6146.632临界区2.718283.5883.8223.728501.7683.8383.6663线程ID2.718285.1955.3975.522251.1935.9445.5534OpenMP2.718282.2462.2622.191753.0072.0752.184numSteps=20,000,000加速比(两线程
5、umOfProcessors];doubletemp=1.0;intj=0;intend_num=(numOfProcessors-1)*(numSteps/numOfProcessors);//初始化for(inti=1;i<=end_num+1;i++){if(i==(numSteps/numOfProcessors)*j+1){temp_fact1[j]=temp;j++;}temp*=I;}#pragmaompparallelforfirstprivate(temp_fact1)reduction(+:temp_e1)for(inti=1;i<=numSteps;i++)
6、{temp_fact1[omp_get_thread_num()]*=I;temp_e1+=1.0/temp_fact1[omp_get_thread_num()];}加速比序号计算方式计算结果运行时间/s平均时间/s加速比1串行计算2.718280.6710.6550.663001.0000.640.6862临界区2.718280.390.4060.382251.7340.3740.3593线程ID2.718280.530.5310.538251.2320.5620.534OpenMP2.718280.2190.2030.207003.2030.2030.203返回numSte
7、ps=2,000,000加速比序号计算方式计算结果运行时间/s平均时间/s加速比1串行计算2.718286.6146.5056.590751.0006.6146.632临界区2.718283.5883.8223.728501.7683.8383.6663线程ID2.718285.1955.3975.522251.1935.9445.5534OpenMP2.718282.2462.2622.191753.0072.0752.184numSteps=20,000,000加速比(两线程
此文档下载收益归作者所有