Non-Blocking Simultaneous Multithreading:Embracing the Resiliency of Deep Neural Networks阅读

Paper title:Non-Blocking Simultaneous Multithreading:Embracing the Resiliency of Deep Neural Networks
Publication:MACRO’20
这篇文章是提出了一个可以在运行时进行加速的方法,争对的是量化后的INT8矩阵,文中提出在模型的推理中,因为RELU的使用等原因,模型中常常会出现很多的零值,对INT8也会有高四位为零或第四位为零的情况,如下图:没有描述
在这些主流模型中,只有大约20%的运算是纯8bit8bit的,其它要么有高四位零第四位零,要么全部是0。
争对这种情况,本文提出了一种方法,以向量内积为例:
O = ∑ i = 0 K w i x i = ∑ i = 0 K / 2 − 1 w i x i + ∑ i = K / 2 K − 1 x i w i O=\sum_{i=0}^{K}w_ix_i=\sum_{i=0}^{K/2-1}w_ix_i+\sum_{i=K/2}^{K-1}x_iw_i O=i=0Kwixi=i=0K/21wixi+i=K/2K1xiwi
只要把右边的两个式子并行做,这样不就能并行了吗,顺便也能说我们这是多线程呀。
还是没有描述
这张图就是大抵流程,中间的后文中没有使用就是把左转化成了右。
但是原来的两个8
8的乘法该怎么办呢,现在只有一个乘法器,这就是本文体系结构的重点。
先直接给他的体系结构的设计和使用的对应算法吧,我觉得足够简单直白了。
设计
在这里插入图片描述
您要是愿意看,我估计看个几分钟就能看懂,不行的话就看看下面这张。
在这里插入图片描述
这个对应了算法中的{if all are non-zero}的else情况,使用移位计算8*8乘法。
x 0 x_0 x0设为低四位, x 1 x_1 x1设为高四位, w w w直接原封不动的传进来,毕竟这个乘法器其实是两个(5,8)乘法器组合而成的嘛,于是输出就是 y = x [ 0 , 3 ] ∗ w + x [ 4 , 7 ] ∗ w ∗ 16 y=x_{[0,3]}*w+x{[4,7]}*w*16 y=x[0,3]w+x[4,7]w16
在这里插入图片描述
如果每个数都是非零的,那么不好意思,对8*8的运算,你必须要缩减到4*8。具体方法呢,又分两种情况,如果一个数前四位不全是0(不是0000 ****),那保留的就必定是前四位,然后根据第五位决定一下四舍五入,对应算法中的 i f ( M S B ( x i ) ! = 0000 ) if(MSB(x_i)!=0000) if(MSB(xi)!=0000)
在这里插入图片描述
如果前四位全是0,那就保留后四位运算啦,就是这样。
至于提出的SySMT就十分十分经典,基本没变。不过提出了一个重排挺有意思的,因为我懒得看Evaluation我就没仔细看重拍的效果了,以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值