多核和多CPU编程——基本模式和库

c#Task多核编程 是 阅读详情

一、基本模式

1、MPI
MPI(Message Passing Interface)消息传递接口是MPI论坛发布的一个支持C/C++/Fortran库。属于一种消息传递编程模式,它提供了一种与平台无关的消息传递程序标准。它主要有三种实现:mpich、chimp 和lam。这种模型适应性好,无论是多核、多CPU还是分布式集群都可以使用。缺点是复杂的进程通信导致对开发者的要求较高,而且需要进行通信间的控制。
2、OpenMP
OpenMP(Open Multi Processing)是由Open ARB发布的一种用于并行编程支持C/C++/Fortran的标准,OpenMP是基于派生/连接(fork/join)的编程模式,这个模型一般的程序都还是比较了解的。此标准由编译指导(compiler directive)、运行库(runtime library)和环境变量(environment variables)三部分组成。通过简单的fork/join对串行程序并行化或者采用单程序多数据对串行程序两种方式实现并行化。
OpenMP只适应于SMP结构(后面会介绍相关的硬件基础),开发相对简单,特别对循环更实现并行开发,但是调试比较麻烦。
3、Intel IPP/TBB
Intel IPP(Integrated Performance Primitives)和Intel TBB(Threading Building Blocks),前者是接近于硬件底层的API库,后者是更高一层抽象的并行模板库。前者对硬件依赖比较大,移植性差,后者则移植性较好。
4、MapReduce
这个模式其实主要还是应用于分布式也即多CPU(多服务器)编程中,用于解决海量数据的处理。有兴趣可以看看Google的三篇相关论文。

基本模式的划分可能角度不同,认知各有不同,这个可能是一个需要讨论的地方。抛砖引玉吧。

二、基本库

在现在的软件编程中,自己单独造轮子的可能性几乎是零了,特别是在国内,基本都已经是开源的天下,小打小闹一番就挺出彩的。在多核编程中,当然也就有已经成型的现有库了。一般来说,从内核的API到语言的开发库再到抽象的语言开发库再到上层应用框架,一层比一层更抽象,更简单。但对于初学者来说,可能越简单,越愿意深入学下去。这也是一个矛盾的地方。
在多核编程中,目前比较常用的标准即OMP(OpenMP),它其实最先是在Fortran后来支持了C和c++,它提供了一整套的与平台无关的编译指令。一般来说,并行编程和硬件的底层实现有相当的联系度,所以Intel提供了TBB(intel Threading Building Blocks)这个库。另外一个c++程序员比较熟悉的可能就是Boost库了,同样还有其它的库STAPL和POOMA以及PPL,GPU上的并行MapReduce库Mars等。当然,借助于开源,并行库还有很多,包括特定于某个场景的并行库等都是比较有各自特点的。
这里不介绍操作系统中对线程和进程支持的API和库(包括c++11以上STL中的线程库),这些在前面的c++学习系列中已经有了较为详尽的描述和分析,有兴趣可以翻一下以前的相关文章。
许多的库其实并不是单一的某一个功能,可能贯穿着整体的从底层硬件到上层接口应用的一整套体系,这也是c++越来越难学的一个重要原因,但是有库用总比自己从头再造一个要强很多。

三、例程

这里限于相关应用,只提供一个OMP的相关的例程,以后会对一些基本库进行逐一分析时,再展现相关的例程:

int main(int argc,char **argv)
{
#pragma omp parallel for
	for (int num = 0; num < 1000 * 1000; num++)
	{
		std::cout << "parallel run!" << std::endl;
	}

	return 0;
}

这是一个非常简单的例程,但也确实表现出了OMP中对循环的并行展示。在有些时候儿,需要让线程和CPU的核绑定,OMP也提供了相关的函数和应用接口,在以后再慢慢的分析说明。

四、总结

在单核的硬件设计到达瓶颈时,多核和多CPU的出现不可避免的要求新的编程模式,一些新设计和架构思想也在不断的涌现和产生。这就需要软件开发人员不断的紧跟着技术的脚步向前走。正如古人所言,学如逆水行舟,不进则退。共勉之!
在这里插入图片描述

CPU入门扫盲篇之一文搞懂多 CPU、多核 CPU、超线程技术、SMP 上,如果某个物理核心在执行指令流时需要等待指令数据,那么该核心就有一段时间处于空闲状态(虽然可能很短暂)。,非对称多处理器,指某些处理器用来运行特殊的程序,比如操作系统,而另外的处理器用来运行非特殊程序,比如用户程序。的时候,需要等待指令需要的数据到达,那么,在这个等待的时间内,才可以切换到指令流。,是指任何程序,不管运行在内核空间,还是用户空间,都可以运行在任意一个处理器上。物理核,物理核之间通过片内总线相连,相比主版上的系统总线,片内总线速度非常快。为了实现超线程技术,一个物理核心内部,会同时包含。 阅读详情

相关推荐

OpenCL的多GPU和多核CPU异构计算--1

本文主要探究OpenCL的GPU和多核CPU的异构计算问题,主要简要阐述了什么是OpenCL异构计算,讲述CPU和GPU各自的特点,并且把他们结合起来做异构计算的前景。然后具体讲述在高性能实验室Linux工作站上如何搭建多GPU和多核CPU异构OpenCL环境。最后用实验验证了所安装的OpenCL异构计算环境能够正常工作,说明什么是OpenCL的多GPU与多核CPU异构环境的platform,de

飞鸿惊雪 3766

多核编程4种方式:多线程、多进程、csp(轻量级线程)、actor(轻量级进程)

1)多线程方式利用多核心 锁(信号量、互斥锁、自旋锁、读写锁、原子锁cas、乐观锁、悲观锁) 锁的粒度 什么情况下用什么锁,比较困惑 消息队列 管道(不需要加锁): pipe+epoll/select/epoll 资源+锁 并发实体:线程 总结: 需要大量的锁。 2)多进程方式利用多核心 共享内存 pipe管道、 父进程fork子进程有限制 只能一端读...

focus-unchanged-thing 1593

OpenCL的多GPU和多核CPU异构计算--2

本文主要探究OpenCL的GPU和多核CPU的异构计算问题,主要简要阐述了什么是OpenCL异构计算,讲述CPU和GPU各自的特点,并且把他们结合起来做异构计算的前景。然后具体讲述在高性能实验室Linux工作站上如何搭建多GPU和多核CPU异构OpenCL环境。最后用实验验证了所安装的OpenCL异构计算环境能够正常工作,说明什么是OpenCL的多GPU与多核CPU异构环境的platform,de

飞鸿惊雪 3424

多核编程与单核多线程编程

并发:时间段内有很多的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行。 并行:时间段和时间点上都有多个线程或进程在执行。 单核cpu的话只能是并发,多核cpu才能做到并行执行。 那有人可能有这样的疑问:那多进程的并发有什么意义,不但没有提高cpu的利用效率,由于调度等开销,还降低了cpu的使用。 这样的想法是片面的: 1.进程并不是时时刻刻都占用cpu的...

u011555996的博客 1144

多核处理器编程:实现并行计算的关键

通过合理地划分和调度计算任务,并充分利用多核处理器的并行计算能力,可以显著提高计算性能和效率。通过合适的并行计算库或框架,开发者可以编写高效的多核处理器程序,实现并行计算的加速效果。多核处理器编程的关键是将计算任务划分为多个子任务,并将这些子任务分配给不同的处理核心进行并行处理。通过合理的任务划分和调度,可以充分发挥多核处理器的计算能力,提高系统的整体性能。读者可以根据自己的具体情况,使用不同的并行计算库或框架,如CUDA、OpenCL、MPI等,来实现多核处理器编程。三、多核处理器编程的示例源代码。

DevScribe的博客 615

N32G003学习——第九章 第三节1 串口 发送

经过第九章前2节的学习,基础打下之后,开始敲代码。

qq_34525008的博客 1034

函数式编程与多核处理器编程

1.背景介绍 函数式编程和多核处理器编程分别是两个独立的领域,但在现代计算机科学和软件工程中,它们之间存在密切的联系和互动。函数式编程是一种编程范式,将计算视为对函数的应用,并强调不可变数据和无副作用。多核处理器编程则是面向现代多核CPU和GPU的并行计算编程,旨在充分利用多核架构的计算能力。 在过去的几十年里,函数式编程主要用于处理复杂的数据处理和数值计算任务,如统计学、机器学习和金融分析。...

AI天才研究院 909

嵌入式接口通识知识之PCIe接口

PCIe x1接口是最常见的一种,插槽的长度是最短的,仅有25mm。PCIe x4接口有四个数据通道,提供比x1接口更高的带宽,插槽的长度为39mm,分为前后两组,一组22根针脚用于供电,剩下的42根针脚是数据针脚。插槽全长89mm,有164根针脚,分为前后两组,较短的插槽有22根针脚,主要用于供电,较长的插槽142根,主要用于数据传输,具有16通道所带来的高带宽。PCIe x8接口有八个数据通道,插槽全长56mm,有98跟针脚,分为前后两组,较短的22根针脚用于供电,剩下的76根针脚是数据针脚。

2301_76587520的博客 1305

多核和多CPU编程——介绍

一、多核和多CPU 计算机技术的发展,对CPU的要求越来越高,各大厂商通过不断的挖掘CPU的频率通过类似超标量的方法等来实现对芯片性能的极致榨取。但是随着实际场景对CPU性能的需求不断增长,单一核心CPU的性能提高已经无法实现摩尔定律的发展指标。所以,包括Intel和AMD等CPU生产厂商,开始在一个芯片中,集中多个CPU计算核心。这也是在计算机的说明中,某个芯片支持4核、8核等等的情况。同样,为了提供更高的性能,可以在主板上集成多个CPU。而实际上,多CPU比多核出现的要早得多。 多核心的CPU技术发展以

fpcc的专栏 2814

UMI刷盘机器人代码实战:从SLAM到Diffusion Policy的完整部署流程

本文详细解析了UMI(Universal Manipulation Interface)刷盘机器人从数据准备到真实部署的完整实战流程。通过SLAM处理视频数据生成三维轨迹,并训练Diffusion Policy模型,最终将策略部署到UR5机械臂与WSG50夹爪上,实现从模仿学习到物理执行的闭环。

weixin_29042035的博客 461

Cadence SIP Layout 简单教程-第一章

以摄像头模组软硬结合板为例,描述layout的整个完整过程,从而掌握基本技能。 第一章 准备工作 第一节 原理图不用说layout前需要绘制原理图,原理图不在本文讨论范围内,所以列为准备工作。 需要特别说明的是,绘制原理的最终目的是导出网络表,网络表中的重要参数footprint是让layout软件选择正确封装的关键,所以这里讲解一下原理图设置footprint的位置。在原理图中双击零件,...

whp1920的博客 1万+

多核CPU和单核的区别~

昨天有同学问我多核cpu和单核的区别大不大,今天简单写一篇回复下吧。大家有其他问题也可以文末给我留言,我会尽量抽时间写文回复。首先回顾下基本概念,cpu,就是中央处理器,包括运算器和控制器...

6709

AutoSAR从0开始实战 --- 目录

​​​​​​本专栏是全网最真实的AutoSAR实战专栏,博主将从一个0基础小白的身份来讲解AutoSAR工具的配置,以及相应代码的讲解。

wj博客 1729

多 CPU、多核 CPU、超线程技术、SMP

多CPU)指的是在计算机主板上有多个物理CPU,每一个物理CPU之间通过系统总线连接。:包括通用数据寄存器、段寄存器、控制寄存器等。:执行引擎,用来执行CPU指令,包括算数逻辑单元ALU等。Local APICAPIC全称是,翻译过来就是高级可编程中断控制器,用来处理CPU中断。

顺其自然~专栏 1761

微信小程序|基于小程序实现定位打卡功能

此文主要在小程序内实现打卡功能,可根据用户位置与公司设定的打卡范围实时判断打卡是否合法,并在后台对打卡记录进行管理。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

Python爬虫教程:如何爬取多平台电商商品信息(价格、评价、库存)

本文介绍了如何编写一个跨平台电商商品爬虫,爬取多个平台的商品信息,包括商品名称、价格、评价等数据。通过Python的爬虫库(如requestsSelenium)和数据处理库(如pandasmatplotlib)的结合,我们可以高效地获取和分析电商平台上的商品信息。

2201_76125261的博客 917

多核和多CPU编程——基础硬件说明

一、硬件的发展 CPU的发展在经过了摩尔定律的快速迭代后,有了长足的进步。但俗话说的好,一个好汉三个帮,单体的CPU发展,最终还是遇到了瓶颈。无论是超标量还是流水设计,都无法超越此瓶颈。从实际情况来看,多CPU要比多核出现的早,毕竟多CPU要比多核好设计架构一些。而随后,在单个芯片上集成多个CPU核心(CMP)也就是常说的多核技术开始迅速发展起来。 现代的多核心处理器,是一种内存共享的技术,CPU一般为对称状态,所以叫做共享存储的对称多处理器(SMT,symmetric multi-processor)。多

fpcc的专栏 1654

XSS漏洞之PDF生成:从XSS到服务端任意文件读取

XSS是最为常见的Web漏洞之一,多年来连续入选OWASP TOP10,相信大家都耳熟能详。 它是一种代码注入类的攻击,是一种客户端侧的攻击,攻击者通过在Web应用中注入恶意JavaScript代码,通过点击URL,最终在受害者浏览器端执行的一种漏洞。主要有反射型XSS、存储型XSS、基于DOM的XSS三类。XSS一些比较常规的危害大概有:重定向浏览器、窃取Cookie、浏览器劫持等。本文章侧重于发现XSS后的进一步利用。 主要介绍在某次实际测试过程中,发现XSS漏洞之后,如何进一步的利用,最终通过XSS达

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3780

多核和多CPU编程——多线程的资源控制

一、多线程下的资源控制 在分析多核及多CPU编程前,就不得不先回到最初的单核编程上,早期的电脑直到现在的一些简单的单片机,其实都是使用的一个CPU串行的来执行任务。就好比人们去一台ATM上取款,只能一个个的来操作,而不能说你操作一半时换另外一个人再操作ATM。但是这样就会出现一个问题,如果一个人占用时间过长怎么办,后面的人即使只想查询一下,都得等好长的时间。 最初电脑使用纸带也和上面一样,直到后来为了解决这个问题,就出现了多任务系统,直至后来出现PC,出现了现在基于抢占式的CPU时间片轮转的方式来调度线(进

fpcc的专栏 1807

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

多核cpu是并发还是并行_多核CPU及其带来的并发更改

摩尔定律-戈登·摩尔在1965年的预测,即每个集成电路组件的数量将每18到24个月翻一番-举行了真,并预计将保持真,直到2015 - 2020年(参见相关主题 )。 直到2005年,CPU时钟速率也一直持续提高,这本身足以提高在这些CPU上执行的所有应用程序的性能。 应用程序开发社区在性能改进方面一路顺风,而很少或根本没有投资于算法改进。 但是,自2005年以来,时钟速率的增长和晶体管数量...

cusi77914的博客 7381

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

c语言如何多核运行程序,对于多线程程序,单核cpu和多核cpu如何工作?

1. 单核和多核CPU上多线程执行效率的探讨a1: 多线程实际上是在单个CPU中按顺序执行的,但是系统可以帮助您切换该执行,但是它不是很快的(相反,是缓慢的)如果有多个cpus,则可以同时在两个cpus中执行.........a2: 在单核CPU上运行的多线程程序. 只能同时运行一个线程. 该系统可帮助您切换线程. 系统将时间片分配给每个线程以执行. 每个时间片约为10毫秒. 它似乎同时运行,但实...

weixin_39830200的博客 4424

CPU,多核,多线程,并发,并行,计算效率

计算机原理:CPU、并发、并行、多核、多线程、多进程0、计算机工作流程0.0 基础概念:计算机组成0.1 CPU(Central Processing Unit)(1)控制单元(2)运算单元(3)存储单元:0.2 计算机总线(Bus)0.3计算机工作流程1、线程和进程1.0 前提了解1.1进程(process):1.2 线程(thread)1.3 进程和线程的区别与联系1.4多线程和多进程一、什么是多线程?二、多进程三、多线程与多进程,选择谁?2、 多核,高并发,并行2.1 多核2.1.1 物理CPU多核2

rs_gis的博客 1万+

多核编程 与 单核多线程编程的区别

一,首先声明 并行:两件(多件)事情在同一时刻一起发生,  并发:两件(多件)事情在同一时刻只能有一个发生,由CPU快速切换,从而给人的感觉是同时进行       使用多线程来实现并行计算来缩短计算时间时,只要在多核CPU下才行,单核CPU下启用多线程最终总的计算计算一样,因为CPU在同一时间,只能服务于一个线程, 在单核CPU下运用多线程仅仅能实现快速响应用户的请求,避免因io或网络阻塞

航天飞哥的博客 1万+

多核CPU编程

多核CPU编程 共享状态式并发 涉及到可变状态(可修改的内存) 消息传递式并发 Erlang没有可变的数据结构 没有可变的数据结构 == 没有锁 没有可变的数据结构 == 能够轻松并行 面向并发编程 1 如何在多核CPU上使程序高效运行 使用大量进程 避免副作用 不要使用共享式的ETS或DETS表 ETS表可以被多个线程共享 ETS和DETS原本并不是为了独立使用而创建的,而是为了实...

weixin_42995287的博客 1244

多核编程与CPU亲和力

多核编程 多核编程和多线程编程还是有一些差异的,对于多线程编程,我们可以创建多个线程去处理业务,但是不会关心具体哪个进程运行在哪个CPU上,而多核的意思则是可以把特定任务绑定到特定的CPU上运行。这样的好处是什么?能够把重要的任务独立到一个CPU上运行,从而不受其他任务影响,提升该任务的响应速度。通过CPU绑定也能提升cache命中率,从而提高性能。具体到使用上,就是利用如下API绑定CPU: i...

程序猿Ricky的日常干货 1748
上一篇: 多核和多CPU编程——基础数据结构
下一篇: 多核和多CPU编程——并行计算模型
fpcc
fpcc 新星创作者: C/C++技术领域 新星创作者: C/C++技术领域
博客等级 码龄22年 4039粉丝 1188原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值