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

● 代码

 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <omp.h>
#include <time.h> const int thread = , dataSize = ; double f(int i)// 工作函数每次运行的时间与输入值 i 有关
{
const int first = i * (i + ) / , last = first + i;
int j;
double sum;
for (j = first, sum = 0.0; j <= last; j++)
sum += sin(j);
return sum;
}
int main(int argc, char* argv[])
{
int i, threadReal;
clock_t time;
if (argc > && *argv[] > ''&& *argv[] < '')
threadReal = atoi(argv[]);
else
threadReal = thread; time = clock();
#pragma omp parallel for num_threads(thread) schedule(static, 1)// 静态调度,每个线程循环分配 1 个迭代块,默认调度相当于 schedule(static, dataSize / thread)
for (i = ; i < dataSize; i++) // 新的 OpenMP 还支持 auto (系统自选)和 runtime (从环境变量 OMP_SCHEDULE 中选定,值为 static,dynamic,guided 之一)
f(i);
time = clock() - time;
printf("finished, time = %d ms\n", time);
getchar();
return ;
}

● 输出结果

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

▶ OpenMP 的计时工具

 #include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <omp.h> int main(int argc, char* argv[])
{
double start = omp_get_wtime(); // 以毫秒为单位的计时器
Sleep();
double end = omp_get_wtime();
double wtick = omp_get_wtick(); // 时钟分辨率,单位是秒
printf_s("start = %.16g\nend = %.16g\ndiff = %.16g\n", start, end, end - start);
printf_s("wtick = %.16g\n1/wtick = %.16g\n", wtick, 1.0 / wtick); getchar();
return ;
}

● 输出结果:

start = 31852.98727121565
end = 31853.99453063095
diff = 1.007259415295266
wtick = 2.438090779872098e-07
/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. 树状数组 Binary Indexed Tree/Fenwick Tree

    2018-03-25 17:29:29 树状数组是一个比较小众的数据结构,主要应用领域是快速的对mutable array进行区间求和. 对于一般的一维情况下的区间和问题,一般有以下两种解法: 1)D ...

  2. AppCrawler自动化遍历使用详解(版本2.1.0 )

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击.   优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...

  3. LINUX QQ

    查询龙井QQ http://www.longene.org/forum/viewtopic.php?f=6&t=4700

  4. EPANET头文件解读系列4——EPANET2.H

    该头文件的功能与系列3中的TOOLKIT.H类似,而且内容也几乎一致,所以也就不再详细介绍.

  5. HTML 代码常用技巧

    IE Javascript快捷键操作 . oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table bo ...

  6. 表单验证jq.validate.js

    源代码--demo Validate:function(){ var me=this; var $form = $('#form'); //添加自定义方法: 同时验证手机和座机电话    jQuery ...

  7. 基于spec评论——王者荣耀交流协会的PSP DAILY作品

    一.运行环境 win10系统. Visual Studio 2017 二.运行程序及截图 1.进入界面如下图. 2.手动输入 类别 任务 点击开始,自动记录时间.如下图. 3.点击结束按钮,会有提示窗 ...

  8. 這是我既C語言作業寫博客後寫的第一篇博客

    這篇博客應該算是寫給我自己的博客吧,所以這裏我想用繁體字寫,因為我漸漸地發現我已經很少使用到繁體字了,日常QQ聊天都使用簡體字,繁體字都懶得切換了,但是為了不讓別人麻煩,在外界交流的時候我會使用簡體字 ...

  9. 戴尔 Latiteude E7240 i7-4600U

    一.鲁大师各项数据 二.内存条 三.电池损耗 四.跑分

  10. 编写 Target 检测 MSBuild / dotnet build 此次编译是否是差量编译

    MSBuild 或 Roslyn 编译项目时均支持差量编译,毕竟为了性能.我在 每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译 一文中介绍 ...