OpenMP学习笔记1

OpenMP学习笔记 编译命令:gcc –O XXX.c -fopenmp 1.      Multi-thread Programming 1.      首先要import相应的API,因此必须在首行写上#include “omp.h”。 2.      对于要并行执行的部分,用#pragma omp parallel{…} 标记并行块范围。 3.      在并行块里面,用int ID = omp_get 阅读详情

OpenMP学习笔记1


介绍

在C/C++中,OpenMP可以通过使用预处理指令来让程序并行化。OpenMP指令使用的格式为:

 #pragma omp 指令 [子句[子句]…]

fork/join并行执行模式的概念

OpenMP是一套用于共享内存并行系统的多处理器程序设计的指导性的编译处理方案,OpenMP并行执行的程序要全部结束后才会运行后面非并行部分的代码,这就是fork/join并行模式。

例子:

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

int main(int argc, char* argv[])
{
    int i;
	#pragma omp parallel for
	for (i = 0; i < 10; i++) {
		printf("i = %d\n", i);
	}
	printf("hello!\n");
	return 0;
}

Linux下编译方式:

gcc -fopenmp test.c -o test

结果为:

i = 8
i = 4
i = 7
i = 6
i = 5
i = 2
i = 9
i = 3
i = 0
i = 1
hello!

OpenMP指令的用法

  1. parallel指令
    parallel 是构造并行块的一个指令,同时也可以配合其他指令如for, sections等指令一起使用。在这个指令后面需要使用一对大括号来指定需要并行计算的代码。
#pragma omp parallel [for | sections] [子句[子句]…] 
{ 
//并行部分 
}
  1. for指令
    for指令的作用是使一个for循环在多个线程中执行,一般for指令会与parallel指令同时使用,即parallel for指令。此外还可以在parallel指令的并行块中单独使用,在一个并行块中可以使用多个for指令。但是单独使用for指令是没有效果的。

例子:

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

int main(int argc, char* argv[])
{
	#pragma omp parallel 
	{
	    int i, j;
		#pragma omp for
		for (i = 0; i < 5; i++)
			printf("i = %d,threadid = %d\n", i,omp_get_thread_num());
		
		#pragma omp for
		for (j = 0; j < 5; j++)
			printf("j = %d,threadid = %d\n", j,omp_get_thread_num());
	}
	return 0;
}

结果:

i = 0,threadid = 0
i = 1,threadid = 1
i = 4,threadid = 4
i = 3,threadid = 3
i = 2,threadid = 2
j = 2,threadid = 2
j = 0,threadid = 0
j = 1,threadid = 1
j = 4,threadid = 4
j = 3,threadid = 3
  1. sections和section指令
    sections语句可以将下面的代码分成不同的分块,通过section指令来指定分块。每一个分块都会并行执行,具体格式:
#pragma omp [parallel] sections [子句]
{

	#pragma omp section
	{
	//代码
	}
	…
}

例子:

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

int main(int argc, char* argv[])
{
	
	#pragma omp parallel sections
	{
		#pragma omp section 
		printf("Section 1 ThreadId = %d\n", omp_get_thread_num());
		#pragma omp section
		printf("Section 2 ThreadId = %d\n", omp_get_thread_num());
		#pragma omp section
		printf("Section 3 ThreadId = %d\n", omp_get_thread_num());
		#pragma omp section
		printf("Section 4 ThreadId = %d\n", omp_get_thread_num());
	}
	return 0;
}

结果:

Section 3 ThreadId = 18
Section 2 ThreadId = 15
Section 1 ThreadId = 27
Section 4 ThreadId = 23

参考:

link

CLion配置openMP 使用MinGW64在Clion中配置openMP的开发 安装MinGW64和CLion 配置CMakeList.txt CLion 2020.2.3 Build #CL-202.7319.72, built on September 18, 2020 对openMP编译制导的格式问题踩坑 下载 MinGW64 CLion 创建工程,配置CMakeList.txt cmake_minimum_required(VERSION 3.17) project(openMP C) set(CMAKE_C_ST 阅读详情

相关推荐

openfast:NREL 支持的 OpenFAST 整机和 FAST.Farm 风电场模拟代码的主要存储库

OpenFAST OpenFAST 是一种基于 FAST v8 的风力涡轮机仿真工具。 FAST.Farm 扩展了 OpenFAST 模拟多涡轮风电场的能力。 它们的创建目标是成为研究实验室、学术界和工业界开发和使用的社区模型。 它们由国家可再生能源实验室的专门团队管理。 我们的目标是确保 OpenFAST 和 FAST.Farm 是经过充分测试和记录良好的可持续软件。 如果您想做出贡献,请参阅和任何带有标签的未解决的 GitHub 问题。 OpenFAST 正在积极开发中。 FAST v8 - OpenFAST 从 FAST v8 到 OpenFAST 的过渡代表了更好地支持围绕基于 FAST 的风力涡轮机和风力发电厂的航空水力伺服弹性工程模型的开源开发人员社区的努力。 OpenFAST 是下一代 FAST 分析工具。 提供了更多信息。 FAST v8,即现在的 OpenFAST

并行算法设计与优化

山东大学计算机科学与技术学院并行算法设计与优化2022年实验

Burger_的博客 2686

vivado2020.2安装教程:Windows平台完整指南

手把手带你完成vivado2020.2安装教程,覆盖下载、配置到验证全过程,解决常见安装问题,确保在Windows平台顺利部署开发环境,适合初学者快速上手。

weixin_42607969的博客 1345

并行计算:openMP(一)—— parallel,for,sections指令的用法

一、简介 OpenMP介绍 在C/C++中,OpenMP可以通过使用预处理指令来让程序并行化。OpenMP指令使用的格式为: #pragma omp 指令 [子句[子句]…] 下面是一个最简单的OpenMP程序,可以运行后观察结果与普通程序有什么不同。 请在适当的位置填上#pragma omp parallel for使程序并行执行。每次输出的结果可能会有所区别。 ...

JacksonKim的博客 1万+

EPSON RX8010SJ RTC实战:I2C寄存器配置避坑指南(附完整初始化代码)

本文详细解析了EPSON RX8010SJ RTC芯片在I2C寄存器配置中的常见问题与解决方案,包括TEST位、STOP位和中断控制等关键配置要点。通过实战经验分享和完整的初始化代码模板,帮助开发者避免常见陷阱,确保RTC模块的稳定运行。

weixin_28678831的博客 407

GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题

本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。

weixin_28732953的博客 335

OpenMP Tutorial学习笔记(1)OpenMP介绍

OpenMP Tutorial: http://www.llnl.gov/computing/tutorials/openMP 1. 摘要: OpenMP provides a portable, scalable model for developers ofshared memory parallel applications. The API supports C/C++ an

。。。。 2027

基于STM32的智能鱼缸设计

为了缓解学习、生活、工作带来的压力,提升生活品质,许多人喜欢在家中、办公室等场所养鱼。为节省鱼友时间、劳力、增加养鱼乐趣;为此,本文基于STM32单片机设计了一款智能鱼缸。该鱼缸可以实现水温检测、水质检测、自动或手动换水、氛围灯灯光变换和自动或手动喂食等功能为一体的控制系统,可通过控制键进行一键控制。...

1万+

OPENMP学习笔记(1)——简介,模型,运行

OPENMP学习笔记(1) 简介: OpenMP的英文全称是Open Multiprocessing,一种应用程序接口(API,即Application Program Interface),是一种单进程多线程并行的实现和方法,也可以认为是共享存储结构上的一种编程模型,可用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive)。 在项目程序已经完成好的情况下不需...

qq_23858785的博客 2442

LangChain .NET:C#开发者构建AI应用的RAG框架与实战指南

大语言模型(LLM)作为当前人工智能的核心技术,通过深度学习海量文本数据,掌握了强大的语言理解和生成能力。其原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,从而实现对复杂语义的建模。这一技术价值在于能够将非结构化的自然语言转化为可计算、可推理的表示,为各类智能应用提供认知基础。在实际工程实践中,LLM常被应用于构建检索增强生成(RAG)系统和AI智能体(Agent)。RAG通过结合外部知识库检索与LLM生成,有效提升了问答的准确性和事实性,是构建企业知识库、智能客服等场景的关键技术。

weixin_42538175的博客 705

npm install failed如何办?

上网搜索,说是网络配置不太对。按照如下几步,保证解决问题。在运行npm install指令时,出现如下错误。

xiezhipu的博客 879

OpenMP学习笔记 1/10: 简介及OSX设置

Tim Mattson OMP Tutorial系列的学习笔记,油管和B站都能看到视频 目录Setup on OSXHow threads workOpenMP overview Setup on OSX tutorial: https://iscinumpy.gitlab.io/post/omp-on-high-sierra/ install OMP library: brew install...

最大似然小抄 358

高通平台开发系列讲解(系统篇)系统关机流程

📢本篇章主要图解高通平台系统关机流程。

内核笔记 3213

并行计算--openMP学习笔记(1)

这学期学习并行计算,感觉挺有趣的,openMP是一种基于线程的并行编程模型。所有的openMP并行程序都开始与一个单独的主线程,中间会有一个或多个并行域。编程的时候一般是先写出串行程序,验证正确后,再一句一句改写成并行程序。     我就不再说openMP的历史等一些概念性的东西了,直接进入正题。推荐书籍有入门书:陈国良院士编著的《并行计算----结构·算法·编程》,以及关于openMP的详尽信

blackturtle的博客 1425

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

阿飞2018 1185

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【OpenMP学习笔记】1:基本使用和critical指令

MPI是可以针对分布式内存,在进程级别实现并行的API;OpenMP则是针对共享内存,在线程级别实现并行的API。 基本使用 不同于MPI的init和finalize,OpenMP用携带了parallel指令的预处理指令指示接下来的一个代码块被多个线程执行。 OpenMP预处理指令-(携带)-&gt;OpenMP指令-(携带)-&gt;OpenMP指令的子句。 隐式路障是OpenMP的...

大桔骑士的学习笔记 7007

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

嵌入式算法移植优化学习笔记1——openmp(多核编程框架)

嵌入式算法移植优化学习笔记1——openmp 参考: 1、https://www.oschina.net/p/openmp?hmsr=aladdin1e1 1、openmp简介 OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受,用于共享内存并行系统的多处理器程序设计的一套指导性编译处理方案(Compiler Directive) 。OpenMP支持的编程语言包括C、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,G

耶律大石的博客 2305

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

并行程序设计导论学习笔记——OpenMP(1)

使用OpenMP需要在编译器上打开OpenMP开关,并包含omp.h文件。我使用的是在Windows下的Visual Studio 2015,只需在工程选项中打开OpenMP支持就可以了。按照书上的说法,GCC增加参数-fopenmp就可以了。 OpenMP有两个重要的函数: omp_get_thread_num() omp_get_num_threads() 他们的返回值都是无符号整...

weixin_30823227的博客 235

OpenMP并行程序设计 学习笔记(1)

章一 1.5 利用数据相关图来揭示并行性 数据并行性:不同数据集的相同操作->数据相加。 功能并行性:顾名思义。 流水线 1.6 数据聚类 有一个很好的例子 1.7 为并行计算机编程(略)。 转载于:https://www.cnblogs.com/nationality/p/6669559.html...

weixin_30487201的博客 75

并行程序设计导论pdf电子书_并行程序设计导论学习笔记——OpenMP(1)

使用OpenMP需要在编译器上打开OpenMP开关,并包含omp.h文件。我使用的是在Windows下的Visual Studio 2015,只需在工程选项中打开OpenMP支持就可以了。按照书上的说法,GCC增加参数-fopenmp就可以了。OpenMP有两个重要的函数:omp_get_thread_num()omp_get_num_threads()他们的返回值都是无符号整数,第一个用来返回当...

weixin_39852953的博客 569

OpenMP 学习笔记

OpenMP 学习笔记 什么是 OpenMP OpenMP 是一种用于共享内存并行系统的并行计算方案,支持的编程语言包括 C、C++ 还有 Fortran。 简单的说 OpenMP 是利用 CPU 多线程技术加速计算的一套方案。并且是为不熟悉多线程技术的开发人员准备的。程序员通过在源代码中加入专用的 pragma 来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通...

Ivan 的专栏 2210

【OpenMp】openmp库的介绍及安装

OpenMP(Open Multi-Processing)是一种并行编程框架,用于在共享内存系统中实现并行计算。它是GCC编译器的一部分,提供了一组指令和编译器指导,帮助程序员实现程序的并行化。OpenMP的目标是简化并行编程,提高程序的执行效率。

种一棵树最好的时间是十年前,其次是现在 5059

OPENMP学习笔记(3)——命令

OPENMP使用 paralell parallel表示其后语句将被多个线程并行执行,“#pragma omp parallel”后面的语句(或者,语句块)被称为parallel region。 多个线程的执行顺序是不能保证的。 for 对一个计算量庞大的任务进行划分,让多个线程分别执行计算任务的某一部分,从而达到缩短计算时间的目的。关键是,每个线程执行的计算互不相同(操作的数据不同或者计算任务本...

qq_23858785的博客 2913

OpenMP

OpenMP支持的编程语言包括C、C++和Fortran,简单的说,就是一种API,来编写多线程应用程序。通过使用简单的指令#pragma omp …就可以对程序进行多线程并行。OpenMP使得程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,它是一个很好的选择。但是,作为高层抽象,OpenMP并不适合需要复杂的线程间同步和互斥的场合。OpenMP的...

风雪夜不眠人的博客 1万+
下一篇: OpenMP学习笔记2
dearest_____
博客等级 码龄9年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值