1. // Sum_section.cpp : 定义控制台应用程序的入口点。
  2. //section功能:;
  3. //1.指定其内部的代码划分给线程中某个线程,不同的section由不同的线程执行;
  4. //2.将一个任务划分成独立的几个section,且section之间是并行执行的;
  5.  
  6. #include "stdafx.h"
  7.  
  8. //#include <stdio.h>
  9. #include <time.h>
  10. #include "omp.h"
  11. #include <windows.h>
  12.  
  13. #define NUM_THREADS 2
  14. #define num 1000000000
  15. int _tmain(int argc, _TCHAR* argv[])
  16. {
  17. omp_set_num_threads(NUM_THREADS);
  18. long long sum=0;
  19. clock_t t1=clock();
  20. #pragma omp parallel sections reduction(+:sum)//reduction解决数据竞争,将两个线程所得的sum加起来
  21. {
  22. #pragma omp section
  23. {
  24. for (long i=omp_get_thread_num();i<=num;i=i+NUM_THREADS)
  25. {
  26. sum=sum+i;
  27. }
  28. }
  29. #pragma omp section
  30. {
  31. for (long i=omp_get_thread_num();i<=num;i=i+NUM_THREADS)
  32. {
  33. sum=sum+i;
  34. }
  35. }
  36.  
  37. }
  38. clock_t t2=clock();
  39. clock_t parallel=t2-t1;
  40. printf("sum=%lld\n",sum);
  41. printf("parallel time=%d\n\n",parallel);
  42.  
  43. //串行
  44. sum=0;
  45.  
  46. t1=clock();
  47. for(long long i=1;i<=num;i=i+1)
  48. {
  49. sum=sum+i;
  50. }
  51. t2=clock();
  52. clock_t serial=t2-t1;
  53. printf("sum=%lld\n",sum);
  54. printf("serial time=%d\n",serial);
  55.  
  56. system("pause");
  57. return 0;
  58. }
  59.  
  60. //运行结果如下:相对加速比为:2981/1643=1.81

OpenMP之求和(用section分块完成)的更多相关文章

  1. luogu2261余数求和题解--整除分块

    题目链接 https://www.luogu.org/problemnew/show/P2261 分析 显然\(k\) \(mod\) \(i=k-\lfloor {k/i}\rfloor\) \(\ ...

  2. P2261 [CQOI2007]余数求和 【整除分块】

    一.题面 P2261 [CQOI2007]余数求和 二.分析 参考文章:click here 对于整除分块,最重要的是弄清楚怎样求的分得的每个块的范围. 假设$ n = 10 ,k = 5 $ $$  ...

  3. 2018.07.17 CQOI2017 余数求和(整除分块)

    洛谷传送门 bzoj传送门 这道题要用到学习莫比乌斯反演时掌握的整除分块算法,也就是对于一个数n" role="presentation" style="pos ...

  4. 洛谷 P2261 [CQOI2007]余数求和 ||整除(数论)分块

    参考:题解 令f(i)=k%i,[p]表示不大于p的最大整数f(i)=k%i=k-[k/i]*i令q=[k/i]f(i)=k-qi如果k/(i+1)=k/i=qf(i+1)=k-q(i+1)=k-qi ...

  5. LiberOJ #124. 除数函数求和 【整除分块】

    一.题目 #124. 除数函数求和 二.分析 比较好的一题,首先我们要对题目和样例进行分析,明白题目的意思. 由于对于每一个$d$,它所能整除的数其实都是定的,且数量是$ \lfloor \frac{ ...

  6. LOJ 6281 数列分块入门 5

    简化版题意 给出一个长为n的数列,以及n个操作,操作涉及区间开方(每个数都向下取整),区间求和,保证所有数都为有符号32位正整数. N<=50000 Solution 首先我们先思考: 一个有符 ...

  7. LOJ 6277-6280 数列分块入门 1-4

    数列分块是莫队分块的前置技能,练习一下 1.loj6277 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 直接分块+tag即可 #include <bits/stdc++.h ...

  8. Wannafly Camp 2020 Day 1C 染色图 - 组合数学,整除分块

    定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任何一条边 (u,v),都有 f(u)≠f(v). 定义函数 g(n,k) 的值为所有包 ...

  9. loop指令

    loop系列的指令有:loop,loope/loopz,loopne/loopnz,它们都是借助于ECX寄存器作为计数来实现循环,每轮循环先ecx自动减1,再来判断ecx值,ecx的自减不会影响OF和 ...

随机推荐

  1. linux 系统服务

    此文涉及的命令:service.chkconfig. 概念 daemon 的主要分类 stand_alone:此 daemon 可以自行单独启动服务 属性:daemon 启动并加载到内存后就一直占用内 ...

  2. 一些简单的PGSQL 操作

    1.jsonb字段的查询 enterprisearr 字段类型为jsonb,存储格式为["物流服务商","销售服务商","供应商"]. SE ...

  3. 为什么重写equals时必须重写hashCode方法?

    原文地址:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html 首先我们先来看下String类的源码:可以发现Stri ...

  4. ASP.NET MVC4中@model使用多个类型实例的方法

    转http://blog.csdn.net/hulihui/article/details/48199897

  5. js使用Switch达到切换不同颜色的效果

    实现的效果,点击哪个,哪个变颜色,效果如下. 代码如下: <!DOCTYPE html> <html> <head> <meta charset=" ...

  6. 部署war包后,新增tomcat服务器,启动tomcat服务器报错解决方法

    导入Maven工程后,新增tomcat服务器,启动服务器后,报如下错误: 使用http访问页面的时候报如下错误: 经过百度后,有一种方法可以解决: 在eclipse tomcat无法启动,无法访问to ...

  7. coredump

    COREDUMP调试的使用 一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程 ...

  8. java第6次作业

    import java.util.ArrayList; import java.util.Collections; import java.util.Random; import java.util. ...

  9. Getting Started With Hazelcast 读书笔记(第二章、第三章)

    第二章 起步 本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用. 1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行. 2.增加了Mult ...

  10. sprintf()函数,把数字转换成字符串

    char str_2[10];     int a=1234321;     sprintf(str_2,"%d",a);