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两个最为基础的使用,当然其功能远远不止这些,如怎样避免内存操作冲突之类的。后面假设实用到再放上来。

OpenMP基础使用的更多相关文章

  1. OpenMP基础----以图像处理中的问题为例

        OpenMP2.5规范中,对于可以多线程执行的循环有如下5点约束: 1.循环语句中的循环变量必须是有符号整形,如果是无符号整形就无法使用,OpenMP3.0中取消了这个约束 2.循环语句中的比 ...

  2. 并行编程OpenMP基础及简单示例

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  3. openmp 的使用

    http://blog.csdn.net/gengshenghong/article/details/7003110 说明:这部分内容比较基础,主要是分析几个容易混淆的OpenMP函数,加以理解. ( ...

  4. OpenMP编程总结表

    本文对OpenMP 2.0的全部语法——Macro(宏定义).Environment Variables(环境变量).Data Types(数据类型).Compiler Directives(编译指导 ...

  5. OpenMP共享内存并行编程详解

    实验平台:win7, VS2010 1. 介绍 平行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有 ...

  6. 大数据并行计算利器之MPI/OpenMP

    大数据集群计算利器之MPI/OpenMP ---以连通域标记算法并行化为例 1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出 ...

  7. OpenMP并行编程

    什么是OpenMP?“OpenMP (Open Multi-Processing) is an application programming interface (API) that support ...

  8. 并行计算之OpenMP入门简介

    在上一篇文章中介绍了并行计算的基础概念,也顺便介绍了OpenMP. OpenMp提供了对于并行描述的高层抽象,降低了并行编程的难度和复杂度,这样程序员可以把更多的精力投入到并行算法本身,而非其具体实现 ...

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

    在当前计算机应用中,对快速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学project计算与数值模拟: 数据密集(Da ...

随机推荐

  1. Knockout学习之表单绑定器(下)

    “hasFocus”绑定 hasFocus绑定器会将DOM元素的焦点状态与视图模型中的属性相关联,当你设置视图模型中关联的属性为true或false后,将能够设置关键的DOM元素是否获得焦点. 比如下 ...

  2. ADAMS绳索仿真

    在实际生活中有大量的绳索类传动运动形式.绳索类部件看似简单,但是用计算机软件对其模拟时却存在较大障碍.以钢丝绳为例,通常都是通过细长的钢丝螺旋缠绕在一起形成,在工作时当施加拉力载荷于其上,除了材料自身 ...

  3. 触发JVM进行Full GC的情况及应对策略

    堆内存划分为 Eden.Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为M ...

  4. Kafka 配置

    安装 解压放到/opt/kafka, 软链一个latest出来, 先要启动zookeeper. 可以使用独立的zookeeper服务, 也可以用kafka自带的, 在lib目录下带了zookeeper ...

  5. ssm(spring mvc+mybatis)+netty4开发qiq

    发布时间:2018-10-30   技术:spring mvc+mybatis+nett4+layui   概述 简单快捷的IM方案,快速打造在线IM,可用于公司内网.外网通讯,客服系统等,实现了so ...

  6. 得到类所在的jar包路径

    //理论上用class.getProtectionDomain().getCodeSource().getLocation().getFile();比较准.  //不过有两个需要注意的:  //1.返 ...

  7. stuff in /proc/sys/fs/

    This subdirectory contains specific file system, file handle, inode, dentry and quota information. 1 ...

  8. org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:

    保存实体异常 https://blog.csdn.net/zzzz3621/article/details/9776539 org.hibernate.NonUniqueObjectException ...

  9. linux nginx配置新项目加域名(设置绑定域名)

    转自:linux nginx配置新项目加域名 找到nginx的配置文件 nginx/nginx.conf 第一种方,法直接在nginx.com里面配置 user www www; worker_pro ...

  10. Windows phone 应用开发系列教程(更新中)

    Windows phone 应用开发[1]-Text To Speech        作为开篇章节.第一篇将在如下介绍一些Windows phone比较有意思的东西-Text To Speech[文 ...