串行和并行的区别_并行程序设计导论-一、为什么需要并行计算

9a6ba1f1afafe9ed3a3b9c4bb0d01b33.png

为什么要构建并行系统

我们暂时将计算机的处理单元称之为“核”,想要提升一个“核”的运算速度,最基本的方式就是增加集成电路晶体管密度,但是这样在增加运算速度的同时也增加了热量的散失,并且在当今时代用空气冷却的集成电路的散热能力几乎达到极限

通过继续增快集成电路的速度来提高处理器性能的方法变得不再可行。

因此,我们需要另一种手段来利用不断增加的晶体管密度,它就是并行

与其建造更快更复杂的单处理器,不如在单个芯片上放置多个相对简单的处理器,我们将它称之为多核处理器

编写并行程序

通过事先编写好的应用将串行程序转化为并行程序变得越来越困难,因此,我们有必要编写并行程序。

如何编写并行程序

编写并行程序有两种广泛采用的方法:

  • 数据并行
  • 任务并行

不难理解,数据并行就是将待解决的数据分给各个核,在每个核分配到的数据集上,执行大致相同的操作

而任务并行是将待解决问题分为各个任务,把这些任务分给各个核去执行。

举个最基本的例子

  1. for(int i=0;i<100;i++){
  2. sum += a[i];
  3. }

我们可以将这100个数按照核的数目来分配工作,比如第一个核求和 0~20,最终由主核来对各个核计算的结果进一步计算。

这可以分为两个步骤:

  1. 将100个数分给各个核,各个核分别计算。
  2. 主核计算其他核得带的结果。

在第一步中,将100个数分别给各个核计算为数据并行。这整体又可以分为两个任务:各个核计算自己的结果并发给主核->主核接收其他结果,并计算总和。所以,它也是任务并行。

在各个核独立工作时,并行程序其实和串行程序差不多,但是核之间往往多需要协调工作,这就会很复杂,协调过程主要分为一下三种:

  • 通信
  • 负载平衡
  • 同步

这些以后都会深入讨论。

将会学什么

学习如何编写显示并行的程序。

目标:利用C语言和C语言的扩展(消息传递接口MPI、POSIX线程、OpenMP)

我们主要关注的两种并行系统是:共享内存系统和分布式内存系统。

并发、并行、分布式

他们的区别并没有统一的说法,但是大家都持有一种较为普遍的意见:

  • 在并发计算中,一个程序的多个任务在同一时段可以同时执行
  • 在并行计算中,一个程序通过多个任务紧密协作来解决问题。
  • 在分布式计算中,一个程序要与其他程序协作来解决某个问题。

我会努力更新质量更好的内容,不如关注一下我刚刚起步的公众号,一起进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值