矩阵乘法优化的常见思路(并行数值计算基础)

CPU 提速思路

本科教材里介绍的 CPU 的设计里用来提升效能(用有限的晶体管)有如下几个:

  1. cache:利用程序对内存的访问”一般来说“是连续的,具有局部性的,于是预取(prefetch)被访问的内存区域之后的一段区域到 cache 里。这样接下来的内存访问访问 cache 就可以了。cache 位于 CPU 芯片内部,内存和CPU 是不同的芯片,所以访问 cache 更快。
  2. pipeline:把 CPU 里的晶体管分组。每条指令的执行顺序使用这些组。这样任何一组被用来执行一条指令之后,这条指令由下一组接手,而当前组不闲着,而是开始执行下一条指令。这个路子是利用大部分程序都在顺序执行一串指令(指令的局部性)。不过,如果程序里有选择分支或者循环,并不是简单地顺序执行一系列指令,这个路子就不灵了。
  3. vectorize:给 CPU 增加一些专门用来快速执行向量操作的指令。每条指令调动更多的晶体管,并发操作向量里的多个元素。和 pipeline 一样,vectorize 是并发思路在 CPU 里的最细粒度实现。
  4. multi-core:受限于制造工艺,能塞进一个 CPU 里的晶体管数量有限,所以一个 CPU 芯片里塞多个 CPU,甚至一台计算机里塞多个芯片。这里每个 CPU 叫一个 core。

接下来我们看看如何利用这些 CPU 特点加速矩阵乘。GPU 和 TPU 的体系结构虽然和 CPU 有很大区别,但是基本思路也都不超过上述范围。

 

利用 Cache:改变循环的嵌套顺序

我们写一个三重循环计算矩阵乘 A B = C 的时候,一般会写

for i in 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值