Skip to content

Commit

Permalink
Update readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Ewenwan authored Jul 23, 2020
1 parent 09ea9dc commit 2690618
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions CNN/HighPerformanceComputing/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
基本的网络拓扑和组织可以使用一个简单的总线拓扑,
在性能很高的环境中,网状网络系统在主机之间提供较短的潜伏期,
所以可改善总体网络性能和传输速率。
[让深度学习更高效运行的两个视角 | 计算量和访存](https://zhuanlan.zhihu.com/p/33693725)

[海思NNIE之Mobilefacenet量化部署](https://github.com/Ewenwan/nniefacelib)

Expand Down Expand Up @@ -92,6 +93,29 @@ snpe是高通开发的一个推理框架,支持GPU推理,之前尝试分析

当然,这些框架为了兼容性,都实现了CPU的推理功能。毕竟cpu推理兼容性更好,特别是现阶段几乎所有的手机端都是采用ARM的cpu。因此使用cpu的推理方案兼容性会更好。

# 背景

Roofline Model。

这个Model是指计算机上的一个应用,它占用了两类最主要的资源:算术逻辑单元的计算资源,存储器的带宽资源。这里的计算资源以FLOPS来表示;带宽资源以byte/s表示。

Roofline model是说什么呢?横轴是Operational Intensity,就是计算的密度,单位是FLOPS/byte;纵轴是performance,也就是性能,单位是FLOPS。

图中有一条折线,这个折线开始的时候是随着计算密度的增加而增加,最终会稳定在一个固定的performance上。这个意思是:当这个应用程序的计算密度大于一定值之后,将会变成一个受算术逻辑单元的计算量所限制的程序;而这个计算密度如果小于一定值,将会变成一个受存储器带宽所限制的程序。

这里折线的拐点非常重要。这个拐点跟硬件很相关,它实际上表示的是硬件的理论计算能力和它的内存带宽之间的一个比值。

举两个具体的例子,第一个是矩阵乘矩阵,矩阵C等于A乘B,而A跟B分别是一千乘一千的矩阵。假设存储和计算都是用float 32位来表示,这样一个计算将会做1000乘1000乘1000的浮点乘加,也就是2G FLOPS的运算。我们要读取A和B,然后计算出来C,把它写回去,最少的存储器访问就是三个矩阵的大小,也就是12个MB。

另外一个是矩阵乘向量,也就是矩阵A乘向量B,等于向量C,这时候维度还是1000的情况下,它的计算量就是1000乘1000的浮点乘加,也就是2M。而存储器访问的话最少大约是1000乘于1000个浮点数,也就是4MB。

可以明显地看到上面乘矩阵的操作,它的计算量是2G,访存量是12M,那么它的这个计算量除以访存量,也就是刚刚提到的计算密度,大概是200左右。下面这个矩阵和向量中,它的计算量是2M,访存量是4M,那它的计算量除以访存量大约就只有0.5,显然这两个就是非常不同的程序。

上面矩阵乘矩阵,是一个典型的受计算量约束的程序;而下面矩阵乘向量则是一个典型的受存储器带宽所约束的程序。

小模型部署在这些硬件上,通常都是被存储带宽所限制住了,而不是被计算量所限制住。



## 卷积计算优化
目前,卷积的计算大多采用间接计算的方式,主要有以下三种实现方式:
Expand Down

0 comments on commit 2690618

Please sign in to comment.