1. 双模CIM加速器的架构创新计算内存Computing-in-Memory, CIM技术正在彻底改变传统计算架构的设计范式。这种技术的核心在于打破了冯·诺依曼架构中计算与存储分离的桎梏通过在存储阵列中直接嵌入计算单元实现了数据在哪里计算就在哪里的理想计算模式。双模CIM架构在此基础上更进一步赋予了每个存储单元在计算模式和存储模式之间动态切换的能力为深度神经网络加速提供了前所未有的灵活性。1.1 计算内存的基本原理传统计算架构面临的最大瓶颈就是所谓的内存墙问题——数据在处理器和内存之间的搬运消耗了绝大部分能量和时间。研究表明在典型的深度学习推理任务中数据搬运的能耗可能占总能耗的90%以上。CIM技术通过以下几种创新方式解决了这个问题存算一体化设计利用存储器件如SRAM、ReRAM等的物理特性直接执行矩阵-向量乘法运算。例如在SRAM阵列中通过调节字线和位线的电压可以在读取数据的同时完成乘加运算。模拟计算机制许多CIM设计采用模拟计算方式利用电流的叠加特性实现并行计算。一个存储阵列可以在一个周期内完成整个矩阵行的乘加运算这种并行性是传统数字处理器难以企及的。数据局部性优化权重数据长期驻留在存储阵列中只有输入数据需要从上层存储器加载大幅减少了数据搬运量。1.2 双模架构的关键突破Dynaplasia等先进CIM芯片实现了存储/计算双模切换能力这种架构的创新点主要体现在动态资源配置每个CIM阵列可以在运行时被配置为计算模式执行矩阵运算或存储模式作为高速缓存。例如在320x320的阵列中可以动态决定多少阵列用于计算多少用于数据缓存。硬件支持模式切换通过改变全局字线输入实现仅需1个时钟周期即可完成。这种轻量级的切换机制使得动态调整变得可行。带宽平衡计算模式下阵列提供计算吞吐量OPs/cycle存储模式下提供数据带宽Bytes/cycle。编译器可以根据算子需求智能分配资源。关键提示双模切换虽然增加了硬件复杂度但相比传统CIM架构它能更好地适应DNN中不同算子对计算和内存资源的差异化需求特别是在处理Transformer等内存访问模式复杂的模型时优势明显。2. DACO编译器的设计原理2.1 编译挑战与整体架构为双模CIM架构开发编译器面临三个主要挑战1)如何划分网络段以平衡并行度和资源利用率2)如何为每个段分配计算/存储资源3)如何最小化模式切换开销。DACO编译器采用分层优化策略前端优化将计算图展平为算子序列识别可能的并行段动态规划分段基于资源约束寻找最优分段点混合整数规划为每个段求解最优资源分配代码生成产生包含CM.switch指令的中间表示# 简化的动态规划分段伪代码 def segment_network(operators, N_cim): dp [float(inf)] * (len(ops)1) dp[0] 0 for j in range(1, len(ops)1): for i in range(j): if estimate_resources(ops[i:j]) N_cim: cost dp[i] MIP_solve(ops[i:j]) switch_cost(i,j) if cost dp[j]: dp[j] cost return backtrack_segments(dp)2.2 网络分段优化网络分段的目标是将计算图划分为若干段每段可以并行执行同时满足资源约束。DACO采用动态规划方法其核心思想是代价模型考虑每个候选段的计算延迟和与前后段的切换开销资源预估快速筛选出违反资源约束的无效分段最优子结构利用动态规划表记录局部最优解逐步构建全局最优对于包含m个算子的网络算法复杂度为O(m²)通过以下优化保持实用性提前剪枝不可能的分段重用子问题的解决方案并行化代价评估2.3 资源分配优化对每个网络段DACO将资源分配建模为混合整数规划问题决策变量λ_c(i,x,y)算子i是否使用阵列(x,y)进行计算λ_m(i,x,y)算子i是否使用阵列(x,y)存储数据约束条件资源独占性同一阵列不能同时用于计算和存储数据流依赖生产者算子的输出缓冲区可被消费者算子重用为输入资源上限分配的阵列总数不超过硬件容量目标函数 最小化段内最大算子延迟即min(max(L_Oi))其中L_Oi由以下模型估算L_Oi ∝ OP_Oi / min( Com_Oi·OP_cim, (Mem_Oi·D_cim D_main)·AI_Oi )其中AI_Oi是算术强度(OP/B)决定算子更依赖计算还是带宽。3. 关键技术实现细节3.1 延迟建模与资源分配精确的延迟模型是资源分配的基础。DACO考虑了三个关键因素计算吞吐量每个计算阵列每周期提供OP_cim次操作Com_Oi个阵列提供Com_Oi·OP_cim数据供给能力Mem_Oi个存储阵列每周期提供Mem_Oi·D_cim数据加上主存带宽D_main平衡点分析当AI_Oi OP_cim/(D_cim·Mem_Oi/D_main)时计算成为瓶颈反之带宽受限以矩阵乘法为例OP_Oi M×N×KAI_Oi KOP_cim (N×K)/(⌈N/h⌉×⌈K/w⌉) (h,w为阵列高宽)3.2 模式切换优化模式切换虽然只需1周期但频繁切换仍会带来开销。DACO采用两种优化切换感知的分段将需要相似配置的算子分到同段数据局部性利用在存储模式下预存后续计算需要的数据减少切换次数例如在Transformer层中将Q、K、V生成分到同段大部分阵列设为计算模式计算K后将部分阵列切换为存储模式缓存K值计算QK^T时直接使用缓存的K值减少数据搬运3.3 代码生成与执行DACO生成基于元算子的中间表示主要扩展包括模式切换指令CM.switch(TOC/TOM, array_addr)并行段标记parallel{op1, op2, ...}存储操作显式标注数据存放位置这种设计具有以下优势兼容不同CIM硬件后端支持灵活的调度策略便于进行后续优化如权重复制4. 实际应用效果分析4.1 性能加速效果在Dynaplasia芯片96个320x320阵列上的测试结果显示Transformer模型BERT-large1.17×加速序列长度64LLaMA2-7B1.24×加速OPT-13B最高2.03×加速CNN模型MobileNet1.15×ResNet181.17×VGG161.40×批量处理随着批量增大加速比保持稳定显示良好的可扩展性4.2 资源分配案例不同模型展现出独特的分配模式VGG16浅层更多计算阵列特征图通道少深层增加存储阵列处理更大特征图OPT-6.7BQKV生成33-67%存储阵列注意力计算80%计算阵列FFN层根据输入规模动态调整4.3 规模敏感性分析随着序列长度增加呈现三个典型阶段短序列256存储阵列占比高15-25%显著加速中序列256-512计算逐渐成为瓶颈加速比下降长序列512全部阵列用于计算加速比趋于1这种特性使DACO特别适合处理动态输入场景如对话系统中的变长序列。5. 工程实践中的关键考量5.1 硬件约束处理在实际部署中需要注意阵列粒度320x320的大阵列可能导致资源浪费可考虑分层设计精度要求8-bit量化足以满足大多数DNN但需校准热管理密集计算下需要考虑散热方案5.2 编译器调优建议搜索空间限制设置合理的分段长度上限如10个算子近似求解对大型网络可采用启发式方法初筛特定优化为常见算子模式如Transformer块预定义模板5.3 典型问题排查性能不达预期检查算术强度估算是否准确验证资源约束是否设置过紧分析数据依赖是否限制并行度模式切换频繁调整分段策略增加段内算子数检查数据复用机会是否充分利用资源分配不均重新评估各算子延迟目标考虑引入公平性约束6. 未来发展方向虽然DACO已经展现出显著优势仍有提升空间支持更多硬件扩展适配ReRAM、FeFET等新兴CIM器件自动化调优基于强化学习的超参数优化全栈协同设计联合优化算法、编译器和硬件通用计算探索将双模理念扩展到图计算、数据库等场景在实际项目中采用DACO时建议从中小规模模型开始验证逐步扩展到大型模型。特别注意不同硬件平台的具体约束如阵列数量、精度支持和切换延迟等参数可能需要调整编译器配置。