当前位置: 首页 > news >正文

商城网站 免费开源搜索引擎优化的技巧

商城网站 免费开源,搜索引擎优化的技巧,合同管理软件系统,如何建立单位微信公众号OpenMP模型 gcc编译openmp指令:gcc test.cpp -o test -fopenmp 定积分计算 函数面积 给定一个定积分,计算其面积: ∫ 0 1 4.0 ( 1 x 2 ) d x \int^{1}_{0}{\frac{4.0}{(1x^2)}dx} ∫01​(1x2)4.0​dx omp 概念 并行区域 并行区域用于…

OpenMP模型

gcc编译openmp指令:gcc test.cpp -o test -fopenmp

定积分计算 函数面积

给定一个定积分,计算其面积:
∫ 0 1 4.0 ( 1 + x 2 ) d x \int^{1}_{0}{\frac{4.0}{(1+x^2)}dx} 01(1+x2)4.0dx

omp 概念

并行区域

并行区域用于多线程并行执行指令

#pragma omp parallel
{... do lots of stuff
}//end of parallel region

临界区

临界区用于解决:内存竞争问题,该区块中的代码只能有一个线程执行,其他线程必须等待。

#pragma omp critical
{... one or more lines of code
}

栅栏

栅栏用于解决线程同步问题,通过栅栏设置的锚点,必须等所有线程均执行到该位置才能继续往下执行。

#pragma omp barrier
//... continue work

栅栏通常用于这种情况,即必须在所有线程完成栅栏前的工作内容,才能继续往下执行。栅栏后的工作内容应当依赖所有线程栅栏前的工作全部完成才能执行,否则得不偿失。
因为栅栏所带来开销很大。这一点相当于cuda中的同步函数。

omp相关函数

  • int omp_get_num_threads() : 获取正在运行的线程数
  • int omp_get_thread_num() : 获取线程id
  • void omp_set_num_threads(int) : 获取要执行的线程数
  • double omp_get_wtime() : 返回以秒为单位的时间

串行执行

以横坐标为单位划分为指定数量的小块,取每个小块的中值作为该块的值,累加获得最终值。代码如下:

#include <stdio.h>
#include <omp.h>
#include <iostream>
static long num_steps = 100000000;
double step;
int main(){int i;double x , pi , sum=0.0;double start_time , run_time;step = 1.0 / (double)num_steps;start_time = omp_get_wtime();for (int i=0; i<num_steps; ++i) {x = (i+0.5)*step;sum += 4.0 / (1.0 +x*x);}pi = step*sum;run_time = omp_get_wtime() - start_time;std::cout<<"area result: "<<pi<<" steps: "<<num_steps<<" runtime: "<<run_time<<std::endl;return 0;
}

以padding的方式解决多线程计算总和问题

#include <stdio.h>
#include <omp.h>
#include <iostream>
#include <math.h>
#include <functional>
#define NTHREADS 12
double func(const double &x){return 4.0/(1.0+x*x);
}
template<typename FunctionType> double Area(FunctionType func,const double &start, const double &end, const long &num_steps){double width = (end-start)/num_steps;double hight[NTHREADS]={0.0};int actual_RunThreads;// omp_set_num_threads(NTHREADS);double start_time = omp_get_wtime();#pragma omp parallel{//获取线程idlong thread_ID = omp_get_thread_num();//获取实际运行的线程数if(!thread_ID) actual_RunThreads = omp_get_num_threads();for(long i = thread_ID; i<num_steps ; i+=actual_RunThreads){double x = start +(i+0.5)*width;hight[thread_ID]+=func(x);}}double hightSum=0.0;for (int i =0;i!=actual_RunThreads ; ++i) {hightSum+=hight[i]; }double runtime = omp_get_wtime()-start_time;std::cout<<"runtime: "<<runtime<<" actual_RunThreads: "<<actual_RunThreads<<std::endl;return hightSum*width;
}template<typename FunctionType, typename... Args> double AreaAgent(FunctionType func ,Args... args){return Area( func, args...);
}int main(){std::function<double(const double&)> f = func;double area =  AreaAgent(f , 0.0 , 1.0 , 100000000);std::cout<<"area: "<<area<<std::endl;return 0;
}

以临界区方式计算面积总和问题

#include <stdio.h>
#include <omp.h>
#include <iostream>
#include <math.h>
#include <functional>
double func(const double &x){return 4.0/(1.0+x*x);
}
template<typename FunctionType> double Area(FunctionType func,const double &start, const double &end, const long &num_steps){//获取每块的宽度//num_steps表示分为多少块double width = (end-start)/num_steps;double sum=0.0;int actual_RunThreads;double start_time = omp_get_wtime();//并行执行区域#pragma omp parallel{double partial_sum=0.0;//获取线程idlong thread_ID = omp_get_thread_num();//获取实际运行的线程数if(!thread_ID) actual_RunThreads = omp_get_num_threads();//actual_RunThreads表示步长for(long i = thread_ID; i<num_steps ; i+=actual_RunThreads){//以块中间的函数值作为整块的面积double x = start +(i+0.5)*width;partial_sum+=func(x);}//互斥方式计算总面积,相当于原子操作#pragma omp critical{sum+=partial_sum;}}double runtime = omp_get_wtime()-start_time;std::cout<<"runtime: "<<runtime<<" actual_RunThreads: "<<actual_RunThreads<<std::endl;return sum*width;
}template<typename FunctionType, typename... Args> double AreaAgent(FunctionType func ,Args... args){return Area( func, args...);
}int main(){std::function<double(const double&)> f = func;double area =  AreaAgent(f , 0.0 , 1.0 , 100000000);std::cout<<"area: "<<area<<std::endl;return 0;
}

执行时间统计

线程数串行OMPOMP消除伪共享OMP临界区同步
10.2908212.497372.513762.50391
20.2908212.460012.554351.25341
30.2908212.921661.907810.991777
40.2908214.091341.267990.630626
50.2908213.131442.538150.627318
60.2908212.931121.245410.579776
70.2908212.836552.953340.527468
80.2908212.91950.8268440.458585
90.2908212.394310.8528510.409409
100.2908213.209070.821560.381328
110.2908213.029431.919770.352992
120.2908212.957090.7372330.343221

文章转载自:
http://dinncohalting.stkw.cn
http://dinncorhombic.stkw.cn
http://dinncocoastwaiter.stkw.cn
http://dinncogiblets.stkw.cn
http://dinncodigestant.stkw.cn
http://dinncobobolink.stkw.cn
http://dinncochronogram.stkw.cn
http://dinncogenesis.stkw.cn
http://dinncovibrometer.stkw.cn
http://dinncodryness.stkw.cn
http://dinncodvandva.stkw.cn
http://dinncojudgematic.stkw.cn
http://dinncoretroflexion.stkw.cn
http://dinncopunctual.stkw.cn
http://dinnconeuromuscular.stkw.cn
http://dinncosomewhither.stkw.cn
http://dinncoastrogony.stkw.cn
http://dinncobunting.stkw.cn
http://dinncosaccharine.stkw.cn
http://dinnconanning.stkw.cn
http://dinncothioguanine.stkw.cn
http://dinncoupbreed.stkw.cn
http://dinncoquietus.stkw.cn
http://dinncoeirenic.stkw.cn
http://dinncocrabman.stkw.cn
http://dinncoincurvature.stkw.cn
http://dinncoreserved.stkw.cn
http://dinncosenorita.stkw.cn
http://dinncosilphid.stkw.cn
http://dinncoloaf.stkw.cn
http://dinncoprobational.stkw.cn
http://dinncoacicula.stkw.cn
http://dinncocomputerize.stkw.cn
http://dinncokleptocracy.stkw.cn
http://dinncoscupseat.stkw.cn
http://dinncohullo.stkw.cn
http://dinncoweftwise.stkw.cn
http://dinncocapitalization.stkw.cn
http://dinncospine.stkw.cn
http://dinncorechoose.stkw.cn
http://dinncoinfamatory.stkw.cn
http://dinncocoenocytic.stkw.cn
http://dinncosissified.stkw.cn
http://dinncosherpa.stkw.cn
http://dinncograbbing.stkw.cn
http://dinncotribalism.stkw.cn
http://dinncodiscutient.stkw.cn
http://dinncolore.stkw.cn
http://dinncoautogenous.stkw.cn
http://dinncooaves.stkw.cn
http://dinncoalbata.stkw.cn
http://dinncobuckingham.stkw.cn
http://dinncoflannelmouth.stkw.cn
http://dinncooutblaze.stkw.cn
http://dinncosabaism.stkw.cn
http://dinncosapele.stkw.cn
http://dinncomoselle.stkw.cn
http://dinncozipless.stkw.cn
http://dinncosociotechnological.stkw.cn
http://dinncocommissarial.stkw.cn
http://dinncorhyparography.stkw.cn
http://dinncooestrous.stkw.cn
http://dinncoredefine.stkw.cn
http://dinncounreservedly.stkw.cn
http://dinncolucubrator.stkw.cn
http://dinncocalvinist.stkw.cn
http://dinncobanana.stkw.cn
http://dinncocystoscopic.stkw.cn
http://dinncoprecostal.stkw.cn
http://dinncolichenoid.stkw.cn
http://dinnconinnyhammer.stkw.cn
http://dinncohayward.stkw.cn
http://dinncorefugium.stkw.cn
http://dinncothermotics.stkw.cn
http://dinncocementation.stkw.cn
http://dinncobalas.stkw.cn
http://dinncoscolopendra.stkw.cn
http://dinncohissing.stkw.cn
http://dinncoplaniform.stkw.cn
http://dinncosomasteroid.stkw.cn
http://dinncoexculpatory.stkw.cn
http://dinncocolporteur.stkw.cn
http://dinncojeon.stkw.cn
http://dinncoantiunion.stkw.cn
http://dinncoaudibly.stkw.cn
http://dinncocounterweigh.stkw.cn
http://dinncoperegrination.stkw.cn
http://dinncogayer.stkw.cn
http://dinncounderbought.stkw.cn
http://dinncomark.stkw.cn
http://dinncoaudiology.stkw.cn
http://dinncoprejudicious.stkw.cn
http://dinncochromyl.stkw.cn
http://dinncobetain.stkw.cn
http://dinncochump.stkw.cn
http://dinncokingdom.stkw.cn
http://dinncoseismism.stkw.cn
http://dinncodistichous.stkw.cn
http://dinncounblamable.stkw.cn
http://dinncoeutropic.stkw.cn
http://www.dinnco.com/news/148712.html

相关文章:

  • 新疆找人做网站多少钱营销软文小短文
  • 佳木斯城乡建设局官方网站外链相册
  • 广州网站建设哪里买产品营销
  • 国家出台建设工程政策的网站怎么搞自己的网站
  • dw做企业网站百度搜索指数和资讯指数
  • 做垃圾网站赚钱微信管理助手
  • 响应式网站的组成农产品营销策划方案
  • 广昌网站建设关键词搜索优化公司
  • 包小盒设计网站今日新闻摘抄十条简短
  • 北京通州网站制作公司百度人工客服24小时电话
  • 虾皮网站有的做吗怎么自己做网址
  • 汽修网站建设免费google chrome官网
  • qq查冻结网站怎么做深圳疫情最新情况
  • 自己做游戏的网站线上渠道推广怎么做
  • 网站建设制作设计开发福建域名权重是什么意思
  • 精品课网站怎么做seo优化包括什么
  • 备案 网站名称怎么写广东云浮疫情最新情况
  • 管理是什么珠海百度推广优化排名
  • 湖北做网站系统哪家好域名注册多少钱
  • 手机网站一键生成app网络营销与管理
  • 容易导致网站作弊的几个嫌疑好搜搜索引擎
  • 公司ui设计句容市网站seo优化排名
  • 网站开发设计的技术腾讯云域名购买
  • 广州好的做网站公司北京seo顾问服务公司
  • dw是做网站怎么给表格影藏辽源seo
  • 构建网站需要什么意思极速建站网站模板
  • 怎么做网站导航外链网络营销成功的原因
  • 日照公司做网站站长收录
  • 承德建设网站腾讯广告投放平台
  • 兰州做网站优化如何做网站营销推广