原文:https://www.bearoom.xyz/2019/02/17/openmp1/

并行技术有很多种,OpenMP算是比较简单可用的一种,OpenMP全称是 Open Multi-Processing ,是一个支持共享存储并行设计的库.

OpenMP 支持的编程语言有C、C++和Fortran,支持OpenMP的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。在VS中打开OpenMP,需要打开属性->C/C+±>语言->OpenMP支持的设置即可;其他平台编译的时候打开OpenMP的标识如下:

一个VS中的简单例子:

#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h> void test()
{
int a = 0;
clock_t t1 = clock();
for (int i = 0; i < 100000000; i++)
{
a = i + 1;
}
a = 0;
for (int i = 0; i < 100000000; i++)
{
a = i + 1;
}
clock_t t2 = clock();
printf("Time = %d\n", t2 - t1);
} int main(int argc, char* argv[])
{
clock_t t1 = clock();
for (int j = 0; j < 8; j++)
{
test();
}
clock_t t2 = clock();
printf("Normal operation total time = %d\n", t2 - t1); t1 = clock();
#pragma omp parallel for
for (int j = 0; j < 8; j++)
{
test();
}
t2 = clock();
printf("OpenMP operation total time = %d\n", t2 - t1); system("pause");
return 0;
}

需要关注的代码是:

#pragma omp parallel for
for (int j = 0; j < 8; j++)
{
test();
}

这一段代码是启用OpenMP进行并行运算,关键的指令也只有一句:

#pragma omp parallel for

这一句指令是用于指定其后面的一个for循环会被用于并行执行,并且,这句指令只对紧随其后的for循环起作用,不会对多个for循环起作用。上面这个例子中,虽然for循环部分是并行执行的,但是这个程序还是串行的,也就是并行部分没有执行完成,for循环后面的clock_t t2 = clock();以及之后的代码是不会被执行,这种并行方式是标准的并行模式fork/join式并行模式,这种模式创建的线程和主线程不是并行的。

春日宴,绿酒一杯歌一遍。再拜陈三愿:一愿郎君千岁,二愿妾身常健,三愿如同梁上燕,岁岁长相见。

– 冯延巳 《长命女》

最新文章

  1. java基础2.-------interface接口类,实现接口
  2. 免费股票数据API接口
  3. 小结:ac自动机
  4. csuoj 1115: 最短的名字
  5. oom日志查看
  6. Ubuntu下配置 keepalived+nginx+tomcat 负载均衡
  7. Linux 关于解压
  8. centerOS安装rkhunter
  9. js格式化时间为JSON格式 ajax提交 后台处理
  10. 表达式求值(二叉树方法/C++语言描述)(三)
  11. 使用定时器限制点击按钮发送短信(附源码)--JavaScript小案例
  12. 数据攻略●R语言自述
  13. ubuntu下core file文件生成及调试
  14. Selenium 基础知识
  15. [skill][git] git 常用操作记录
  16. PCL(Point Cloud Library)的第三方库简单介绍(boost,eigen,flann,vtk,qhull)
  17. .net MVC4 来一个简单的分页代码
  18. 【C#/WPF】如何查看System.Windows.Interactivity.dll中EventTrigger的EventNames属性有哪些
  19. 配置github的SSH key及GitHub项目上传方式一——使用终端命令行
  20. Util-linux-ng-2.17

热门文章

  1. UVA - 1572 Self-Assembly(图论模型+拓扑排序)
  2. doc转docx
  3. python面试题整理(二)
  4. 1.求子集,2.动态创建action
  5. 记-OSPF学习
  6. HDU - 6025 Coprime Sequence(前缀gcd+后缀gcd)
  7. javascript如何获取复选框中的值?
  8. POJ 2481:Cows 树状数组
  9. windows driver 定时器的使用
  10. ORACLE 将一个库的部分值带条件插入到另外一个库