CPU TFLOPS 计算

2020-03-09  本文已影响0人  MatrixOnEarth

深度学习任务是一个计算密集型任务,所以很关注计算设备的算力指标,因为目前深度学习还是以float32为主流,所以落实到具体指标,就变成了大家都很关心TFLOPS(Tera FLoat point OPerations per Second),这里,浮点操作指的就是浮点乘法和加法操作。这个在GPU上是明码写在spec里可以查的,但CPU目前并不会在spec中暴露TFLOPS指标。一种方法可以通过跑BLAS的benchmark来测量的,但这个一是需要一定的操作成本,二是受软件优化的影响(所以,如果出了问题就容易不知道这是硬件能力不行还是软件优化没到位)。需要一个对硬件能力的直接估计。
在深度学习任务中,计算量的绝大部分是由协处理器(co-processor)来完成的(如SSE,AVX2,AVX-512),更具体地,是由FMA(Fused Multiply-Add)单元完成的。所以对CPU的TFLOPS估计一般可以通过以下公式来达成:
FLOPS = frequency * fma\_number * operators\_per\_clk

FMA做了啥?
FMA指令里做了以下操作。这里这些向量的长度由AVX寄存器长度决定,比如AVX-512就是16个float。 FMA每个clock可以做完一个以下操作,这里\vec{o}\vec{a}\vec{b}\vec{c}都是长度为16的向量。
\vec{o} = \vec{a}*\vec{b} + \vec{c}

举个栗子
Xeon Skylake 8180,一个socket有28个core,每个core有一个AVX-512协处理器,每个AVX-512协处理器配有2个FMA,每个FMA每clock可以处理512 bit / 8 / 4 = 16个单精度浮点乘加操作。所以:

frequency可以通过查spec得到,如下:


频率表

所以单socket的峰值TFLOPS为:



所以一个dual-socket Skylake 8180的node的峰值TFLOPS应为:
上一篇下一篇

猜你喜欢

热点阅读