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. 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权

    第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...

  2. windows下命令行终端使用rz上传文件参数详解

    rz命令: (X) = option applies to XMODEM only (Y) = option applies to YMODEM only (Z) = option applies t ...

  3. Eclipse和MyEclipse使用技巧--如何解决新建一个包的时候,工具帮生成了多个包的问题?

    一.问题再现 二.如何解决

  4. Kafka 如何读取指定topic中的offset -------------用来验证分区是不是均衡!!!(__consumer_offsets)(已验证!)

    我现在使用的是librdkafka 的C/C++ 的客户端来生产消息,用flume来辅助处理异常的数据,,, 但是在前段时间,单独使用flume测试的时候发现,flume不能对分区进行负载均衡!同一个 ...

  5. lucene之中文分词及其高亮显示

    参考:http://www.cnblogs.com/lirenzhujiu/p/5914174.html http://www.cnblogs.com/xing901022/p/3933675.htm ...

  6. The request was denied by service delegate (SBMainWorkspace) for reason: Security ("Entitlement "com.apple.frontboard.debugapplications" required to launch applications for debugging").

    最近工程遇到了这个, The request was denied by service delegate (SBMainWorkspace) for reason: Security (" ...

  7. 《JAVA与模式》之解释器模式 (转载)

    一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...

  8. stm32开发 - 远离 Keil uVision, 回到 Visual Studio

    学了8051单片机, 学了MSP430系列, 终于开始步入正轨, 开始学习 stm32(ARM Cortex-M3)系列微处理器~ 学51用Keil uVision开发环境, 提一下Keil uVis ...

  9. U盘启动装完系统后 一拔下优盘 就不能进入系统

    PE下Ghost安装的,装好进入系统正常,可是拔下 u盘就进不去系统,而插上 u盘就好好的 原因:引导的事,找到本地硬盘第一分区并且激活! 就可以了! 可用下“电脑店-修复主引导记录(MBR)工具”h ...

  10. Android MediaScannerJNI源代码具体解释

    1.简单介绍 MediaScannerJNI的在MediaScanner中的地位可參考 Android MediaScanner 总纲 MediaScanner JNI文件名称: android_me ...