计算访存比(又称计算强度或计算密度)是衡量程序计算效率的核心指标,表示单位访存量对应的计算量(通常以 FLOPs/Byte 为单位)。以下是其关键概念与应用分析:


一、定义与公式

计算访存比 = 总计算量(FLOPs) / 总访存量(Bytes)
计算量:指程序执行的浮点运算次数,如卷积中的乘加操作(MAC)。 • 访存量:指程序运行期间从内存读取和写入的数据总量,包括输入、权重和中间结果。


二、意义与分类

  1. 判断程序类型
    计算密集型(高计算访存比):如传统卷积(Conv)、全连接层(GEMM),其计算量远高于访存量,性能受计算单元限制。
    例:ResNet50中传统卷积的计算访存比可达数百(如486.6)。访存密集型(低计算访存比):如Depth-wise卷积、Eltwise操作,性能受限于内存带宽。
    例:MobileNet中的Depth-wise卷积计算访存比仅约8~9。

  2. 硬件性能评估
    • 通过Roofline模型分析程序在特定硬件上的性能上限:若计算密度高于硬件“山脊点”,则为计算瓶颈;反之则为内存瓶颈。


三、不同算子的计算访存比示例

算子类型 计算访存比公式 典型场景数值 特点
传统卷积 180~486(ResNet50) 高计算强度,适合优化数据重用
Depth-wise卷积 7.6~8.9(MobileNet) 低计算强度,需减少内存访问次数
全连接层(GEMM) 60~768(BERT) 高计算强度,需优化矩阵分块策略

四、优化策略

  1. 提升计算密度
    数据重用:通过分块(Tiling)减少重复访存,如GPU中共享内存优化。 • 指令级并行:利用硬件特性(如Intel AMX的Tile寄存器)隐藏访存延迟。

  2. 硬件适配
    GPU优化:调整线程块数量与大小,使计算访存比高于硬件带宽与算力比(如NVIDIA GPU需结合计算强度选择优化方向)。 • 专用加速器设计:根据模型计算访存比选择内存层级结构(如片上Cache、寄存器)。


五、实际应用场景

模型设计:选择高计算强度的算子(如GEMM替代Depth-wise卷积)以适配算力强的硬件。 • 推理框架优化:针对不同算子类型采用混合优化策略,如卷积使用Winograd算法,全连接层使用分块矩阵乘法。

通过计算访存比分析,开发者可精准定位性能瓶颈,指导算法与硬件的协同优化。