▶ 使用子句 schedule() 来调度循环,对于循环中每次迭代时间不相等的情况较为有效

● 代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <omp.h>
  5. #include <time.h>
  6.  
  7. const int thread = , dataSize = ;
  8.  
  9. double f(int i)// 工作函数每次运行的时间与输入值 i 有关
  10. {
  11. const int first = i * (i + ) / , last = first + i;
  12. int j;
  13. double sum;
  14. for (j = first, sum = 0.0; j <= last; j++)
  15. sum += sin(j);
  16. return sum;
  17. }
  18. int main(int argc, char* argv[])
  19. {
  20. int i, threadReal;
  21. clock_t time;
  22. if (argc > && *argv[] > ''&& *argv[] < '')
  23. threadReal = atoi(argv[]);
  24. else
  25. threadReal = thread;
  26.  
  27. time = clock();
  28. #pragma omp parallel for num_threads(thread) schedule(static, 1)// 静态调度,每个线程循环分配 1 个迭代块,默认调度相当于 schedule(static, dataSize / thread)
  29. for (i = ; i < dataSize; i++) // 新的 OpenMP 还支持 auto (系统自选)和 runtime (从环境变量 OMP_SCHEDULE 中选定,值为 static,dynamic,guided 之一)
  30. f(i);
  31. time = clock() - time;
  32. printf("finished, time = %d ms\n", time);
  33. getchar();
  34. return ;
  35. }

● 输出结果

  1. finished, time = ms // 单线程
  2. finished, time = ms // 8 线程,默认调度
  3. finished, time = ms // 8 线程,schedule(static, 1)
  4. finished, time = ms // 8 线程,schedule(dynamic)
  5. finished, time = ms // 8 线程,schedule(guided)

▶ OpenMP 的计时工具

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <omp.h>
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8. double start = omp_get_wtime(); // 以毫秒为单位的计时器
  9. Sleep();
  10. double end = omp_get_wtime();
  11. double wtick = omp_get_wtick(); // 时钟分辨率,单位是秒
  12. printf_s("start = %.16g\nend = %.16g\ndiff = %.16g\n", start, end, end - start);
  13. printf_s("wtick = %.16g\n1/wtick = %.16g\n", wtick, 1.0 / wtick);
  14.  
  15. getchar();
  16. return ;
  17. }

● 输出结果:

  1. start = 31852.98727121565
  2. end = 31853.99453063095
  3. diff = 1.007259415295266
  4. wtick = 2.438090779872098e-07
  5. /wtick =

OpenMP 循环调度 + 计时的更多相关文章

  1. 应用OpenMP的一个简单的设计模式

    小喵的唠叨话:最近很久没写博客了,一是因为之前写的LSoftmax后馈一直没有成功,所以在等作者的源码.二是最近没什么想写的东西.前两天,在预处理图片的时候,发现处理200w张图片,跑了一晚上也才处理 ...

  2. OpenMP编程总结表

    本文对OpenMP 2.0的全部语法——Macro(宏定义).Environment Variables(环境变量).Data Types(数据类型).Compiler Directives(编译指导 ...

  3. openMP的一点使用经验【非原创】

    按照百科上说的,针对于openmp的编程,最简单的就是在开头加个#include<omp.h>,然后在后面的for上加一行#pragma omp parallel for即可,下面的是较为 ...

  4. 基于OpenMP的矩阵乘法实现及效率提升分析

    一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <i ...

  5. OpenMP 入门教程

    前两天(其实是几个月以前了)看到了代码中有 #pragma omp parallel for 一段,感觉好像是 OpenMP,以前看到并行化的东西都是直接躲开,既然躲不开了,不妨研究一下: OpenM ...

  6. OpenMP基础----以图像处理中的问题为例

        OpenMP2.5规范中,对于可以多线程执行的循环有如下5点约束: 1.循环语句中的循环变量必须是有符号整形,如果是无符号整形就无法使用,OpenMP3.0中取消了这个约束 2.循环语句中的比 ...

  7. openMP多线程编程

    OpenMP(Open Muti-Processing) OpenMP缺点: 1:作为高层抽象,OpenMp并不适合需要复杂的线程间同步和互斥的场合: 2:另一个缺点是不能在非共享内存系统(如计算机集 ...

  8. CentOS6中OpenMP的运行时间或运行性能分析

    OpenMp作为单机多核心共享内存并行编程的开发工具,具有编码简洁等,容易上手等特点. 关于OpenMP的入门,博主饮水思源(见参考资料)有了深入浅出,循序渐进的分析.做并行开发,做性能分析是永远逃避 ...

  9. OpenMP n 体问题

    ▶ <并行程序设计导论>第六章中讨论了 n 体问题,分别使用了 MPI,Pthreads,OpenMP 来进行实现,这里是 OpenMP 的代码,分为基本算法和简化算法(引力计算量为基本算 ...

随机推荐

  1. 通过电信ADSL无线猫WLAN上网的方法

    本教程只适合中国电信ADSL无线猫使用wifi(路由器不适合此帖)我的无线猫是电信赠送的华为[EchoLife]HG522c,亲测可用,解决网关无回应! 首先打开IE(注意,只能是IE,其他内核的浏览 ...

  2. python学习笔记(一)---python下载以及环境的安装

    转载网址:https://www.runoob.com/python/python-install.html 1.下载python安装包: 安装包下载网址(如下图所在的网址):https://www. ...

  3. Spring Boot 集成 FreeMarker 详解案例(十五)

    一.Springboot 那些事 SpringBoot 很方便的集成 FreeMarker ,DAO 数据库操作层依旧用的是 Mybatis,本文将会一步一步到来如何集成 FreeMarker 以及配 ...

  4. MissingNumber缺失的数字,FirstMissingPositive第一个缺失的正数

    MissingNumber问题描述:给定一个数组,数组数字范围是0-n,找到缺失的数字.例如nums={0,1,3},return2. 算法分析:第一种方法,对数组进行排序,然后找到和下标不一致的数字 ...

  5. Android 遍历全国地区位置(一)

    1.布局 choose_area.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  6. ES6学习一 JS语言增强篇

    一 背景 JavaScript经过二十来年年的发展,由最初简单的交互脚本语言,发展到今天的富客户端交互,后端服务器处理,跨平台(Native),以及小程序等等的应用.JS的角色越来越重要,处理场景越来 ...

  7. java基础---->Zip压缩的使用

    java中提供了对压缩格式的数据流的读写.它们封装到现成的IO 类中,以提供压缩功能.下面我们开始java中压缩文件的使用. 目录导航: 关于压缩的简要说明 GZIP压缩文件的使用 ZIP压缩文件的使 ...

  8. Alpha冲刺一 (9/10)

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10034872.html 作业博客:https://edu.cnblogs.com/campus ...

  9. LR 解压缩函数(wgzMemDecompressBuffer)失败 Code=-5

    用LR做压力测试的时候有时会报错 “解压缩函数(wgzMemDecompressBuffer)失败 返回Code=-5”. Google了一把,也没有解决掉. 因为有些脚本运行时没有问题,感觉可能和请 ...

  10. tensorflow中 tf.reduce_mean函数

    tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值. reduce_mean(input_ ...