CPU TFLOPS 計算
姚偉峰
yaoweifeng0301@126.com]
http://www.cnblogs.com/Matrix_Yao/
深度學習任務是一個計算密集型任務,所以很關注計算設備的算力指標,因為目前深度學習還是以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估計一般可以通過以下公式來達成:
FMA做了啥?
FMA指令里做了以下操作。這里這些向量的長度由AVX寄存器長度決定,比如AVX-512就是16個float。 FMA每個clock可以做完一個以下操作,這里
,
,
和
都是長度為16的向量。
舉個栗子
Xeon Skylake 8180,一個socket有28個core,每個core有一個AVX-512協處理器,每個AVX-512協處理器配有2個FMA,每個FMA每clock可以處理個單精度浮點乘加操作。所以:
所以單socket的峰值TFLOPS為:
。
