并行计算工具OpenMP

我的电脑是4核的,用常规的方法写出来的程序只能用到一个核,在处理数据时感觉等待的时间有点长,于是就想学点并行计算的工具来充分利用资源,加快程序的执行时间。关于并行计算的工具,网上有很多介绍,就不详细描述了。但是我想说明一点的是,之所以选择openMP是因为足够简单,只需要几行简单的代码,就可以让你的代码在多个核中并行运行了。


学习资源

学习一个新东西,最重要的是找到合适的学习资源,下面是我找的一些比较好的资源,可以按如下顺序依次学习。

Getting Started with OpenMP 这个是intel出的一个简单的介绍和教程,总共有三节,看完了自己动手写写代码,就能掌握到常用的方法了。

OpenMP 跟上面一个相比,这个还会包括一些使用方法的说明,查看起来更方面一些吧。我比较喜欢这个教程。另外还有一本中文的教材也可以看看,叫MPI与OpenMP并行程序设计,直接看第十七章就可以了。

教学视频 Introduction to OpenMP 这个是Youtube上的一个教学视频系列,每个小视频五到十分钟,总共22个视频,看看视频,思考一下出的题目,也会很有收获的。这个视频系列有一个pdf文档可以参考看。文档下载请点这里

OpenMP in Visual C++ 这个是微软针对visual studio写的,叫你怎么在vs中写c++代码时使用opencv,因为我就是使用c++代码,所以这个正合我意。不过这个没有什么例子,倒像是字典式的介绍,你可以用来查询。


并行计算

这里写图片描述
首先,需要说明的是,OpenMP(Multi Processor)是针对单机多核的,多个核之间共享内存。因为是共享内存,所以在使用的时候需要注意一些问题,下面会再详细说。

这里写图片描述

来说说并行计算的概念,顾名思义,并行计算就是让程序在多个核之间并行运行,如上图所示,主线程中程序顺序执行,到了并行区,就分为多个线程,多线程结束后又恢复到一个线程顺序执行。之所以会在单线程和多线程之间来回变,是因为不是所有的代码都能够并行的,因为数据之间有一些强耦合关系,只能顺序执行。但是,我们的程序中经常会出现一些可以并行执行的代码,比如大多数for循环,只要能把这部分并行就能对程序提速很多了,下面的例子就主要以for循环为例来说明,讲解一些常用的并行手段。

OpenMP使用示例

说了这么多,可以开始来学习怎么使用OpenMP了,在vs中编写c++程序时,在 project property 中的 C/C++ 下的Language中,Open MP Support 选择为支持就行了,然后在程序中只需要把OpenMP的头文件include进来,就可以使用了,同时因为OpenMP是在编译预处理阶段处理的,如果你的电脑是单核那么就会按照单线程运行,所以程序有很强的移植性,真的很方面有木有^_^
不过需要强调的时,使用Debug模式和Release模式时都要选择支持OpenMP哦。不然你会发现程序怪怪的,不要问我是怎么知道的。

OpenMp Demo1

#include <stdio.h>
#include <omp.h>

int main(int argc, char** argv)
{
#pragma omp parallel
{
    #pragma omp for 
    for (int i = 0; i < 100; ++i){
        //return the thread ID
        int pro_id = omp_get_thread_num();
        printf_s("thread %d : %d\n", pro_id, i);
    }
}
return 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值