项目笔记:1.并发与并行的区别

#最近做的项目涉及高性能计算HPC,故开一个系列帖子当笔记来记录一些基础知识。

并行parallel和并发concurrent其实并不是一个冲突的概念,两者虽有区别但亦有重叠。

知乎上有个高赞回答用吃饭接电话来举例,非常生动:

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行
并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。所以我认为它们最关键的点就是:是否是『同时』。
链接:https://www.zhihu.com/question/33515481/answer/58849148

还有一个例子也很生动:
Erlang 之父 Joe Armstrong用排队倒咖啡的例子来说明并发和并行的区别
由上图可以看出,并发例子的一个咖啡机指的是一个核,而并行例子是两个核或多个核。在并发情形里,因为只有一个咖啡机,所以只能两队人交替去使用,而并行则是两个队可以同时在两个咖啡机上倒咖啡。

所以如果是单核CPU而又有多个任务要执行的话,那么只能是并发,而如果有多核CPU或者多CPU的话,那么就可以并行执行,也可以并发执行,事实上,支持并行的话,肯定支持并发。当然,并发和并行都可以支持多线程,把上述话里的多任务换成多线程亦可以区分并发和并行的区别。

具体来说:

并发是和顺序执行相对立的。顺序sequential是只能在上一个任务A执行完后才能开始执行任务B;而并发concurrent则是无论任务A是否执行完,都可以开始执行任务B。在排队倒咖啡例子里,无论旁边那个队有没有接完咖啡,另一个队的人都可以去穿插在里面接咖啡(而现实生活一般是交替进行)

并行是和串行执行相对立的。串行serial是只有一个处理单元,只能一个任务一个任务的执行,比如要在单核CPU上执行多任务,那就是顺序、并发、串行执行,而不能并行执行;而并行执行parallel则是有多个处理单元同时执行多个任务。

并发与并行并不是互斥的概念,只是前者关注的是任务的抽象调度、后者关注的是任务的实际执行。

GPU有多个多流处理器SM(streaming multiprocessor,又叫GPU大核),如两个、四个、八个。而每个SM里又有多个最基本的处理单元:流处理器SP(streaming processor,也称为CUDA core),可以多达128、192个。因为GPU架构和CPU不一样,两者的处理单元不是一个东西,所以GPU没有多少核的说法,SM也不等同于CPU的核。
对应的物理结构就是Grid-----Block----Thread

GPU物理结构图
但是从GPU有众多处理单元可以看出,GPU天然适用于并行计算,这也是为什么提到并行计算总是要用到GPU。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值