《并行算法设计与性能优化》——简单理解

前言,下周开始将会开启新一段旅程,并行计算的领域。对未来的憧憬,都是假象;前期的技术累计,也不一定用的上。
当然,其实就是打算写一个系列出来,学习的内容还是刘工的并行计算加速,也是浅尝辄止,希望从宏观的角度去了解并行计算的领域。
1,为什么存在并行计算的概念?运算单元当然是越快越好,无论是CPU,GPU。并行计算的热起来,也差不多以下三个原因。1)CPU加速差不多到头了,接下去继续加速,成本和难度也会增加;2)多核技术普及;3)ANN应该也有点功劳。
2,什么是并行计算。我的理解,以前是一个人搬砖,现在是多个人一起搬砖。并行计算的目标是什么。并行或者向量化技术的首要任务是尽可能发挥硬件提供的全部算力,以减少延迟(更快地完成计算任务)或者提高吞吐量(在相同的时间内完成跟多的任务)。说白了,就是尽可能减少模块等待,谁也别闲着。
3,如何选择合适的算法。标准就是复杂度计算,常用的方法就是时间负责度,空间复杂度和实现复杂度。实现复杂度有计算复杂度,仿存负责度,指令复杂度。在这里插入图片描述4,分析模块之间的相互关系计算机内部组成差不多就是类似上述描述的。其实就是多个多级别的流水线在数据搬运和数据计算的事情。现在就是遇到很核心的问题,哪些模块必须串行,哪些模块并行之类的问题。作者定义为依赖性分析,分为指令依赖和循环依赖,我到时觉得可以分为指令先后顺序依赖,和数据前后顺序的依赖。在这里插入图片描述在这里插入图片描述5,如何理解并行计算以及加速。从我目前的认知来说,可以从两个角度,一个是从指令集和数据调度方面来理解,一个是从算法和应用逻辑角度。6,指令集角度。Enmmm.这个问题,先建模。无论是并行计算还是串行计算,都是存储和运算单元之间相爱相杀。CPU负责的指令搬运,指令解析,指令执行,结果回写。硬件单元就是内存,运算逻辑单元。在冯诺依曼架构里面,L1,L2,内存这些都是存储单元,为了CPU的指令快速获取数据设计的。并行计算也是如此,系统内部存在指令集的流水线,数据搬运的问题。1)运算单元入手,把指令流水线拉长,把一个模块切分多个,这样一个小块在干活的时候,其他小模块也不用闲着。指令多发射,说白了,就是不停的下发任务,让硬件单元不闲着。2)减少指令等待。乱序执行,分支预测。3)缓存技术,文中主要还是阐述了CPU的缓存技术。估计不同的架构不一样吧4)SIMD在这里插入图片描述6,从算法层面讲优化,从算法层面对应用程序抽象,数据流经过控制流之后,输出结果。划分策略:主要还是数据划分或者是任务划分两类,原则是数据流和任务不相关,减少数据流的内部通信。通信,因为通信是并行算法引入的额外开销消耗 ,如果能够减少这种消耗就能提高并行效率。各种方法各有千秋,具体可以看我之前写的关于锁的内容。结果归并 ,任务切分之后,最后执行的结果归一化,这个部分是额外的开销。应用场景实际应用中,我们需要考虑单核 多核,GPU等各个因素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值