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两个最为基础的使用,当然其功能远远不止这些,如怎样避免内存操作冲突之类的。后面假设实用到再放上来。
OpenMP基础使用的更多相关文章
- OpenMP基础----以图像处理中的问题为例
OpenMP2.5规范中,对于可以多线程执行的循环有如下5点约束: 1.循环语句中的循环变量必须是有符号整形,如果是无符号整形就无法使用,OpenMP3.0中取消了这个约束 2.循环语句中的比 ...
- 并行编程OpenMP基础及简单示例
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
- openmp 的使用
http://blog.csdn.net/gengshenghong/article/details/7003110 说明:这部分内容比较基础,主要是分析几个容易混淆的OpenMP函数,加以理解. ( ...
- OpenMP编程总结表
本文对OpenMP 2.0的全部语法——Macro(宏定义).Environment Variables(环境变量).Data Types(数据类型).Compiler Directives(编译指导 ...
- OpenMP共享内存并行编程详解
实验平台:win7, VS2010 1. 介绍 平行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有 ...
- 大数据并行计算利器之MPI/OpenMP
大数据集群计算利器之MPI/OpenMP ---以连通域标记算法并行化为例 1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出 ...
- OpenMP并行编程
什么是OpenMP?“OpenMP (Open Multi-Processing) is an application programming interface (API) that support ...
- 并行计算之OpenMP入门简介
在上一篇文章中介绍了并行计算的基础概念,也顺便介绍了OpenMP. OpenMp提供了对于并行描述的高层抽象,降低了并行编程的难度和复杂度,这样程序员可以把更多的精力投入到并行算法本身,而非其具体实现 ...
- 并行计算基础&编程模型与工具
在当前计算机应用中,对快速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学project计算与数值模拟: 数据密集(Da ...
随机推荐
- ppt整体配色方案
背景色建议以灰色或者被色为主. 在百度云盘也有大量的ppt模板,还是非常不错的.http://pan.baidu.com/s/1bpDf7Fh
- python必须要安装的库
1.requests 2.lxml 3.Django 4.BeautifulSoup 5.PyMySQL-0.7.0 (适用于python3) 6.图片处理PIL
- Spring Boot动态修改日志级别
1. pom中引入 org.springframework.boot spring-boot-starter-actuator 2. 发送POST请求: 地址: http://[服务地址] ...
- 完美解决office2013 错误1402
遇到1402问题 按照网络上的帖子都无法解决,老提示无权限更改,原来只是少了一个步骤而已!经本人多次试验,已经完美解决,现在上图! 步骤 肯定是得先出现错误,找到注册表所在项! 这个就不赘述,通过 ...
- shell笔记-算术运算
算术运算在Bash shell环境中,可以利用let.(( ))和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.let命令可以直接执行基本的算术操作.当使用let时 ...
- Oracle Tuxedo工作站客户端与服务端的样例程序
服务端代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <cty ...
- CSS“隐藏”元素的几种方法的对比
本文地址:http://luopq.com/2016/02/15/css-tricks-of-hide-element/,转载请注明 一说起CSS隐藏元素,我想大部分小伙伴们都会想到的第一种方法就是设 ...
- mysql8.0 Authentication plugin 'caching_sha2_password' cannot be loaded
安装mysql8.0后使用navicat创建连接, 然后报如题所示警告.可参考如下解决方案: https://stackoverflow.com/questions/49194719/authenti ...
- <转>lua解析脚本过程中的关键数据结构介绍
在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...
- linux下开启https
1.在线安装mod_ssl yum -y install mod_ssl 查看openssl 是否安装成功 rpm -qa |grep openssl 2.建立服务器密钥 openssl genrsa ...