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

水友做的yyf网站优化排名工具

水友做的yyf网站,优化排名工具,网站软文推广好处,做网站的人找不到了(一)、openMP简述 Open Multiprocessing (OpenMP) 框架是一种功能极为强大的规范,可以帮助您利用 C、C 和 Fortran 应用程序中的多个核心带来的好处,是基于共享内存模式的一种并行编程模型, 使用十分方便, 只需要串行程序中加入Op…

(一)、openMP简述

  •   Open Multiprocessing (OpenMP) 框架是一种功能极为强大的规范,可以帮助您利用 C、C++ 和 Fortran 应用程序中的多个核心带来的好处,是基于共享内存模式的一种并行编程模型, 使用十分方便, 只需要串行程序中加入OpenMP预处理指令, 就可以实现串行程序的并行化。

(二)、openMP简单使用

   1、简单的HelloWord程序

  • #include <iostream>
    int main()
    {#pragma omp parallel{std::cout << "Hello World!\n";}
    }
    View Code
  • #pragma omp parallel 仅在您指定了 -fopenmp 编译器选项后才会发挥作用。在编译期间,GCC 会根据硬件和操作系统配置在运行时生成代码,创建尽可能多的线程。
  • 只运行 g++ hello.cpp,只会打印出一行Hello world!
  • 运行g++ hello.cpp -fopenmp,打印出12个Hello World!(12个是因为我用的是linux服务器默认分配的)
  • 运行结果
  • user@NLP ~/vsworksapce $ g++ hello.cpp 
    user@NLP ~/vsworksapce $ ./a.out 
    Hello World!
    user@NLP ~/vsworksapce $ g++ hello.cpp -fopenmp 
    user@NLP ~/vsworksapce $ ./a.out 
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    View Code

    2、如何自定义线程数量

  • num_threads的设置
  • omp_set_num_threads()库函数的设置
  • #include <omp.h>
    #include <iostream>
    int main()
    {int number_threads = 1;omp_set_num_threads(number_threads) //方法二#pragma omp parallel num_threads(number_threads) //方式一{std::cout << "Hello World!\n";}
    }
    View Code
  • OMP_NUM_THREADS环境变量的设置 (Linux下:export OMP_NUM_THREADS=4)
  • 编译器默认实现(一般而言,不指定具体线程数量的情况下,默认实现的总线程数等于处理器的核心数)    

  3、parallel sections 编译指示

  • pragma omp sectionspragma omp parallel之间的代码将由所有线程并行运行。pragma omp sections之后的代码块通过pragma omp section进一步被分为各个子区段。每个pragma omp section块将由一个单独的线程执行。但是,区段块中的各个指令始终按顺序运行。
  • #include <iostream>
    int main()
    {#pragma omp parallel{std::cout << "parallel \n";#pragma omp sections{#pragma omp section{std::cout << "section1 \n";} #pragma omp section{std::cout << "sectio2 \n";std::cout << "after sectio2 \n";}#pragma omp section{std::cout << "sectio3 \n";std::cout << "after sectio3 \n";}}}
    }//运行结果
    user@NLP ~/vsworksapce $ g++ openMP12.cpp -fopenmp
    user@NLP ~/vsworksapce $ ./a.out 
    parallel 
    section1 
    sectio2 
    after sectio2 
    sectio3 
    after sectio3 
    parallel 
    parallel 
    parallel 
    parallel 
    parallel 
    parallel 
    parallel 
    parallel 
    parallel 
    parallel 
    parallel
    View Code

  4还有一些omp_get_wtime、for、while循环中的并行处理、OpenMP critical section、OpenMP实现锁和互斥、以及firstprivatelastprivate指令等一些  openMP的使用可以参考(https://www.ibm.com/developerworks/cn/aix/library/au-aix-openmp-framework/)

(三)、openMP简单测试

    1、简单的测试--不限制线程数量

  • #include <omp.h>
    #include <time.h>
    #include <iostream>
    #include <ctime>
    int main()
    {time_t start,end1;time( &start );int a = 0;#pragma omp parallel forfor (int i = 0; i < 100; ++i){for (int j = 0; j < 1000000000; j++);//std::cout<< a++ << std::endl;
        }time( &end1 );double omp_end = omp_get_wtime( );std::cout<<std::endl;std::cout<<"Time_used " <<((end1 - start))<<"s"<<std::endl;std::cout<<"omp_time: "<<((omp_end - omp_start))<<std::endl;return 0;
    }
    View Code
  • 从下面的图表可以看出使用openMP的运行时间明显少于不使用openMP。

     2、简单的测试--限制线程数量

  • #include <omp.h>
    #include <time.h>
    #include <iostream>
    #include <ctime>
    int main()
    {time_t start,end1;time( &start );int a = 0;double omp_start = omp_get_wtime( );#pragma omp parallel for num_threads(8)for (int i = 0; i < 100; ++i){for (int j = 0; j < 1000000000; j++);}time( &end1 );double omp_end = omp_get_wtime( );std::cout<<std::endl;std::cout<<"Time_used " <<((end1 - start))<<"s"<<std::endl;std::cout<<"omp_time: "<<((omp_end - omp_start))<<std::endl;return 0;
    }
    View Code
  • 从下面的图表能够看出,线程数量对程序运行时间也是有一定的影响的,影响的大小和程序运算数据量有关。

  3、简单测试--提升数据量,限制线程数量

  • #include <omp.h>
    #include <time.h>
    #include <iostream>
    #include <ctime>
    int main()
    {time_t start,end1;time( &start );int a = 0;double omp_start = omp_get_wtime( );#pragma omp parallel for num_threads(12)for (int i = 0; i < 1000; ++i){for (int j = 0; j < 1000000000; j++);}time( &end1 );double omp_end = omp_get_wtime( );std::cout<<std::endl;std::cout<<"Time_used " <<((end1 - start))<<"s"<<std::endl;std::cout<<"omp_time: "<<((omp_end - omp_start))<<std::endl;return 0;
    }
    View Code
  • 线程数量对程序的运行时间是有影响的,如果继续提升数据运算量,openMP的实验效果会更加明显。

      4、简单测试--降低数据量,限制线程数量

  • #include <omp.h>
    #include <time.h>
    #include <iostream>
    #include <ctime>
    int main()
    {time_t start,end1;time( &start );int a = 0;double omp_start = omp_get_wtime( );#pragma omp parallel forfor (int i = 0; i < 1000; ++i){for (int j = 0; j < 10000; j++);}time( &end1 );double omp_end = omp_get_wtime( );std::cout<<std::endl;std::cout<<"Time_used " <<((end1 - start))<<"s"<<std::endl;std::cout<<"omp_time: "<<((omp_end - omp_start))<<std::endl;return 0;
    }
    View Code
  • 当数据量很小的时候,使用或者不使用openMP对于程序的运行时间影响不大。

(四)、openMP学习参考

  •  通过 GCC 学习 OpenMP 框架:https://www.ibm.com/developerworks/cn/aix/library/au-aix-openmp-framework/
  • Guide into OpenMP : http://bisqwit.iki.fi/story/howto/openmp/

 

转载于:https://www.cnblogs.com/bamtercelboo/p/7107009.html

http://www.lbrq.cn/news/2379061.html

相关文章:

  • 公司网站模版 dedecms宁波优化网站厂家
  • 找人开发一个网站多少钱广东seo排名
  • html5网站后台模板最佳磁力吧ciliba磁力链
  • wordpress下拉式友情链接福州seo招聘
  • wordpress头部导航栏如何提高seo关键词排名
  • 佛山网站建站网站的seo方案
  • 天空台108网站找手工活带回家做北京谷歌seo
  • 重庆江北区网站建设公司如何创建公司网站
  • wordpress编辑器文件seo外推
  • 苏州网站制作出名 乐云践新移动广告联盟
  • 云服务器可以放几个网站人民日报评网络暴力
  • 腾讯企点下载安装seo销售代表招聘
  • 网站开发语音网站免费推广方式
  • 魔改wordpress主题怎样下载优化大师
  • 电子商务网站模板深圳新闻今日最新
  • qq空间同步到wordpress电脑系统优化工具
  • 佛山销售型网站建设长沙百度关键词推广
  • 做网站旅游销售百度搜索风云榜电视剧
  • c 做网站实例soe搜索优化
  • 深圳网站开发怎么样今日热点新闻排行榜
  • 做网站怎么申请域名seo外包优化服务商
  • 贝智康积分网站开发网站推广优化排名
  • 阿里云上做网站靠谱吗软文
  • 怎么做网站搜索宁波seo外包平台
  • 网站推广的方式?谷歌引擎搜索入口
  • 小程序源码是什么意思seo关键词排名技巧
  • 免费永久网站注册seo广告
  • wordpress调用相关评论上海站群优化公司
  • 唐山高端品牌网站建设百度账号登录官网
  • 赣州网站建设如何阐述网络营销策略的内容
  • Diffusion-VLA 中的 Reasoning Token 注入机制解析:语言推理如何控制扩散模型?
  • 深入解析文本分类技术全景:从特征提取到深度学习架构
  • c语言笔记---结构体
  • AI安全威胁之MCP Server投毒攻击实践
  • 【37】MFC入门到精通——MFC中 CString 数字字符串 转 WORD ( CString, WORD/int 互转)
  • PyTorch边界感知上下文神经网络BA-Net在医学图像分割中的应用