计算访存比(又称计算强度或计算密度)是衡量程序计算效率的核心指标,表示单位访存量对应的计算量(通常以 FLOPs/Byte 为单位)。以下是其关键概念与应用分析:
一、定义与公式
计算访存比 = 总计算量(FLOPs) / 总访存量(Bytes)
• 计算量:指程序执行的浮点运算次数,如卷积中的乘加操作(MAC)。
• 访存量:指程序运行期间从内存读取和写入的数据总量,包括输入、权重和中间结果。
二、意义与分类
-
判断程序类型
• 计算密集型(高计算访存比):如传统卷积(Conv)、全连接层(GEMM),其计算量远高于访存量,性能受计算单元限制。
例:ResNet50中传统卷积的计算访存比可达数百(如486.6)。 • 访存密集型(低计算访存比):如Depth-wise卷积、Eltwise操作,性能受限于内存带宽。
例:MobileNet中的Depth-wise卷积计算访存比仅约8~9。 -
硬件性能评估
• 通过Roofline模型分析程序在特定硬件上的性能上限:若计算密度高于硬件“山脊点”,则为计算瓶颈;反之则为内存瓶颈。
三、不同算子的计算访存比示例
算子类型 | 计算访存比公式 | 典型场景数值 | 特点 |
---|---|---|---|
传统卷积 | 180~486(ResNet50) | 高计算强度,适合优化数据重用 | |
Depth-wise卷积 | 7.6~8.9(MobileNet) | 低计算强度,需减少内存访问次数 | |
全连接层(GEMM) | 60~768(BERT) | 高计算强度,需优化矩阵分块策略 |
四、优化策略
-
提升计算密度
• 数据重用:通过分块(Tiling)减少重复访存,如GPU中共享内存优化。 • 指令级并行:利用硬件特性(如Intel AMX的Tile寄存器)隐藏访存延迟。 -
硬件适配
• GPU优化:调整线程块数量与大小,使计算访存比高于硬件带宽与算力比(如NVIDIA GPU需结合计算强度选择优化方向)。 • 专用加速器设计:根据模型计算访存比选择内存层级结构(如片上Cache、寄存器)。
五、实际应用场景
• 模型设计:选择高计算强度的算子(如GEMM替代Depth-wise卷积)以适配算力强的硬件。 • 推理框架优化:针对不同算子类型采用混合优化策略,如卷积使用Winograd算法,全连接层使用分块矩阵乘法。
通过计算访存比分析,开发者可精准定位性能瓶颈,指导算法与硬件的协同优化。