FLOPs
FLOPs:floating point operations的缩写(s表复数),意指浮点运算次数,理解为计算量。可以用来**衡量算法/模型的复杂度。该值越大,表示该网络的计算复杂度越高。**FLOPs没有考虑几个对速度有相当大影响的重要因素——MAC(Memory Access Cost)\并行度\平台卷积层
FLOPS
FLOPS:floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
还有其他的单位:
一个MFLOPS(megaFLOPS)等于每秒一百万(=10^6)次的浮点运算,
一个GFLOPS(gigaFLOPS)等于每秒十亿(=10^9)次的浮点运算,
一个TFLOPS(teraFLOPS)等于每秒一万亿(=10^12)次的浮点运算,(1太拉)
一个PFLOPS(petaFLOPS)等于每秒一千万亿(=10^15)次的浮点运算,
一个EFLOPS(exaFLOPS)等于每秒一百京(=10^18)次的浮点运算,
一个ZFLOPS(zettaFLOPS)等于每秒十万京(=10^21)次的浮点运算。
GFLOPS是Paper里比较流行的单位。
GFLOPS(Giga Floating-point Operations Per Second)每秒可做浮点操作的数量,是衡量计算设备浮点运算能力的一个指标。**等价于运算速度。该值越大,说明硬件性能越高,速度越快。**量级通常在M(10e6),G(10e9),T(10e12)。例如:9.6 GFLOPS 表示每秒可做 9.6 G 次浮点操作(96亿次浮点操作)。
FLOPS局限性:FLOPS并不能完全反映硬件的计算性能,因为FLOPS并不能反应出许多对执行效能有影响的因素。例如:I/O的效能、内存的架构、快取内存一致性(cache coherence)、…等。
MACS
(Multiply–Accumulate Operations) 即乘加累积操作数,常常与FLOPs概念混淆,**实际上1MACs包含一个乘法操作与一个加法操作,大约包含2FLOPs。通常MACs与FLOPs存在一个2倍的关系。**每秒执行的定点乘累加操作次数的缩写,它是衡量计算机定点处理能力的量,这个量经常用在那些需要大量定点乘法累加运算的科学运算中,记为MACS。一个 GMACS等于每秒10亿 (=10^9) 次的定点乘累加运算
MAdds
MACs全称Multiply–Accumulate Operations,即乘加累积操作,**1MACs包含一个乘法操作与一个加法操作,大约包含2FLOPs。**通常MACs与FLOPs存在一个2倍的关系。MACs和MAdds是同一个含义。
关于神经网络利用率
假设用一个简单的CNN网络做forward时,对于硬件资源的利用情况称之为利用率,所以利用率的计算简单描述为:
- 计算网络的计算量,通常是乘累加的次数
- 测量网络运行耗时
- 乘累加次数除以耗时, 计算该网络的GFLOPS
- 用计算的网络GFLOPS除以硬件资源的理论GFLOPS,即利用率
关于神经网络的计算量
网络前向计算时,卷积运算占据耗时90%以上。重点关注下如何计算卷积的运算量。为简化问题,以下讨论认为:卷积采用滑动窗口且,忽略非线性计算的开销。
假设对于CNN网络,有卷积层的参数包括:输入 feature map 的 Cin,宽Hin,高Win,输出 feature map 的 Cout,宽Hout,高Wout,卷积核的尺寸K,卷积核通道等于Cin,卷积核个数等于Cout。则该卷积核与feature map做卷积的运算量为:
其中的1表示偏置量。偏置值每个卷积核对应1个,共有Cout 个。(wx+b)
将 FLOPS 除以 10e9 得到 GFLOPS。