1.5. 计算复杂度/性能

1.5.1. 操作数相关指标

操作数或运算次数通常用于衡量处理器的性能, 也可以用于衡量算法的复杂度.

当用于衡量处理器性能时, 通常用 操作数/每秒 (Operations Per Second, OPS)表示处理器每秒所能执行的操作次数, 用 浮点运算次数/每秒 (FLoating-point Operations Per Second, FLOPS) 表示处理器每秒所能执行的浮点运算次数. 有时也用 OPS@FPx 来表示处理器的 x 位浮点数处理能力, 如 1TOPS@FP16 表示半精度浮点数下的浮点数运算能力为 1TOPS, 其中, FP 表示浮点数(Float Point) \(1\rm{TOPS}=10^{12} \rm{OPS}\), 不加说明时, \({\rm FLOPS} = {\rm OPS}@{\rm FP}32\), 下 表 1.9 给出了其它单位的值.

表 1.9 常用数量单位及字母表示

单位

中文

英文

\(\rm M\)

一百万

Mega

\(10^6\)

\(\rm G\)

十亿

Giga

\(10^9\)

\(\rm T\)

一万亿

Tera

\(10^{12}\)

\(\rm P\)

一千万亿

Peta

\(10^{15}\)

\(\rm E\)

Exa

\(10^{18}\)

\(\rm Z\)

Zetta

\(10^{21}\)

\(\rm Y\)

Yotta

\(10^{24}\)

提示

通常用 \({\rm FP}64\) 表示64位(bit)双精度浮点数, \({\rm FP}32\) 表示32位(bit)单精度浮点数, \({\rm FP}16\) 表示16位(bit)半精度浮点数, \({\rm FP}8\) 表示8位(bit)浮点数, \({\rm INT}64\) 表示64位(bit)整数等等.

一般地, \(1{\rm OPS}@{\rm FP}64 = 2{\rm OPS}@{\rm FP}32 = 4{\rm OPS}@{\rm FP}16 = 8{\rm OPS}@{\rm FP}8\), 不过不是总能成立, 有的处理器略有差异. 此外, 一个 \(1{\rm OPS}@{\rm FP}16\) 的处理器的16位整数运算性能略大于 \(1{\rm OPS}@{\rm INT}16\).

当用于衡量算法的复杂度时, 通常用 操作数 (OPerations, OPs)表示算法所需要执行的操作次数, 用 浮点运算次数 (FLoating-point OPerations, FLOPs)表示算法所需要执行的浮点运算次数.

1.5.2. 处理器的衡量指标

传统指标

  • 操作数(Operations Per Second, OPS): 即每秒执行的操作次数

  • 浮点运算次数(FLoating-point Operations Per Second, FLOPS): 即每秒执行的浮点运算次数

  • 单位: 一百万(Mega, \(10^6\)), 十亿(Giga, \(10^9\)), 一万亿(Tera, \(10^{12}\)), 一千万亿(Peta, \(10^{15}\))

1.5.3. 计算平台与模型性能指标

衡量一个计算平台或模型的性能指标可以通过计算量(算力/运算量) \(\pi\) 与访存量(内存读写带宽/内存读写量) \(\beta\) 以及计算强度 \(\mathcal I\) 来分析. 通常地, 计算强度定义为

\[{\mathcal I} = \frac{\pi}{\beta} \]

当评估计算平台性能时, \(\pi\) 表示计算平台的算力, 即每秒可执行的运算次数 (Operations Per Second, OPS), \(\beta\) 表示计算平台内存带宽, 单位通常为 bps(bit per second); 当评估模型性能时, \(\pi\) 表示模型计算量, 即需要执行的运算次数 (OPerations, OPs), \(\beta\) 表示内存读写量, 单位通常为字节 B (Byte).

举个例子, 图 1.44 给出了SSD300网络的各层计算量与内存访问量分析结果, 包括输入输出大小, 参数量 (params), 乘累加量 (Fused multiply–add, Madd), 浮点数运算量 (FLOPs) 以及内存读写量 (MemR+W).

LeNet

图 1.44 SSD 300 网络计算量与内存访问量分析

图 1.44 知, SSD300网络含有 \(26,285,486\) 个参数, 内存占用为 \(207.65{\rm MB}\), 总乘累加次数为 \(62.78{\rm GB}\), 总浮点运算次数为 \(31.44{\rm GFLOPs@FP32}\), 见 表 1.10. 即对于每张 \(300\times 300\) 大小的图片, 前向推理一次需要的浮点数运算量约为 \(31.44{\rm GFLOPs}\) 访存量为 \(542.79{\rm MB}\), 故 SSD300 模型的计算强度为 \({\mathcal I}_{ssd} = 31.44{\rm GFLOPs} / 542.79{\rm MB} = 4\times 31.44e9 / 542.79e6 = 231.69 {\rm FLOPs/Byte}\).

表 1.10 SSD300网络参数与计算量

Total params

Total memory

Total MAdd

Total FLOPs

Total MemR+W

26,285,486

207.65MB

62.78G

31.44G

542.79MB

昇腾处理器Ascend 310的开发套件的内存为8GB, 远大于SSD300网络的内存占用量(207.65MB), 内存规格为LPDDR4x, 带宽为 \(3200{\rm Mbps}\). 昇腾处理器Ascend 310的浮点数处理能力为 \(8{\rm TOPS@FP16}\), 即 \(8{\rm TFLOPS@FP16}\), 亦即 \(4{\rm TFLOPS@FP32}\). Ascend 310 处理器的计算强度为 \({\mathcal I}_{Ascend310} = (4\times 4e12) / (3200e6/8) = 40000 {\rm FLOPs}/{\rm Byte}\). 由此可知, Ascend 310 处理器的计算强度约为SSD300模型的计算强度的 \(172\) 倍. 然而, 计算平台的带宽为 \(3200{\rm Mbps}\), 即每秒读写数据量最多为 \(400{\rm MB}\), 而SSD网络的访存量为 \(542.79{\rm MB}\).