有关FLOPS的定义与计算

有关FLOPS的定义与计算,第1张

FLOPS(即“每秒 浮点运算 次数”,“每秒峰值速度”),是“每秒所执行的 浮点 运算次数”(floating-point operations per second)的缩写。它常被用来估算电脑的执行效能,尤其是在使用到大拍历量浮点运算的 科学计算 领域中。正因为FLOPS字尾的那个S,代表秒,而不是 复数 ,所以不能省略掉。

一个 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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12411435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存