漫谈高性能计算与性能优化:访存

请移步至:漫谈高性能计算与性能优化:访存 - 知乎 (zhihu.com)

1. 并行算法
        目前单核处理器性能已经碰到了瓶颈,想通过单核上的优化去显著提高算力已经是一个非常困难的事情了。但是,现在对算力的需求却日益剧增,科学与工业领域需要更多的算力进行仿真模拟,游戏渲染需要更多的算力满足人的娱乐需求,人工智能领域需要更多的算力进行模型训练和推理服务。因而,对算力的巨大需求促使了英伟达的股价近十年内一轮又一轮地暴涨以及目前异构加速器遍地开花。所有人都知道这是块肥肉,大家都想吃上一口。而从最底层角度而言,所有的一切都源于一件事情,并行算法可以将单核的任务划分到多核异构设备上从而实现加速。这个事情保证了,在一个可以并行的算法上,计算核心越多,理论上,你的代码就能跑地越快,人类社会的发展也能越快。
        不过,说实话,我一直觉得并行算法是一个非常难的课题并行算法的思维是非常反人类的

2. 性能优化方法论
这一节聊聊性能优化方法论。当不同的人谈论性能优化的时候,脑子里面想的东西还不一定是同一个事。当搞网络的人谈性能优化,想的可能是怎么降低网络延时,想的是网络协议和socket相关的东西。当搞数据库的人谈性能优化,想的可能是怎么减少查询数据库的耗时,想的可能是多级索引,尽可能地减少对磁盘的访问。当搞HPC的人谈性能优化,估计脑子里立马就涌现出cache、分块、SIMD相关的概念。所以这里还是得说明白,这篇文章里面讲的性能优化是HPC相关从业者脑子里的那种性能优化。
 
2.1. 减少数据搬运。

        现代计算架构都是多级存储,需要一级一级地将数据往计算单元上搬。如何减少数据搬运,最主要的手段就是分块,或者说tiling。之前在我的博客里面详细地介绍了GEMM中的三级分块策略,具体可以看看下面链接。

有了琦琦的棍子:深入浅出GPU优化系列:GEMM优化(一)816 赞同 · 77 评论文章​编辑

 2.2. 减少数据访存延时。 

        首先是减少bank冲突, 

有了琦琦的棍子:深入浅出GPU优化系列:GEMM优化(三)217 赞同 · 78 评论文章​编辑

其次是软流水有的时候叫double buffer,有的时候叫ping pong操作,我觉得跟预取也差不多,其思想都是一样的,就是访存和计算错开,让流水更加顺畅,减少计算等待访存导致的空泡。 

最后的技巧其实跟前面的软流水是一个道理,就是切分更多的块,启动更多的warp来掩盖访存延时。 

Sparse GPU Kernels for Deep Learning​arxiv.org/abs/2006.10901​编辑

2.3. 保证负载均衡

3. 性能分析
本节介绍性能分析,也就是profiling。这个部分实在是太过于重要,所以必须单独拎出来放在一节讲。在分析任何具体的问题时,都必须做充足的profiling。其实当我们谈优化的时候,需要做的工作,就是profiling找到性能瓶颈,对性能瓶颈优化,再profiling找到性能瓶颈,再对性能瓶颈优化。不断重复,直到接近硬件瓶颈或者达到想要的目标即可。
4. 小结和感悟
4.1. 经验or完善的知识体系。 

4.2. 通用代码or针对性优化。 

4.3. 正确地评估和认识。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值