1. DNN加速器中的互连功耗挑战
在当今AI芯片设计中,深度神经网络(DNN)加速器面临着越来越严峻的互连功耗问题。随着模型规模的扩大和计算并行度的提升,数据在芯片内部传输所消耗的能量已经超过了计算本身。这种现象在卷积神经网络(CNN)等数据密集型工作负载中尤为明显。
关键数据:现代DNN加速器中,互连功耗可占总功耗的40-60%,其中物理链路(physical links)的能耗占比尤为突出。
这种功耗瓶颈主要来源于比特翻转(Bit Transition, BT)带来的动态功耗。每次数据在链路上传输时,如果相邻比特位从0变为1或从1变为0,都需要对线路电容进行充放电,这个过程中消耗的能量与翻转次数成正比。在典型的128位宽链路上,每次传输可能产生数十次比特翻转,累积起来就成为不可忽视的功耗来源。
传统解决方案如列优先(column-major)数据排序可以带来约14%的BT降低,但这对于现代DNN加速器而言仍显不足。更高效的优化需要利用DNN计算的两个关键特性:
- 顺序不敏感性:卷积运算中的累加操作对输入数据的顺序不敏感,这为数据重排序提供了理论基础
- 数值分布特征:DNN中的权重和激活值往往呈现特定的数值分布模式,这为针对性优化创造了条件
2. 基于1-bit计数的排序原理
2.1 核心思想与技术优势
基于1-bit计数(又称population count或popcount)的排序技术,其核心思想是通过统计数据中"1"的个数来对传输数据进行智能排序。这种方法之所以有效,是因为:
- 相邻传输的数据如果具有相似的1-bit计数,它们的二进制模式通常也更接近
- 这种相似性会直接减少比特翻转次数,从而降低链路功耗
与传统的排序方法相比,1-bit计数排序具有以下独特优势:
- 计算复杂度低:仅需统计"1"的个数,无需完整的数据比较
- 硬件友好:可通过简单的组合逻辑电路实现
- 与DNN特性匹配:特别适合处理权重和激活值这类特定数据模式
2.2 精确排序单元(ACC-PSU)设计
精确的1-bit计数排序单元(ACC-PSU)采用三级流水线架构:
计数阶段(Popcount Stage):
- 使用4位查找表(LUT)计算每个输入元素的Hamming权重
- 通过加法器聚合部分结果,得到精确的1-bit计数值
前缀和阶段(Prefix Sum Stage):
- 生成1-bit计数的频率直方图
- 计算每个特定计数值的起始地址
索引映射阶段(Index Mapping Stage):
- 将输入数据索引分散到排序后的输出位置
- 传输单元根据排序索引重新排列数据
这种设计的创新之处在于完全避免了显式的比较操作,而是通过计数和地址计算来实现排序,大幅降低了硬件复杂度。实测表明,ACC-PSU可实现20.42%的BT降低,但仍有优化空间。
3. 近似排序单元(APP-PSU)的创新设计
3.1 近似计算的理论基础
在保持排序效果的前提下,APP-PSU引入了两个关键创新:
桶式分组策略:将精确的1-bit计数值分组到粗粒度的桶(bucket)中
- 例如对8位数据,将0-8的精确计数分为4个桶:{0,1,2}→桶0,{3,4}→桶1,{5,6}→桶2,{7,8}→桶3
桶内局部排序:同一桶内的元素保持原始顺序,仅在不同桶间进行排序
这种近似之所以有效,基于DNN运算的两个特性:
- 宏观有序性:只要保证高1-bit计数的数据整体排在低计数的后面,就能获得大部分BT降低收益
- 误差容忍性:卷积运算对输入顺序的细微变化不敏感,近似排序不会影响计算精度
3.2 硬件实现优化
APP-PSU在硬件实现上做了多项优化:
桶编码器简化:
- 用小型LUT实现精确计数到桶索引的映射
- 例如4个桶仅需2位编码,相比精确计数的4位表示,数据路径宽度减少50%
排序逻辑缩减:
- 排序单元的逻辑规模与桶数量而非计数值范围成正比
- 对于8位数据,从9个精确计数减至4个桶,逻辑复杂度大幅降低
组合优化:
- 综合工具可自动消除不影响桶索引的冗余逻辑
- 生成直接产生桶索引的简化电路
这些优化使得APP-PSU在22nm工艺下实现了:
- 35.4%的面积缩减(从3396μm²降至2193μm²)
- 37.3%的功耗降低(从2.28mW降至1.43mW)
4. 性能评估与结果分析
4.1 比特翻转降低效果
通过Python仿真和硬件实测,我们对比了四种数据排序策略:
| 排序策略 | 输入侧BT降低 | 权重侧BT降低 | 总体BT降低 |
|---|---|---|---|
| 非优化基线 | - | - | - |
| 列优先排序 | 16.2% | 12.5% | 14.4% |
| 精确排序(ACC) | 28.0% | 12.5% | 20.4% |
| 近似排序(APP) | 26.2% | 12.5% | 19.5% |
关键发现:
- 近似排序保留了精确排序95.5%的BT降低效果
- 权重侧BT降低有限,因为权重通常在训练后固定,排序空间较小
- 输入侧是主要优化目标,APP-PSU仍能实现26.2%的降低
4.2 硬件效率提升
在22nm工艺下实现的四种排序单元面积对比:
5×5卷积核面积对比(μm²): ┌───────────┬───────────┬───────────┬───────────┐ │ Bitonic │ CSN │ ACC-PSU │ APP-PSU │ ├───────────┼───────────┼───────────┼───────────┤ │ 3206 │ 3321 │ 3396 │ 2193 │ └───────────┴───────────┴───────────┴───────────┘APP-PSU的优势体现在:
- 面积仅为Bitonic排序网络的68.4%
- 比精确排序(ACC-PSU)减少35.4%的面积
- 功耗降低37.3%,同时保持95.5%的排序效果
4.3 端到端功耗影响
在完整PE(Processing Element)中的实测表明:
- 链路相关功耗降低16.48%
- 整体PE功耗降低4.58%
- 排序单元自身功耗仅增加1.43mW
功耗降低的分布特点:
- 数据缓冲区和控制逻辑受益明显(分别降低7.02%和1.32%)
- 卷积计算单元本身功耗变化较小,证明优化主要集中在数据传输环节
5. 实际应用中的经验与技巧
5.1 桶配置优化策略
在实际部署中,桶的数量和分组策略需要权衡考虑:
桶数量选择:
- 4桶配置:在8位数据下实现最佳面积-精度权衡
- 可扩展至6桶:当数据位宽增至16位时的推荐配置
非均匀分组:
- 根据实际数据分布调整桶边界
- 例如对ReLU激活后的数据,可增加低计数区的桶密度
动态配置:
- 通过寄存器控制桶映射,适应不同层的数据特性
- 在运行时根据统计信息动态调整
5.2 系统级集成要点
将APP-PSU集成到完整DNN加速器时需注意:
数据流匹配:
- 排序单元应置于数据分配单元前端
- 确保排序后的数据布局与PE阵列的访问模式匹配
控制开销管理:
- 添加旁路控制,在不需要排序时直接跳过
- 对已经有序的数据(如全0或全1模式)启用快速路径
时序收敛技巧:
- 在桶编码器前插入流水线寄存器
- 对前缀和计算采用进位保留加法器(Carry-Save Adder)
5.3 常见问题排查
在实际使用中可能遇到的问题及解决方案:
BT降低效果不达预期:
- 检查数据位宽是否与桶配置匹配
- 验证权重数据是否确实需要排序(某些压缩格式可能已优化)
排序引入的延迟问题:
- 确保流水线深度与整体系统匹配
- 对关键路径可采用更宽的前缀和并行计算
面积优化不明显:
- 检查综合约束是否过紧
- 验证桶映射逻辑是否被正确优化
6. 未来发展方向
基于当前设计,我们认为有几个有前景的扩展方向:
自适应桶配置:
- 在线监测数据分布,动态调整桶边界
- 结合运行时分析,实现最优的精度-效率权衡
多跳传输优化:
- 研究排序效果在NoC多跳传输中的累积效益
- 开发端到端的排序-路由协同优化策略
新型网络架构适配:
- 针对Transformer类模型设计特定的排序策略
- 研究注意力机制与数据排序的协同优化
3D集成扩展:
- 探索在3D堆叠内存中的排序单元部署
- 优化跨die数据传输的能效表现
在实际芯片设计中,我们建议先在小规模PE阵列上验证APP-PSU的效果,再逐步扩展到全芯片。对于边缘设备等面积敏感场景,4桶配置已经能提供良好的能效提升;而在云端大芯片中,可以考虑更精细的桶配置以获得额外优化空间。