第三讲:片上存储系统设计
大家好,欢迎来到第三讲。
今天聊存储系统。说实话,存储这块儿是AI芯片最容易出问题的地方。我见过太多团队,计算单元设计得漂漂亮亮,结果存储带宽跟不上,整个芯片性能直接腰斩。嗯,咱们今天就把这事儿掰扯清楚。
3.1 SRAM与Cache层次结构
先说说SRAM。SRAM说白了就是芯片上的高速存储器,速度快,但面积大。AI芯片里,SRAM是绝对的主角。
我个人习惯把SRAM分成三类:
- L1 Cache:跟计算单元紧耦合,延迟1-2个周期
- L2 Cache:芯片内的共享缓存,延迟10-20个周期
- L3 Cache:更大,但延迟也更高,50个周期左右
你想想看,为什么需要这么多级?因为成本。SRAM每比特的价格是DRAM的几十倍,你不能把所有数据都塞进L1。所以就有了层次结构——热数据放L1,温数据放L2,冷数据放DDR。
关键设计原则:Cache的命中率决定了性能上限。我做过一个项目,L1命中率从90%提到95%,整体性能提升了将近30%。
Cache的替换策略也很重要。LRU(最近最少使用)是主流,但AI场景下,我建议考虑Stream Buffer——因为神经网络的数据访问模式很规律,提前预取能大幅提升命中率。
避坑指南:我曾经在一个项目里用了全相联Cache,结果面积爆炸。后来改成组相联,面积降了40%,性能只损失了5%。嗯,设计上要懂得取舍。
3.2 TCM与DMA控制器集成
TCM,紧耦合内存。这玩意儿跟Cache不一样——它是软件可控的,没有替换策略,数据放进去就不会被踢出去。
为什么需要TCM?
- 实时性要求高的场景:比如中断处理、关键数据路径
- 确定性访问:Cache的命中不确定性在某些场景下不可接受
- 低功耗:TCM的访问功耗比Cache低30%左右
DMA控制器,这个就更有意思了。DMA说白了就是数据搬运工——CPU发个指令,DMA自己把数据从DDR搬到SRAM,CPU可以继续干别的。
我建议的集成方案是这样的:
// DMA配置示例
DMA_Channel ch;
ch.src_addr = DDR_BASE + 0x1000; // 源地址
ch.dst_addr = TCM_BASE + 0x2000; // 目标地址
ch.transfer_size = 1024 * 1024; // 1MB
ch.transfer_mode = BURST_MODE; // 突发模式
ch.priority = HIGH; // 高优先级
DMA_Start(&ch); // 启动传输
// CPU可以继续执行其他任务
while(!DMA_IsDone(&ch)); // 等待完成
注意:DMA和Cache的一致性是个大坑。我曾经遇到过DMA写完了数据,CPU读到的却是Cache里的旧数据。解决方案是:DMA传输前做Cache Flush,传输后做Cache Invalidate。
3.3 存储带宽计算与优化
存储带宽,这是AI芯片的命门。你算力再高,数据喂不进去也是白搭。
带宽计算公式很简单:
带宽 = 总线频率 × 数据位宽 × 传输效率
举个例子:
| 参数 | 值 |
|---|---|
| 总线频率 | 1 GHz |
| 数据位宽 | 512 bit |
| 理论带宽 | 64 GB/s |
| 实际效率 | 70% |
| 实际带宽 | 44.8 GB/s |
为什么效率只有70%?因为总线协议开销、地址对齐、Bank冲突等等。我见过最惨的项目,效率只有30%,查了半天发现是地址没对齐,每次访问都要跨两个Bank。
优化技巧:
- 地址对齐:确保数据起始地址是总线位宽的整数倍
- Bank交错:把连续数据分布到不同Bank,减少冲突
- 突发传输:尽量用长突发,减少协议开销
- 预取策略:提前把数据搬到SRAM,别等计算单元要了才去取
还有一个容易被忽略的点——带宽的峰值和均值。峰值带宽好看,但均值才是实际性能。我做过一个项目,峰值带宽标称100GB/s,实际跑起来只有40GB/s。为什么?因为计算单元不是一直在读数据,中间有计算延迟、有同步开销。
我的建议:设计时按峰值带宽的60%来估算实际可用带宽。这样留有余量,不至于流片回来发现性能不达标。
3.4 实战案例:一个AI推理芯片的存储设计
最后分享一个实际案例。我之前参与过一个AI推理芯片,目标是跑ResNet-50,要求实时处理1080p视频。
存储架构是这样的:
- L1 Cache:32KB,每个计算核心独享
- L2 Cache:512KB,所有核心共享
- TCM:256KB,用于存放权重和中间结果
- DMA:4个通道,支持2D传输
一开始我们直接用Cache,结果发现权重数据太大,Cache命中率只有60%。后来改成TCM存权重,DMA提前加载,命中率直接提到95%。
嗯,这就是经验。有时候不是技术不行,是没选对方案。
好了,这一讲就到这里。下一讲咱们聊聊互联架构——怎么把这么多计算单元和存储单元连起来,还能跑得快。