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 给出了其它单位的值.
单位 |
中文 |
英文 |
值 |
---|---|---|---|
\(\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\) 来分析. 通常地, 计算强度定义为
当评估计算平台性能时, \(\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).
由 图 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}\).
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}\).