OpenMP并行程序设计(一)

开发 前端
OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。
OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。
 
在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。
 
先看一个简单的使用了OpenMP程序
  1. int main(int argc, char* argv[]) 
  2. #pragma omp parallel for 
  3.      for (int i = 0; i < 10; i++ ) 
  4.      { 
  5.          printf("i = %d/n", i); 
  6.      } 
  7.      return 0; 
  8. 这个程序执行后打印出以下结果: 
  9. i = 0 
  10. i = 5 
  11. i = 1 
  12. i = 6 
  13. i = 2 
  14. i = 7 
  15. i = 3 
  16. i = 8 
  17. i = 4 
  18. i = 9 
可见for 循环语句中的内容被并行执行了。(每次运行的打印结果可能会有区别)
这里要说明一下,#pragma omp parallel for 这条语句是用来指定后面的for循环语句变成并行执行的,当然for循环里的内容必须满足可以并行执行,即每次循环互不相干,后一次循环不依赖于前面的循环。
 
有关#pragma omp parallel for 这条语句的具体含义及相关OpenMP指令和函数的介绍暂时先放一放,只要知道这条语句会将后面的for循环里的内容变成并行执行就行了。
 
 将for循环里的语句变成并行执行后效率会不会提高呢,我想这是我们最关心的内容了。下面就写一个简单的测试程序来测试一下:
  1. void test() 
  2.      int a = 0
  3.      clock_t t1 = clock(); 
  4.      for (int i = 0; i < 100000000; i++) 
  5.      { 
  6.          a = i+1; 
  7.      } 
  8.      clock_t t2 = clock(); 
  9.      printf("Time = %d/n", t2-t1); 
  10.   
  11. int main(int argc, char* argv[]) 
  12.      clock_t t1 = clock(); 
  13. #pragma omp parallel for 
  14.      for ( int j = 0; j < 2; j++ ){ 
  15.          test(); 
  16.      } 
  17.      clock_t t2 = clock(); 
  18.      printf("Total time = %d/n", t2-t1); 
  19.   
  20.      test(); 
  21.      return 0; 
  22.   
  23. 在test()函数中,执行了1亿次循环,主要是用来执行一个长时间的操作。 
  24. 在main()函数里,先在一个循环里调用test()函数,只循环2次,我们还是看一下在双核CPU上的运行结果吧: 
  25. Time = 297 
  26. Time = 297 
  27. Total time = 297 
  28. Time = 297 

可以看到在for循环里的两次test()函数调用都花费了297ms, 但是打印出的总时间却只花费了297ms,后面那个单独执行的test()函数花费的时间也是297ms,可见使用并行计算后效率提高了整整一倍。

下一篇文章中将介绍OpenMP的具体指令和用法。

原文链接:http://blog.csdn.net/drzhouweiming/article/details/1131537

责任编辑:陈四芳 来源: blog.csdn.net
相关推荐

2013-12-16 16:58:47

OpenMP并行

2013-12-18 10:34:42

OpenMP线程

2011-11-17 10:34:44

并行程序

2012-03-12 12:34:02

JavaF#

2011-07-05 15:22:04

程序设计

2013-12-12 16:30:20

Lua脚本语言

2010-12-23 11:18:16

程序员

2010-06-03 19:28:02

Hadoop

2009-12-04 10:53:06

VS WEB

2010-12-28 10:12:39

PHP

2017-08-30 17:59:20

Linux程序设计优化措施

2010-09-17 09:08:49

Java多线程

2010-09-25 13:47:14

Java跨平台

2011-08-05 15:46:32

Objective-C 程序设计

2010-01-28 09:54:27

C++程序设计

2009-02-10 09:53:41

多线程程序设计Java

2009-12-25 16:36:45

WPF程序设计

2017-09-05 08:16:29

代码判断函数

2010-01-27 14:24:15

C++程序设计

2011-07-05 16:05:43

面向对象编程
点赞
收藏

51CTO技术栈公众号