初衷
带并行课的上机,自己并不会OpenOMP,因此打算抽时间学习并记录一下。 我准备利用一个博客的内容,将OpenOMP的基本知识点过一遍,要求有基本介绍,个人的分析,示例代码以及运行结果截图; 时间关系,自己并没有太多的精力挖掘高级知识点的用途,因此就不作阐述了。编译环境为visual studio2013.
简介
当前cpu基本都是走向多核架构,通过多线程编程可以充分发挥多核cpu的优势,从而缩短程序的运行时间。 可是,大多数人都是谈“多线程”色变,这是因为多线程编程总会涌现出各种稀奇古怪的bug,而其调试又是极其痛苦的,这些都无形中提高了程序员进入多线程的门槛,高效却不易用。 因此,有组织开始考虑能否只通过使用几条简单的编译器指令(而不需要写复杂的线程代码)获得多线程带来的好处,openmp应运而生。
OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多处理器程序设计的一套指导性的编译处理方案(Compiler Directive),当前支持Fortran和C++。 在支持OpenMP的编译上,你只需要在你的代码中加入几条额外的编译指令,就可以立刻获得多线程代码的加速效果。 程序员从线程创建,数据共享等等的复杂的工作中解放出来,从而专注于如何组织并行。
如何在vs中使用openmp呢? 特别简单,只需要在工程,右键-》属性-》c/c++-》语言-》openmp支持,开启openmp即可,具体如下图:
下面先通过一个特别简单例子,来说明利用OpenMp进行多线程编程。
#include <iostream>
#include <vector>
#include <omp.h>
#include <windows.h>
#include <stdlib.h>
#include <thread>
using