一个 MFLOPS (megaFLOPS)等于每秒一佰万(=10^6)次的 浮点运算 ,
一个 GFLOPS (gigaFLOPS)等于每秒十亿(=10^9)次的浮点运算,
一个 TFLOPS (teraFLOPS)等于每秒一万亿(=10^12)次的浮点运算,(1太拉)
一个 PFLOPS ( petaFLOPS )等于每秒一千万亿(=10^15)袭铅搜次的浮点运算,
一个EFLOPS( exaFLOPS )等于每秒一佰京(=10^18)次的浮点运激拆算。
浮点计算峰值=处理器个数×处理器主频×每秒可进行的最高浮点运算次数(FMAD,乘加指令)
如下图所示:G80以及至今所有nvidia GPU的流处理器内部有两个ALU单元。
流处理器工作频率 x 流处理器数量 x 每流处理器的FLOPs数量(2个)=总数
每流处理器的FLOPs数量 == 指令吞吐率 = 2
sp可以做一个乘法一个加法
kepler:2880*0.745*2=4290Gflops频率无需x2 sp频率和核心频率相同
fermi: 512*0.650*2*2=1330Gflops 频率需x2 sp频率是核心频率的2倍
CUDA 中FLOPS的计算方法如下:
(1)统计您每个线程的计算次数
(2)将此值乘以您的线程总数
(3)统计出总时间(利用profiler或者自己计时),将2中的值(所有线程的计算次数)除以计算时间,您将得到每秒的计算次数。
(4)因为3中的值往往较大,所以大家一般使用GFlops来衡量(Giga float operations per second),
1G次运算 = 10 ^ 9次方次运算。
FLOPS: 全大写 ,指 每秒浮点运算次数 ,可以理解为计算的速度。是衡量 硬件 性能的一个指标。( 硬件 )
FLOPs: s小写 ,指 浮点运算数 ,理解为计算量。可以用来衡量算法/模型的复杂度。( 模型 ) 在论文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)
2017年,ICIR收录了NVIDIA发表的一篇论文,在这篇论文的附录里,NVIDIA详细的讲解了一下FLOPs的计算。
对于卷积层来说:
有人将其简化了一下:
感兴趣的同学可以移步 CNN模型所需的计算力(flops)和参数(parameters)数量是怎么计算的? - 知乎
在此推荐一个神器( pytorch ): torchstat
可以用来计算pytorch构建的网络的参数,空间大小,MAdd,FLOPs等指标,简单好用。
比如:我想知道alexnet的网络的一些参数。
只需要败世:
就能得到结果啦:
可以看到每一层都有结果!兼职是神器呀。
再附上一个常用网络的参数:
以及:
跑的有点远,收!
作者认为FLOPs是一种简介的测量指标,是一个近似值,并不是我们真正关心的。我们需要的是直接的指标,比如速度和延迟。
图c是经典小网络在GPU上的MFLOPs与速度(Batches/sec)的关系。 图d是经典小网络在ARM上的MFLOPs与速度(Batches/sec)的关系。
我们可以发现, 具有相似的FLOPs的网络,执行的速度却不一样 。有的相差还挺大。
使用FLOP作为计算复杂度的唯一指标是不充分态枯启的。
为什么不能只用FLOPs作为指标呢?
作者认为有如下几帆如个原因:
具体参见这篇文章: 轻量级神经网络“巡礼”(一)—— ShuffleNetV2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)