OpenMP基础使用

OpenMP是CPU并行加速相关的编译处理方案,VS很早的版本就对其提供了支持,不过默认是关闭的。要开启这一支持,只需要在项目的属性中设置就可以,具体选项为:配置属性->C/C++->语言 在右侧列表中有一项“OpenMP 支持”,下拉选择“是(/openmp)”就可以了。

其实本人是在前几天才知道有这个东西存在的,朋友跟我说这个东西用起来相比正常的开启多线程要方便很多,经过研究发现其确有方便之处。好吧,下面还是写一下它该怎么用吧,这里只是写最基本的,当然后面用到相关的也会加上去。

在选择上面的选项之后,直接可以用“#pragma omp parallel for”标示给代码中的for循环加速,实例如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>   

void test()//纯粹浪费时间
{
    int add = 0;
    for (int runtime = 0; runtime < 100000000; runtime++)
        add++;
    printf("%d\n", add);
}

void main()
{
    int beginClock = clock();//记录开始时间
#pragma omp parallel for
    for (int testtime = 0; testtime<8; testtime++)
    {
        test();//运行计算
    }
    printf("运行时间为:%dms\n", clock() - beginClock);//输出图像处理花费时间信息
    system("pause");
}

在本人的四核八线程i7 CPU上,其运行消耗时间为261ms,如果删除掉“#pragma omp parallel for”,则运行花费时间为1816ms,相差接近七倍,而如果把main里面的循环次数改为9次,则花费时间变为477ms,可见其正的用上了CPU能支持的最多线程数(八条线程)进行了处理。

当然很多需要并行的代码用for写起来会比较痛苦,这时可以用“#pragma omp parallel sections”标示将要并行执行的代码括起来,然后用”#pragma omp section”标示每一条线程的执行代码,示例如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>   

void test(int time)//纯粹浪费时间
{
    int add = 0;
    for (int runtime = 0; runtime < 100000000; runtime++)
        add++;
    printf("%d\n", time);
}

void main()
{
    int beginClock = clock();//记录开始时间

    /*并行内容*/
#pragma omp parallel sections
    {
        #pragma omp section
        {
            test(1);
        }
        #pragma omp section
        {
            test(2);
        }
        #pragma omp section
        {
            test(3);
        }
        #pragma omp section
        {
            test(4);
        }
    }
    /*并行内容*/

    printf("运行时间为:%dms\n", clock() - beginClock);//输出图像处理花费时间信息
    system("pause");
}

运行时间是211ms,也比单线程运行快了不少实现了并行加速。

上面所说到的是OpenMP两个最为基础的使用,当然其功能远远不止这些,如如何避免内存操作冲突之类的,后面如果有用到再放上来。

时间: 2024-10-12 06:34:20

OpenMP基础使用的相关文章

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

连通域标记算法并行化(MPI+OpenMP)

1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出来,为不同的连通域填入数字标记,并且统计连通域的数目.通过对栅格图像中进行连通域标记,可用于静态地分析各连通域斑块的分布,或动态地分析这些斑块随时间的集聚或离散,是图像处理非常基础的算法.目前常用的连通域标记算法有1)扫描法(二次扫描法.单向反复扫描法等).2)线标记法.3)区域增长法.二次扫描法由于简单通用而被广泛使用! 图1 连通域标记示意图 随着所要处理的数据量越来越

并行计算大作业之多边形相交(OpenMP、MPI、Java、Windows)

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 吐槽: 话说,相当郁闷,2015年,第一次打开博客,准备总结一下这一年.. 结果博客被封了= =! 今天,终于解封了,换了密码,换了密保.... 但是,写回顾的激情有点退散了.. 明后两天要上课,明天还要验收一个综合设计大作业,再后两天要考试,再后两天继续上课,

OpenMP学习

当数据量较大或者时间复杂度高的时候,盲目地等待结果,开发效率极低. 听说OpenMP可以多核并行运算,加快运行速度.整理了一些OpenMP的资料,以待学习. 1.openMP的一点使用经验 2.OpenMP入门 3.OpenMP数据环境 4.第一次试用vc2010的openmp功能, 多线程并行执行for循环 5.关于linux环境下openmp的编程基础 6.通过GCC学习OpenMP框架 OpenMP学习,布布扣,bubuko.com

并行计算基础&amp;amp;编程模型与工具

在当前计算机应用中,对快速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学project计算与数值模拟: 数据密集(Data-Intensive)型应用,如数字图书馆.数据仓库.数据挖掘和计算可视化等: 网络密集(Network-Intensive)型应用,如协同工作.遥控和远程医疗诊断等. 并行编程模型主要有三种:适用于共享内存的多线程编程模型.适用于分布内存的消息传递编程模型,混合编程模型. 在计算机系统中.处理

[转]OpenMP中的private/firstprivate/lastprivate/threadprivate之间的比较

转自:http://blog.csdn.net/gengshenghong/article/details/6985431 private/firstprivate/lastprivate/threadprivate,首先要知道的是,它们分为两大类,一类是private/firstprivate/lastprivate子句,另一类是threadprivate,为指令.(PS:有些地方把threadprivate说成是子句,但是实际来讲,它是一个指令.)可以参考http://blog.csdn.n

老李分享: 并行计算基础&amp;编程模型与工具 2

2.并行编程模型和工具 – MPI – MPI(Message Passing Interface)是一种消息传递编程模型,服务于进程通信.它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种库描述,而不是一种语言,易于使用且具有高可移植性.说白了就是一些编程接口. – OpenMP – Open Multi-Processing是适用于共享内存多处理器体系结构的可移植并行编程模型,接口由SGI公司发起.包含编译指导.运行函数库和环境变量三部分,具有串行等价性(无论使用一个还是多个线程运

并行计算之基础概念(转)

原文地址:http://www.cnblogs.com/kuliuheng/p/4058858.html 并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段.它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算.并行计算系统既可以是专门设计的.含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群.通过并行计算集群完成

并行计算基础&amp;编程模型与工具

在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学工程计算与数值模拟: 数据密集(Data-Intensive)型应用,如数字图书馆.数据仓库.数据挖掘和计算可视化等: 网络密集(Network-Intensive)型应用,如协同工作.遥控和远程医疗诊断等. 并行编程模型主要有三种:适用于共享内存的多线程编程模型,适用于分布内存的消息传递编程模型,混合编程模型. 在计算机系统中,处理器永远都是