OpenMP 并行化处理测试

#pragma omp parallel for 这条语句是用来指定后面的for循环语句变成并行执行的,将for循环里的语句变成并行执行后效率会不会提高呢?还是测试一 下吧,测试的时候,循环最好大一些,增加计算量,不然程序耗时太短,很难区分。
 #include <omp.h>
#include <stdio.h>
#include <sys/time.h>
void test() {
int a = ;
for(int i = ; i < ; i++) {
a = i + ;
}
}
int main() {
int nthrds = ;
omp_set_num_threads(nthrds);
timeval tStart,cTime;
long long tPassed = ;
gettimeofday(&tStart, );
for (int i = ; i < ; i++) {
test();
}
gettimeofday(&cTime, );
cTime.tv_sec -= tStart.tv_sec;
cTime.tv_usec -= tStart.tv_usec;
tPassed = 1000000LL * cTime.tv_sec + cTime.tv_usec;
tPassed /= ;
printf("Time = %lld/n", tPassed);
gettimeofday(&tStart, );
#pragma omp parallel for
for (int i = ; i < ; i++) {
test();
}
gettimeofday(&cTime, );
cTime.tv_sec -= tStart.tv_sec;
cTime.tv_usec -= tStart.tv_usec;
tPassed = 1000000LL * cTime.tv_sec + cTime.tv_usec;
tPassed /= ;
printf("Time = %lld/n", tPassed);
return ;
}

result:

 [root@c0108 zlt]# g++ omp.c -o omp -fopenmp
[root@c0108 zlt]# ./omp
Time =
Time =
[root@c0108 zlt]#

在四核的机器上,开了四个线程,加速比基本上是4,果然不错。

此外,BS一下clock()函数,我向来觉得它一无是处。。。

  1. #include <omp.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. void test() {
  5. int a = 0;
  6. for(int i = 0; i < 10000000; i++) {
  7. a = i + 1;
  8. }
  9. }
  10. int main() {
  11. int nthrds = 4;
  12. omp_set_num_threads(nthrds);
  13. long start = clock();
  14. for (int i = 0; i < 100; i++) {
  15. test();
  16. }
  17. long end = clock();
  18. printf("Time = %ld/n", end - start);
  19. start = clock();
  20. #pragma omp parallel for
  21. for (int i = 0; i < 100; i++) {
  22. test();
  23. }
  24. end = clock();
  25. printf("Time = %ld/n", end - start);
  26. return 1;
  27. }

结果:


 [root@c0108 zlt]# g++ omp.c -o omp -fopenmp
[root@c0108 zlt]# ./omp
Time =
Time =
[root@c0108 zlt]#

clock有三个问题:
1)如果超过一个小时,将要导致溢出.
2)函数clock没有考虑CPU被子进程使用的情况.
3)也不能区分用户空间和内核空间.

OpenMP 并行化处理测试的更多相关文章

  1. 基于GCC的openMP学习与测试(2)

    一.openMP简单测试 1.简单测试(1) #include<omp.h> #include<time.h> #include<iostream> using n ...

  2. 基于GCC的openMP学习与测试

    (一).openMP简述 Open Multiprocessing (OpenMP) 框架是一种功能极为强大的规范,可以帮助您利用 C.C++ 和 Fortran 应用程序中的多个核心带来的好处,是基 ...

  3. OpenMP并行化实例----Mandelbrot集合并行化计算

    在理想情况下,编译器使用自动并行化能够管理一切事务,使用OpenMP指令的一个优点是将并行性和算法分离,阅读代码时候无需考虑并行化是如何实现的.当然for循环是可以并行化处理的天然材料,满足一些约束的 ...

  4. 使用Openmp并行化

    运行命令:g++ -fopenmp xx.cpp -lgomp -lpthread -o xx.out 用例一: #include <omp.h> #include <stdio.h ...

  5. 【并行计算】基于OpenMP的并行编程

    我们目前的计算机都是基于冯偌伊曼结构的,在MIMD作为主要研究对象的系统中,分为两种类型:共享内存系统和分布式内存系统,之前我们介绍的基于MPI方式的并行计算编程是属于分布式内存系统的方式,现在我们研 ...

  6. 【openmp】for循环的break问题

    问题描述:在用openmp并行化处理for循环的时候,便无法在for循环中用break语句,那么我们如何实现这样的机制呢?在stackoverflow上看到一个不错的回答总结一下. volatile ...

  7. 并行求pi (C++实现)

    用OpenMP并行化求pi的代码,这里用的是公式法求pi.具体如下: //公式法 #include<omp.h> #include<stdio.h> #include<s ...

  8. 密码破解工具John the Ripper使用说明

    John the Ripper John 包描述 John the Ripper 既功能丰富又运行快速. 它在一个程序中结合了几种破解模式,并且可以根据您的特定需求进行全面地配置(你甚至可以使用支持C ...

  9. Java 8 (6) Stream 流 - 并行数据处理与性能

    在Java 7之前,并行处理集合非常麻烦.首先你要明确的把包含数据的数据结构分成若干子部分,然后你要把每个子部分分配一个独立的线程.然后,你需要在恰当的时候对他们进行同步来避免竞争,等待所有线程完成. ...

随机推荐

  1. cookie操作大全

    JavaScript中的另一个机制:cookie,则可以达到真正全局变量的要求. cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由J ...

  2. 深入理解java垃圾回收算法

    Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构 ...

  3. 基于RMAN的异机数据库克隆(rman duplicate)

    对于基于生产环境下的数据库的版本升级或者测试新的应用程序的性能及其影响,备份恢复等等,我们可以采取从生产环境以克隆的方式将其克隆到本地而不影响生产数据库的正常使用.实现这个功能我们可以借助rman d ...

  4. 自动开机和自动关机设定方法(包括linux和windows)

    (一) linux 机器 1.关机 : 编辑 /etc/crontab添加一条并且保证crontab服务的运行即可 f1 f2 f3 f4 f5 root sudo shutdown –h now 假 ...

  5. 通过控件获取cell

    #pragma mark - 通过控件获取cell -(UITableViewCell*)GetCellFromTableView:(UITableView*)tableView Sender:(id ...

  6. GS1已分配给国家(地区)编码组织的前缀码

    前缀码即商品条码(EAN-13或者EAN-8)的前三位,其代表的是一个国家和地区,由此前缀可查出所购买的商品是出产自哪个国家的. 下表列出了GS1已分配给国家(地区)编码组织的前缀码 前缀码 管理的国 ...

  7. 基于 Quartz 开发企业级任务调度应用--转

    Quartz 基本概念及原理 Quartz Scheduler 开源框架 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现.该项目于 2009 ...

  8. [转] doxygen使用总结

    doxygen [功能] 为许多种语言编写的程序生成文档的工具. [举例] *生成一个模板配置文件,模板文件中有详细的注释: $doxgen -g test 这样,会生成一个test文件,1500多行 ...

  9. C#“简单加密文本器”的实现

    本示例只能加密英文文本,使用的算法为异或算法.源代码:http://pan.baidu.com/share/link?shareid=3241348313&uk=1761850335(本示例属 ...

  10. Java基础知识强化之集合框架笔记10:Collection集合使用的步骤

    集合使用的步骤: (1)创建集合对象 (2)创建元素对象 (3)把元素添加到集合 (4)遍历集合:       • 通过集合对象获取迭代器对象 • 通过迭代器对象的hasnext()方法判断是否有元素 ...