猿代码浅谈MPI与OpenMP并行程序设计

news2024/11/29 10:37:22

一、什么是OpenMP?

OpenMP是一种用于共享内存并行系统的多线程程序设计的库(Compiler Directive),特别适合于多核CPU上的并行程序开发设计。它支持的语言包括:C语言、C++、Fortran;不过,用以上这些语言进行程序开发时,并非需要特别关注的地方,因为现如今的大多数编译器已经支持了OpenMP,例如:Sun Compiler,GNU Compiler、Intel Compiler、Visual Studio等等。程序员在编程时,只需要在特定的源代码片段的前面加入OpenMP专用的#pargma omp欲编译指令就可以“通知”编译器将该段程自动进行并行化处理,并且在必要的时加入线程同步及通信机制。当编译器选择忽略#pargma om预处理指令时,或者编译器不支持OpenMP时,程序又退化为一般的通用串行程序,此时,代码依然可以正常运作,只是不能利用多线程和多核CPU来加速程序的执行而已。

OpenMP使得程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,它是一个很好的选择。同时,使用OpenMP也提供了更强的灵活性,可以较容易的适应不同的并行系统配置。线程粒度和负载平衡等是传统多线程程序设计中的难题,然而,在OpenMP中,OpenMP库从程序员手中接管了部分这两方面的工作,从而使得程序员可以更加专注于具体的算法本身,而非如何编程使得代码在CPU负载平衡和线程粒度方面做出平衡。但是,作为高层抽象,OpenMP并不适合需要复杂的线程间同步和互斥的场合。OpenMP的另一个缺点是不能在非共享内存系统(如计算机集群)上使用。

在这样的系统上,MPI使用较多。

标准并行模式执行代码的基本思想是,程序开始时只有一个主线程,程序中的串行部分都由主线程执行,并行的部分是通过派生其他线程来执行,但是如果并行部分没有结束时是不会执行串行部分的。这就是标准的并行模式fork/join式并行模式,共享存储式并行程序就是使用fork/join式并行的,OpenMP亦是如此。

二、什么是MPI?

MPI(MPI是一个标准,有不同的具体实现,比如MPICH等)是多主机联网协作进行并行计算的工具,当然也可以用于单主机上多核/多CPU的并行计算,不过效率低。它能协调多台主机间的并行计算,因此并行规模上的可仲缩性很强,能在从个人电脑到世界TOP10的超级计算机上使用。缺点是使用进程间通信的方式协调并行计算,这导致并行效率较低、内存开销大、不直观、编程麻烦。

OpenMP是针对单主机上多核/多CPU并行计算而设计的工具,换句话说,OpenMP更适合单台计算机共享内存结构上的并行计算。由于使用线程间共享内存的方式协调并行计算,它在多核/多CPU结构上的效率很高、内存开销小、编程语句简洁直观,因此编程容易、编译器实现也容易(现在最新版的C、C++、Fotran编译器基本上都内置OpenMP支持)。不过OpenMP最大的缺点是只能在单台主机上工作,不能用于多台主机间的并行计算!

以下链接为先进计算学员学习之后的心得

OpenMP学习笔记_myh1234567890的博客-CSDN博客OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C、C++和Fortran。OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的并行程序设计。编译器根据程序中添加的pragma指令,自动将程序并行处理,使用OpenMP降低了并行编程的难度和复杂度。当编译器不支持OpenMP时,程序会退化成普通(串行)程序。程序中已有的OpenMP指令不会影响程序的正常编译运行。https://blog.csdn.net/u013159288/article/details/127517149OpenMP并行化技术_w0122001的博客-CSDN博客Moore极限的到来:1965年,英特尔联合创始人戈登·摩尔提出以自己名字命名的"摩尔定律",意指集成电路上可容纳的元器件的数量每隔18到24个月就会增加一倍,性能也会提高一倍.根据摩尔定律CPU的性能每隔18到24个月就能增长一倍.但是现在的现状来看单核的CPU的主频已经逼进了极限,我们需要更先进的制造工艺来提升它,但这是很困难的事.即摩尔定律快要失效.所有我们把目光转向了多核CPU,并且多线程并行编程研究也由此而来.一、OpenMP的概述。https://blog.csdn.net/w0122001/article/details/127413471点击下方链接进入先进计算基础训练营

先进计算基础训练营测评名单收集http://hbcjintern.mikecrm.com/2lu8xm8猿代码科技,现向国家大力输送先进计算行业的人才,助力国家智能科技产业的升级发展。如您是一本以上学历,并且是计算机相关专业,请点击下方链接,或者扫描下方二维码,申请就业资格,我们会协调先进计算工程师与您面试。

猿代码-先进计算猿代码(北京)科技有限公司是一家IT类科技公司,致力于软件开发、系统集成及高素质IT开发人才的训练与培养。icon-default.png?t=M85Bhttp://www.ydma.com/ydm_mobile.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文读懂qt界面设计(分裂器,布局,拉伸,各种属性设置)

可以先看看我这个文章:qt关于界面设计中的一些知识总结_我是标同学的博客-CSDN博客_qt 水平伸展 现在我们来正式开始讲解。 布局种类 qt中能称为布局管理器的有如下6个: 水平布局(QHBoxLayout)垂直布局(QVBoxLayout…

数字电路基础04(查找表LUT)

文章目录 LUT(Look Up Table)为什么要用LUT?示例(3输入LUT)LUT(Look Up Table) 在FPGA中,利用LUT来实现组合逻辑的功能,将组合逻辑的输入输出结果,存储为真值表的形式,来代替传统的由逻辑门组成的组合逻辑电路LUT就是将组合逻辑转换成真值表LUT实际上是将输入数据作…

怎么清理c盘的垃圾文件?有什么好的清理方法推荐?

在使用电脑办公或者娱乐的时候,我们的电脑会产生很多临时文件,如果这些临时文件不被清理掉的话,就会导致电脑的运行速度越来越慢,为了能够让电脑的速度越来越快,很多人都会想要清理C盘,但是在清理C盘的时候…

机器视觉(三):摄像机标定技术

目录: 机器视觉(二):机器视觉硬件技术 机器视觉(三):摄像机标定技术 🌏🧐以下为正文🦄🪐 摄像机标定的目的:三维重建 空间物体表面…

ESP32使用MiroPython编程环境搭建

大家好! 今天和大家聊一聊ESP32使用MrioPython编程的环境搭建过程。 目录 一、在ESP32上使用MiroPython的必要条件 二、安装Thonny 1.安装地址 2.安装过程 三、下载MiroPython 四、下载ESP32驱动 五、烧录MicroPython到ESP32 六、点亮ESP32设备LED灯 一、在…

无人机技术服务应用

无人机技术服务应用 随着无人机的迅速发展,无人机行业应用越来越丰富,如何实现无人机行业内高效的运营一直是我们关注的重点。当今无人机具有的优势很多,例如:携带方便、操作简单、反应迅速、载荷丰富、任务用途广泛、起飞降落对…

计算机网络【HTTP协议】

计算机网络【HTTP协议】🍎一.HTTP协议概述🍒1.什么是HTTP协议🍒1.2 Fiddler(抓包工具)🍎二.HTTP协议格式🍒2.1HTTP请求🍉2.1.1 HTTP请求格式🍉2.1.2 HTTP请求格式URL&…

语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、路径覆盖

白盒测试的测试用例在大二学习软件工程的时候也是一个重点模块,但是上课没有太多时间做太多的测试用例,然后许久不用会搞乱,所以这里简单复盘一下。 白盒测试是结构测试,主要对代码的逻辑进行验证。 逻辑覆盖率:语句覆…

软件推荐:AList

软件推荐:AList AList是一个开源Web服务,可以添加多种网盘,将你的多个网盘应用集成到一个统一应用中使用,并且还支持通过WebDAV服务映射到操作系统本地目录使用。 GitHub:https://github.com/alist-org/alist 安装 …

双十一买什么比较划算?四款实用性超强不吃灰的数码好物推荐

现如今,越来越多的数码产品逐渐融入我们的生活当中。但是,在众多的数码产品中,很多人买来用过一两次就放着吃灰的产品也不在少数。因此,我来给大家推荐几款实用性强、不吃灰的数码好物,一起来看看吧。 一、南卡小音舱…

面试算法题

文章目录数组中的第K个最大元素快排k个一组反转链表解法一:栈解法二:模拟买卖股票最佳时机买卖股票最佳时机i买卖股票最佳时机ii贪心无重复长度子串最长递增子序列只出现一次的数字 IIIlru缓存合并K个升序链表数组中的第K个最大元素 快排 class Solutio…

第一个程序

第一个程序 1. 常用DOS命令 1.1 打开命令提示符窗口 1. winR2. cmd3. 按下回车键 1.2 常用命令 2. Path 环境变量的配置 2.1 为什么要配置 Path环境变量 开发 Java程序, 需要使用 JDK 提供的开发工具, 而这些工具在 JDK 的 安装目录的 bin目录 下。未来…

【测试代码 基于Pytorch】的卷积神经网络(CNN) || 【基于Pytorch】的深度卷积神经网络(DCNN)

声明:仅学习使用~ 目录 一、卷积神经网络 CNN1、【基于Pytorch】的卷积神经网络(CNN)2、【基于Pytorch】的深度卷积神经网络(DCNN)一、卷积神经网络 CNN CNN,这里以 LeNet 为例。LeNet神经网络由深度学习三巨头之一的Yan LeCun提出,他同时也是卷积神经网络 (CNN,Convo…

RHCE之路配置本地DNS服务器的正反向解析

第十天 SOA格式 ---(序列号,同步时间,重试时间,过期时间,TTL) 正向解析 [roota ~]# mount /dev/sr0 /mnt mount: /mnt: WARNING: device write-protected, mounted read-only. [roota ~]# yum install bin…

Java 8 新特性 ---- Lambda 表达式

Java 8 新特性 ---- Lambda 表达式1. Java7与Java8的区别2. Lambda表达式3. 语法4. Lambda 表达式实例5. 变量作用域1. Java7与Java8的区别 // 使用 java 7 排序private void sortUsingJava7(List<String> names){ Collections.sort(names, new Comparator<String&g…

matplotlib中的pyplot实用详解

matplotlib中的pyplot实用详解示例1&#xff1a;使用axes确定子图的位置相关函数详解1、plt.subplot()2、plt.subplots_adjust() 与 plt.axes()来控制子图的位置示例1&#xff1a;使用axes确定子图的位置 import matplotlib.pyplot as plt import numpy as np# 固定随机种子 np…

Typescript 学习笔记(二)高级类型二

交叉类型 交叉类型&#xff08;&&#xff09;&#xff1a;功能类似于接口继承&#xff08;extends&#xff09;&#xff0c;用于组合多个类型为一个类型&#xff08;常用于对象类型&#xff09; interface Person2 {name: string} interface Contact {phone: number} typ…

有一个是对的,就是坚持去做难的事情。

不要总是想着去找那些让自己赚到的工作&#xff0c;你自己心里清楚&#xff0c;自己有几斤几两&#xff0c;配什么样的公司。不要贪&#xff0c;不然最后原本该得到的都没有得到。你找差点的工作心里也踏实对不对&#xff0c;不会说比较慌&#xff0c;每天都过不安稳。不要幻想…

软件设计师--其他高频考点总结

视频2022软件设计师-提炼高频考点-个人学习过程的总结&#xff0c;仅供参考&#xff01;_哔哩哔哩_bilibili 目录 1&#xff0c;网络攻击 2&#xff0c;网络安全 3,防火墙 4&#xff0c;耦合 --模块之间相对独立性的度量 5&#xff0c;内聚--模块间内部元素彼此紧密的程度…

Python与爬虫有什么关系?

爬虫一般是指网络资源的获取&#xff0c;因为python的脚本特征&#xff0c;Python易于配置&#xff0c;对字符的处理也非常灵活&#xff0c;加上python有丰富的网络抓取模块&#xff0c;所以两者经常联系在一起。 接下来我们可以详情了解python到底有什么作用。 首先Python翻译…