CiM仿真建模工具综述
前言
做了很久的CiM电路,但一直感觉缺乏一套全栈式的仿真建模工具,因此有必要对目前公开发表的各类CiM仿真建模工具进行调研。
这次综述主要的目标是调研一些关联性比较强的工作,简述这些工作的核心idea以及适用场景,最后会对这些工作做一个比较系统的summary。
CiMLoop
CiMLoop[1]是MIT Tanner Andrulis等人提出的CiM建模工作。CiMLoop是基于Timeloop[2]+Accelergy[3]构建的,Timeloop提供了一个评估和探索深度神经网络加速器的基础工具,使用一个精确且统一的表征方式描述广阔类型的硬件拓扑。并且可以通过映射器寻找到负载在具体架构上的最佳调度方式,是的研究者可以系统而公平的比较不同的架构。Accelergy则提供了一个系统级的能耗估计工具,可以在用户定义的高层级组件和底层级组件上运行,并且支持第三方能耗估计插件。CiMLoop面向CiM建模场景,对Timeloop+Accelergy进行了统合和升级。CiMLoop的主要特点是:灵活性、准确性、快速性。灵活性方面,CiMLoop提供了一套从器件级一直到系统级的灵活、统一的YAML描述接口,使得用户可以便捷的描述存算宏电路以及系统级架构。准确性方面,CiMLoop增加的重要feature是实现了考虑数据依赖性功耗分析,通过将负载中张量的数据分布作为输入,CiMLoop可以考虑到数据值对功耗造成的具体影响。快速性方面,CiMLoop总体来说是一个建模工具,不需要对电路行为进行具体的仿真,因此其运行速度相较于仿真器类工作有着数量级的优势,并且准确性可以媲美精确的仿真器结果。
NeuroSim
NeuroSim是佐治亚理工Shimeng Yu教授组的一个历史悠久的工作[4][5][6][7][8][9][10],可能也是目前CiM仿真器中最知名的工作,从最早的只支持对评估MNIST数据集的固定的两层MLP网络在RRAM上的行为建模(MLP+NeuroSim),后续又发表了支持深度神经网络负载的版本(DNN+NeuroSim),发展至今可以实现对多种存算拓扑的器件级(SRAM,RRAM和FeFET)、电路级(模拟CiM和数字CiM方式)到架构级和算法级的仿真与建模,甚至可以对3D封装方式(3D+NeuroSim)、片上训练以及最新的先进工艺节点进行建模,并且有着领先的准确性。顶层采用PyTorch封装,具备较高的易用性。NeuroSim提供了大量的器件、电路组件(包括电平转换器、开关矩阵、行列解码器和驱动电路、MUX,ADC,SA,比较器,加法器,寄存器等)的准确建模模型,且具备一定的参数化配置的灵活性。但NeuroSim也存在一定的缺陷,例如用户描述的灵活性较差,难以对复杂的架构/电路级的组件进行灵活的指定,只能在默认的H-Tree/XY Bus连接的分tile架构下进行一定的配置调整。
MNSIM
MNSIM[11][12]是由清华杨华教授组,与亚利桑那州大学、中科院计算所等多家单位的团队合作提出的一种高效的行为级CiM建模与评估工具,第一版MNISM主要面向RRAM,可提供从器件阵列级到系统级的建模,但架构和电路形式较为固定。后续推出的MNISIM 2.0,在硬件级,提供了一个具备灵活的架构配置性和组件拓展性的层级化建模工具,此外提供了一个统一的存储阵列模型,可以描述数字和模拟CiM。在算法级,MNSIM支持基于CiM的,考虑器件参数与各种架构的计算精度仿真。并且将考虑CiM的模型训练与量化集成在框架中。MNSIM 2.0还采用了一个通用的调度描述以适配不同的调度策略。基于MNSIM,可以开展算法级、调度级、架构级、电路块级(阵列级)到器件级的研究,在器件级主要建模了SRAM和RRAM,在阵列级主要建模了数字和模拟两种存算拓扑,在架构级,MNSIM 2.0主要提供了一个层级化的,以存算阵列组成PE,多个PE基于H-Tree组成Tile,多个Tile通过2D-Mesh NoC连接构成Bank,多个Bank再与控制电路、CPU、DRAM等构成完整系统的架构,针对算法级和调度级,MNSIM2.0针对CNN算法,提供了一个通用的调度描述接口,以支持不同的模型与调度策略。对比其他工作,MNSIM的一个亮点是提供了考虑器件精度、非理想因素、ADC分辨率等的网络推理准确率评估功能。但其在负载和电路、架构上的灵活性较差,算法上仅支持CNN类负载的调度与映射,电路和架构虽然具有一定的可配置性,但难以灵活的指定复杂的电路/架构级组件。
ZigZag-IMC
ZigZag-IMC[13]是比利时鲁汶大学Jiacong Sun等人提出的一个基于ZigZag[14]对数字CiM和模拟CiM进行建模比较的工作。ZigZag本身是联合架构与映射的深度神经网络加速器设计空间探索工具,包含三个关键点,分别是:一个分析性的PPA硬件开销估计器;两个支持空间和时间均匀/不均匀映射搜索的映射搜索引擎;一个可以自动探索广阔的内存层级的设计空间的架构生成器。ZigZag-IMC为模拟CiM和数字CiM提供了一个统一性能模型,并通过多个发表的工作进行验证,将提出的模型集成在ZigZag中,对模拟CiM和数字CiM进行了量化的评估,包括了存算宏级别的峰值性能和系统级的负载性能。总体来看ZigZag-IMC提供了对不同配置的模拟CiM和数字CiM在不同的负载下自动搜索映射并快速评估性能的能力。
Eva-CiM
Eva-CiM[15]是由浙江大学卓成教授与美国圣母大学Xiaobo Sharon Hu教授团队合作提出的一个基于CiM架构的系统的能耗与性能评估框架。Eva-CiM的特点是使用了一个多层级的(从器件级到架构级)丰富工具链,充分利用了现有的建模与仿真工具,例如GEM5,McPAT和DESTINY。为了支持高置信度的预测,快速的设计空间探索与易用性,Eva-CiM引入了多种新颖的建模/分析方式,包括建模捕捉存储访问,依赖项感知ISA跟踪,以及量化交互主机CPU与CiM模组之间的交互。Eva-CiM可以快速的产生给定程序,处理器架构,CiM阵列以及具体工艺的全系统的能耗与性能评估。并通过与DESTINY比较进行验证。Eva-CiM可以分析包括支持CiM的系统影响,一段程序是否是CiM友好的,以及增大CiM存储容量的优势和劣势等。与之前的工作相比,Eva-CiM主要的特点是基于GEM5提供了ISA级的接口,因此为软件和编译器级的评估提供了方法,但其缺乏对存算的器件级到电路级的描述建模支持,实际上其思路是通过先对存算模块进行SPICE网表仿真后,再将其能耗与延迟信息送入DESTINY中进行进一步的处理以抽象出不同配置和不同CiM操作下的高层级CiM模型,而McPAT用于提供系统能耗与面积评估。
MemTorch
MemTorch[16]是澳大利亚James Cook大学Azghadi教授与澳大利亚La Trobe大学,西班牙Seville大学团队合作推出的一个用于RRAM的开源深度神经网络仿真系统。其实现了从器件到阵列再到算法的整体建模,并且能够精细的建模RRAM器件的各种非理想特性,其最主要的贡献是在工程上实现了一套C++,CUDA和Python构成的仿真框架。主要通过C++和CUDA完成仿真中的CPU/GPU性能瓶颈任务,并高度集成于主流开源AI框架PyTorch,使用C++和Python的PyTorch API来拓展和抽象底层操作,并支持原生的CPU/GPU操作。由于顶层基于PyTorch封装,因此有较高的易用性,同时相对于NeuroSim,提供了CUDA支持以实现推理的加速。
PUMA
PUMA[17]是由普渡大学和Hewlett Packard Enterprise的团队提出的一个可编程的超高效RRAM加速器工作,PUMA在RRAM阵列的基础上,实现了一系列通用的执行单元,使得PUMA可以支持很大范围的深度神经网络推理负载。PUMA的微架构通过专门设计的ISA来确保CiM和模拟电路的效率,并且没有牺牲可编程性。同时团队还发布了可以将高级语言转换为PUMA ISA的PUMA编译器。编译器包含了计算图的分解、指令调度的优化以及寄存器分配,从而产生让庞大且复杂的负载可以在数千个核心上运行的机器码。他们还开发了一个详细的架构仿真器,可以验证功能性,时序以及功耗模型,从而评估性能与能耗开销。
PIMSim
PIMSim[18]是由中国科学院计算所和南加利福尼亚大学合作提出的一个DRAM CiM(PiM)仿真器。PIMSim是一个全系统且高度可配置的PiM仿真器,可以进行电路级、架构级和系统级的研究。PIMSim可以进行PiM的架构级仿真,并实现了三种仿真模式来提供速度/精度之间的权衡。此外,PIMSim提供了细致的性能与功耗模型来仿真PiM的指令,编译器,存内处理逻辑,不同的存储器件以及PiM一致性。总体来说PIMSim是一个集建模与仿真于一体的工作,既可以通过Gem5+PiM存储模型/一致性模型/PiM指令的方式进行慢速但高精度的仿真,也可以通过Pintool进行指令驱动仿真进行中等速度和精度的仿真,还可以通过使用Trace文件和C#仿真器的方式实现低精度但快速的仿真。
MultiPIM
MultiPIM[19]是University of Virginia提出的PiM仿真器,其主要针对目前的PiM仿真器没有考虑架构细节以及对于实际PiM系统必要的编程接口的问题。MultiPIM是一个建模了微架构细节的PiM仿真器,支持多个存储栈以及大规模并行PiM核。在仿真器的基础上,MultiPIM提供了一个易用的接口以配置PiM硬件以及适应现存的卸载到PiM上的负载。MultiPIM的顶层架构由两部分组成,可分为前端和后端。前端处理指令仿真,后端处理存储访问仿真。两个部分通过预定义的接口连接,并且协同工作。解耦的前端和后端使得可以更简单的拓展或替换每个部分。例如,当前采用的基于ZSim的前端可以替换为其他仿真器(例如GEM5,GPGPU-Sim)。而目前采用的基于Ramulator的后端也可以替换为其他的仿真器。
PiMulator
PiMulator[20]是University of Virginia提出的PiM仿真平台,该工作的主要贡献是实现了一个可修改,可参数化,FPGA可综合的PiM软核模型,可用于PiM架构的原型开发于快速验证。该PiM模型通过SystemVerilog实现,并且允许用户在FPGA上生成任意需要的存储配置,且带有对PiM逻辑单元的结构于分布有着完整的控制。此外,该模型兼容LiteX框架,其提供了一个高度可用性和兼容性的FPGA与RISC-V的协同系统。因此,该框架使得架构设计师可以简单的进行原型验证、仿真与评估众多的前沿PiM架构与设计。LiteX是一个用于创建FPGA核心/SoC的框架,旨在提供便捷高效的基础设施。它支持多种总线和流接口(如Wishbone、AXI、Avalon-ST),并集成了多种简单和复杂的硬件核心(如RAM、ROM、Timer、UART、JTAG等)。LiteX还支持多种CPU和ISA(如RISC-V、OpenRISC、LM32、Zynq、X86等),并具备强大的调试基础设施和快速仿真能力。
CIMulator
CIMulator[21]是Binghamton University提出的CiM仿真平台。该工作的核心是提供一个开源、可拓展建模、仿真和验证框架,用于片上数字CiM设计与评估。其主要特点是提供了一个可综合的RTL CiM模型(使用SystemVerilog进行设计),CIMulator建模了基础的存内位线逻辑以及近存计算功能。通过这种方式,CIMulator确保了周期精确的RTL仿真,同时可以在COTS FPGA期间上进行系统级的CiM集成,从而实现端到端的正确性验证。此外,CIMulator提供了一个CiM编程方式以及一个指令级能耗模型以估计应用程序的执行能耗。总体来说,CIMulator框架包含了一个可综合的CiM的RTL实现,以及一套集成CiM的SoC;一套基于gcc+JTAG的软件编程方案,并提供了CiM的编程指令;一套RTL/能耗建模,可以提供指令级功耗建模。
结论
对上述调研的工作做一个总结,如下表所示:
| Name | Type | Important Feature |
|---|---|---|
| CiMLoop | Modeling | 灵活&细粒度的多层级组件建模,精确&快速的张量分布依赖性建模 |
| NeuroSim | Modeling | 历史悠久,领域广泛,拥有大量高精度的电路组件模型 |
| MNSIM | Modeling | 提供了考虑器件精度、非理想因素、ADC分辨率等的网络推理准确率评估功能 |
| ZigZag-IMC | Modeling | 提供了一个模拟CiM和数字CiM的统一性能模型及量化评估框架 |
| Eva-CiM | Simulator | 使用了一个多层级的丰富工具链,充分利用了现有的建模与仿真工具 |
| MemTorch | Simulator | 与PyTorch的高度集成,提供了CUDA支持以实现推理的加速 |
| PUMA | Simulator | 高可编程性,提供了ISA,编译器工具链以及架构仿真器 |
| PIMSim | Simulator | 提供了三种不同层级的仿真模式来提供速度/精度之间的权衡 |
| MultiPIM | Simulator | 建模了微架构细节的PiM仿真器,前端与后端分离实现 |
| PiMulator | Emulator | 实现了一个可修改,可参数化,FPGA可综合的PiM软核模型 |
| CIMulator | Emulator | 提供了一个可综合的RTL CiM模型,一套软件编程方案以及能耗建模 |
此类工作可以大致分为三类,分别是Modeling,Simulator以及Emulator。Modeling工作主要聚焦于快速的建模与PPA评估,用于前期的设计空间探索,可以研究负载与映射、架构、电路乃至器件之间的协同设计关系,但Modeling工作不包含对电路行为的具体描述,且一般不涉及微架构,不包含对指令以及编译工具的分析。Simulator与Modeling相比,增加了对电路行为的建模,进而一般增加了对编程性的考量,提供高级语言级到指令级的分析能力,其顶层一般分析具体程序,而非抽象的网络负载,Simulator工作对于开发过程中的软件设计具有指导意义。Emulator工作则提供了具体的可综合模型,可以直接进行硬件上的原型验证,主要是用于对开发过程后期对整体软硬件进行协同验证。
三者主要面向的分别是设计的前、中、后期,前期快速探索时主要依靠Modeling,中期软硬件的协同开发时主要依靠Simulator,而到了后期进行原型开发验证时主要依赖Emulator。但三者之间实际上也有一定的关联性和重合性,例如Simulator工作中也会使用Modeling方法对于复杂组件进行建模抽象,从而避免复杂的行为仿真。
引用
Andrulis, T., Emer, J. S., & Sze, V. (2024). CiMLoop: A Flexible, Accurate, and Fast Compute-In-Memory Modeling Tool. 2024 IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS), 10–23. https://doi.org/10.1109/ISPASS61541.2024.00012 ↩︎
A. Parashar et al., "Timeloop: A Systematic Approach to DNN Accelerator Evaluation," 2019 IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS), Madison, WI, USA, 2019, pp. 304-315, doi: 10.1109/ISPASS.2019.00042. ↩︎
Wu, Y. N., Emer, J. S., & Sze, V. (2019). Accelergy: An architecture-level energy estimation methodology for accelerator designs. 2019 IEEE/ACM International Conference on Computer-Aided Design (ICCAD), 1–8. ↩︎
P.-Y. Chen, X. Peng, S. Yu, NeuroSim+: An integrated device-to-algorithm framework for benchmarking synaptic devices and array architectures, IEEE International Electron Devices Meeting (IEDM), 2017. ↩︎
P. -Y. Chen, X. Peng and S. Yu, "NeuroSim: A Circuit-Level Macro Model for Benchmarking Neuro-Inspired Architectures in Online Learning," in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, vol. 37, no. 12, pp. 3067-3080, Dec. 2018, doi: 10.1109/TCAD.2018.2789723. ↩︎
Y. Luo, X. Peng, and S. Yu. MLP+ NeuroSimV3.0: Improving on-chip learning performance with device to algorithm optimizations, Proceedings of the international conference on neuromorphic systems, 2019. ↩︎
X. Peng, S. Huang, Y. Luo, X. Sun and S. Yu, ※DNN+NeuroSim: An End-to-End Benchmarking Framework for Compute-in-Memory Accelerators with Versatile Device Technologies, IEEE International Electron Devices Meeting (IEDM), 2019. ↩︎
X. Peng, S. Huang, H. Jiang, A. Lu and S. Yu, DNN+NeuroSim V2.0: An End-to-End Benchmarking Framework for Compute-in-Memory Accelerators for On-Chip Training, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2021. ↩︎
X. Peng, W. Chakraborty, A. Kaul, W. Shim, M. S Bakir, S. Datta and S. Yu, Benchmarking Monolithic 3D Integration for Compute-in-Memory Accelerators: Overcoming ADC Bottlenecks and Maintaining Scalability to 7nm or Beyond, IEEE International Electron Devices Meeting (IEDM), 2020. ↩︎
J. Lee, A. Lu, W. Li, S. Yu, NeuroSim V1. 4: Extending Technology Support for Digital Compute-in-Memory Toward 1nm Node, IEEE Transactions on Circuits and Systems I: Regular Papers, 2024. ↩︎
L. Xia et al., "MNSIM: Simulation platform for memristor-based neuromorphic computing system," 2016 Design, Automation & Test in Europe Conference & Exhibition (DATE), Dresden, Germany, 2016, pp. 469-474. ↩︎
Z. Zhu et al., "MNSIM 2.0: A Behavior-Level Modeling Tool for Processing-In-Memory Architectures," in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, vol. 42, no. 11, pp. 4112-4125, Nov. 2023, doi: 10.1109/TCAD.2023.3251696. ↩︎
J. Sun, P. Houshmand and M. Verhelst, "Analog or Digital In-Memory Computing? Benchmarking through Quantitative Modeling," Proceedings of the IEEE/ACM Internatoinal Conference On Computer Aided Design (ICCAD), October 2023 ↩︎
L. Mei, P. Houshmand, V. Jain, S. Giraldo and M. Verhelst, "ZigZag: Enlarging Joint Architecture-Mapping Design Space Exploration for DNN Accelerators," in IEEE Transactions on Computers, vol. 70, no. 8, pp. 1160-1174, 1 Aug. 2021, doi: 10.1109/TC.2021.3059962. ↩︎
D. Gao, D. Reis, X. S. Hu and C. Zhuo, "Eva-CiM: A System-Level Performance and Energy Evaluation Framework for Computing-in-Memory Architectures," in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, vol. 39, no. 12, pp. 5011-5024, Dec. 2020, doi: 10.1109/TCAD.2020.2966484. ↩︎
Lammie, C., Xiang, W., Linares-Barranco, B., & Azghadi, M. R. (2022). MemTorch: An Open-source Simulation Framework for Memristive Deep Learning Systems. Neurocomputing. https://doi.org/https://doi.org/10.1016/j.neucom.2022.02.043 ↩︎
Ankit, A., Hajj, I. E., Chalamalasetti, S. R., Ndu, G., Foltin, M., Williams, R. S., Faraboschi, P., Hwu, W. W., Strachan, J. P., Roy, K., & Milojicic, D. S. (2019). PUMA: A Programmable Ultra-efficient Memristor-based Accelerator for Machine Learning Inference. Proceedings of the Twenty-Fourth International Conference on Architectural Support for Programming Languages and Operating Systems, 715–731. https://doi.org/10.1145/3297858.3304049 ↩︎
S. Xu, X. Chen, Y. Wang, Y. Han, X. Qian and X. Li, "PIMSim: A Flexible and Detailed Processing-in-Memory Simulator," in IEEE Computer Architecture Letters, vol. 18, no. 1, pp. 6-9, 1 Jan.-June 2019, doi: 10.1109/LCA.2018.2885752. ↩︎
C. Yu, S. Liu and S. Khan, "MultiPIM: A Detailed and Configurable Multi-Stack Processing-In-Memory Simulator," in IEEE Computer Architecture Letters, vol. 20, no. 1, pp. 54-57, 1 Jan.-June 2021, doi: 10.1109/LCA.2021.3061905. ↩︎
S. Mosanu et al., "PiMulator: a Fast and Flexible Processing-in-Memory Emulation Platform," 2022 Design, Automation & Test in Europe Conference & Exhibition (DATE), Antwerp, Belgium, 2022, pp. 1473-1478, doi: 10.23919/DATE54114.2022.9774614. ↩︎
A. Dervay and W. Zhao, "CIMulator: A Computing in Memory Emulator Framework," in IEEE Transactions on Circuits and Systems II: Express Briefs, vol. 69, no. 10, pp. 4183-4187, Oct. 2022, doi: 10.1109/TCSII.2022.3193673. ↩︎

浙公网安备 33010602011771号