FLOPS的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwqjoy/article/details/83539439

        在描述GPU的性能的时候,我们常常用到FLOPS进行描述。FLOPS是Floating-point Operations Per Second的简写,即每秒所能够进行的浮点运算数目(每秒浮点运算量). 在以往形容GPU的运算性能的时候也常常用到其他单位,比如Triangles Per Second每秒所能够渲染的三角型数目,以及Pixels Per Second 每秒所能够渲染的像素个数等等。然而我们为什么会用到FLOPS这样表征计算能力的单位去描述GPU的能力呢?

吞吐率就如同你家里的水管, 每秒可以流出多少立方的水, 每秒浮点计算数(flops)也是衡量吞吐率的一个单位, 通过折算到具体的浮点操作数量上.


假设有m * n的矩阵A, 和n * o的矩阵B, 则最终会形成m * o的矩阵C (C = A * B)
其中n是A的宽度, 也是B的高度.

最终总的运算量需要m * o * n次乘加.
将1次乘加看成两次运算(一次乘法, 一次加法),
则最终需要 2 * m * o * n次运算, 这是总的浮点数运算量.

浮点数运算量(Float Operations, FLO)有了, 则每秒浮点运算量(Float Operations Per Second, FLOPS)等于浮点数运算量除以时间.

一个MFLOPS(megaFLOPS)等于每秒一佰万(=10^6)次的浮点运算,

一个GFLOPS(gigaFLOPS)等于每秒十亿(=10^9)次的浮点运算,

一个TFLOPS(teraFLOPS)等于每秒一万亿(=10^12)次的浮点运算,(1太拉)

一个PFLOPSpetaFLOPS)等于每秒一千万亿(=10^15)次的浮点运算,

一个EFLOPS(exaFLOPS)等于每秒一佰京(=10^18)次的浮点运算。

CUDA 中FLOPS的计算方法如下:

(1)统计您每个线程的计算次数
(2)将此值乘以您的线程总数
(3)统计出总时间(利用profiler或者自己计时),将2中的值(所有线程的计算次数)除以计算时间,您将得到每秒的计算次数。
(4)因为3中的值往往较大,所以大家一般用GFlops来衡量(Giga float operations per second), 1G次运算 = 10 ^ 9次方次运算。

猜你喜欢

转载自blog.csdn.net/zwqjoy/article/details/83539439