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. Django教程:第一个Django应用程序(3)

    Django教程:第一个Django应用程序(3) 2013-10-08 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  2. 服务器CPU使用率高的原因分析与解决办法

    我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...

  3. jquery自定义插件来实现分页的效果

    本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DT ...

  4. ie11只能用管理员身份打开解决办法

    解决IE11只能用管理员身份运行的问题 不知道大家有没有遇到这种情况,在毫不知情的情况下 IE11 突然打不开了,必须要用管理员身份运行才可以打开,而且重置浏览器这个方法也不奏效. 今天本人也遇到了, ...

  5. PHP安全编程:HTTP请求欺骗(转)

    一个比欺骗表单更高级和复杂的攻击方式是HTTP请求欺骗.这给了攻击者完全的控制权与灵活性,它进一步证明了不能盲目信任用户提交的任何数据. 为了演示这是如何进行的,请看下面位于http://exampl ...

  6. JDK5-枚举

    1. 使用普通类模拟枚举 public class Weekday { private Weekday() {} // 私有化 public static final Weekday MONDAY = ...

  7. Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)

    Python 面向对象(初级篇)   51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...

  8. java常见错误的列表

    ava常见错误列表: 找不到符号(symbol) 类X是public的,应该被声明在名为X.java的文件中 缺失类.接口或枚举类型 缺失X 缺失标识符 非法的表达式开头 类型不兼容 非法的方法声明; ...

  9. 免写前缀JS包--prefixfree.min.js--插件

    /** * StyleFix 1.0.3 & PrefixFree 1.0.7 * @author Lea Verou * MIT license */ (function(){functio ...

  10. REST和SOAP Web Service的比较

    1.http://stevenjohn.iteye.com/blog/1442776 2.http://blog.csdn.net/cnyyx/article/details/7483766