《34.1 A 28nm 83.23TFLOPS/W POSIT-Based Compute-in-Memory Macro for High-Accuracy AI Applications》(一)
以下是对提供论文《34.1 A 28nm 83.23TFLOPS/W POSIT-Based Compute-in-Memory Macro for High-Accuracy AI Applications》的分析:
1. 论文的主要内容和研究方向
本文提出了一种基于 POSIT 格式的 计算-存储一体化(CIM)宏结构,该结构旨在 高精度AI应用 中提高能效和计算精度。通过采用 POSIT数据格式,该研究提出了一种新的方法,能够在减少能耗的同时,保持与传统浮点格式(如FP32/FP16)相似的训练和推理精度。该研究的重点是:
- 克服 POSIT 数据格式的动态特性,提出解决方案以提高 CIM 的能效和资源利用率。
- 提出了三项创新技术:双向规程处理单元(BRPU)、关键位预计算与存储(CPCS)CIM单元、循环交替计算调度单元(CASU),这些技术有效解决了在 POSIT 计算中遇到的挑战。
2. 研究方法介绍
论文提出了一种数字 POSIT CIM宏结构(DP-CIM),具有以下关键创新:
- BRPU:通过使用移位和连接逻辑替代复杂的编码解码逻辑,从而减少了 规程处理能量,节省了 40.3% 的能量。
- CPCS:利用 空闲位 来优化 CIM 单元的利用率,通过在每个周期内执行双位 MAC 操作,提升了 CIM 单元的利用率 63%。
- CASU:当两个位串没有重叠时,CASU使用 按位或 操作替代 加法,从而节省了 56.9% 的加法器能量。
整体架构包括 16个CIM核心、16个加法树和一个 28kB全局SRAM。该架构通过优化数据处理和减少能量消耗来实现高效计算。
主要解决的挑战:
- POSIT动态位宽的尾数与CIM中固定宽度的权重存储发生冲突。
- 在尾数没有重叠位时,全加器内的切换操作冗余。
- 在CIM环境中需要高效的 规程处理 和 位级优化。
3. 研究结果分析
DP-CIM处理器 的 能效为83.23 TFLOPS/W,相比之前的工作提高了 21%,并且在 ResNet18、GPT-2 和 ViT-B 等模型的训练中,节省了 8.81倍 的能量。能效的提高主要得益于以下几点:
-
规程处理的 编解码逻辑 被 BRPU 替代,减少了能耗。
-
CASU 使用按位或操作来减少加法器树的能量消耗。
-
CPCS 提供双位 MAC,提高了 CIM单元的利用率。
-
测量结果:DP-CIM处理器的功耗范围为 5.5mW到237mW,频率为 78-419MHz,电压为 0.55-1.0V。
-
加速效果:相比于之前的设计,处理器达到了 49% 的加速,得益于 CPCS 能够在每个周期执行双位MAC。
4. 论文出处
该论文发表于 2024 IEEE国际固态电路会议(ISSCC 2024),这是半导体与电路设计领域的顶级会议,属于 CCF A类会议,具有较高的学术和行业影响力。
5. 开源代码
论文中没有提到该研究相关的开源代码或代码库。因此,目前没有关于该 CIM宏结构 或 POSIT计算 方法的开源代码。
计算-存储一体化(CIM)宏结构 是一种集成了计算功能和存储功能的电路结构,常用于加速高效计算的应用,如人工智能(AI)推理与训练。在传统的计算架构中,计算单元(如处理器)和存储单元(如内存)是分开的,需要频繁地进行数据传输。然而,在 CIM 架构中,计算单元与存储单元被紧密集成到同一个芯片上,允许数据直接在存储单元中进行计算,从而减少了数据传输的延迟和能量消耗,提高了计算效率。
CIM宏结构的关键特点和优势:
-
计算与存储集成:
- 在传统计算架构中,计算单元(如CPU或GPU)和存储单元(如DRAM或SRAM)是分开的。数据必须从存储器中读取到计算单元,然后进行处理,再将结果写回存储器,这个过程需要大量的能量和时间。
- CIM架构将计算单元和存储单元合并在一起,使得数据能够直接在存储器中进行计算,减少了数据传输的需要,从而节省了能量和加快了计算速度。
-
能效和带宽优化:
- CIM架构通过将计算任务转移到存储位置,极大地减少了内存访问的带宽需求,并减少了通信和数据传输过程中产生的能量消耗。
- 通过减少内存访问的频率,CIM提高了整体能效,特别适合于需要高带宽、高并发和低功耗的应用,如AI处理、大规模数据分析等。
-
硬件架构:
- CIM系统通常包含多个 CIM核心,每个核心内有多个 CIM单元,这些单元用于处理存储在内存中的数据。
- 每个 CIM单元 通常包括计算和存储功能,比如加法、乘法操作单元,同时也可以执行存储器中的数据加载和存储操作。
-
应用领域:
- CIM广泛应用于 人工智能(AI)处理器 中,尤其是在 深度学习 和 神经网络加速 上,由于这些应用需要大量的数据计算,而数据计算的过程往往是重复的,CIM能够显著提高效率。
- CIM也用于 图像处理、视频编解码、信号处理 等领域,它可以加速计算并提高处理速度,减少功耗。
CIM宏结构在论文中的应用:
在论文《A 28nm 83.23TFLOPS/W POSIT-Based Compute-in-Memory Macro for High-Accuracy AI Applications》中,CIM宏结构被设计用于支持基于 POSIT 格式的计算,这种格式具有动态位宽,可根据数据的不同分布自适应调整位宽,从而在保持精度的同时减少能耗。
该论文中的 CIM宏结构 包含以下几个关键部分:
- BRPU(双向规程处理单元):优化了规程的处理过程,减少了额外的功耗。
- CPCS(关键位预计算与存储):利用空闲位进行计算,增强了CIM单元的利用率,允许每个周期内执行双位MAC(乘加)操作。
- CASU(循环交替计算调度单元):通过替代尾数的加法操作为按位或操作,节省了加法器的能量,提高了CIM的计算效率。
通过这些创新,CIM宏结构在处理AI计算任务时大大提高了计算效率,同时显著降低了功耗。
总结来说,CIM宏结构 是一种通过集成计算和存储单元来优化数据处理过程的架构,能够显著提高计算效率和能效,特别适合在高性能计算和AI领域的应用。
CIM(计算-存储一体化,Compute-in-Memory) 和 哈佛架构(Harvard Architecture) 并不矛盾,它们是两种不同的计算架构思想,但可以在某些情况下互相补充。
哈佛架构
哈佛架构是一种计算机体系结构,其中 指令存储 和 数据存储 被分开,即指令存储和数据存储使用独立的存储单元。这种结构的优势在于它允许 并行 访问指令和数据,从而提高处理速度。哈佛架构的主要特点是:
- 指令和数据分开存储,通常有独立的内存总线,使得指令和数据可以同时读取。
- 提供更高的吞吐量和速度,尤其适用于实时处理和嵌入式系统。
哈佛架构的例子包括很多 嵌入式处理器,例如 DSP(数字信号处理器),以及一些专用的处理器架构。
CIM(计算-存储一体化)
CIM是一种将计算单元和存储单元集成在一起的架构,使得数据可以直接在存储位置进行计算,从而避免了传统架构中计算单元和存储单元之间的频繁数据传输。CIM的优势包括:
- 降低了数据传输的延迟和功耗,因为计算和存储不再分离。
- 提高能效和带宽,特别适用于需要大量计算的应用(如深度学习、图像处理等)。
CIM架构常见于需要高效能和低能耗的应用,尤其是在 AI加速器 和 神经网络处理单元 中。
两者的关系与兼容性
虽然 CIM 和 哈佛架构 看似不同,但它们可以共存,并且并不矛盾。原因如下:
-
不同的层次与应用场景:
- 哈佛架构主要是一种 硬件体系结构 的设计理念,强调内存分离,旨在优化指令和数据的访问效率。
- CIM主要是一种 计算架构,其目标是将计算单元与存储单元合并,以减少数据传输,提高能效。它更侧重于 数据处理 的方式。
-
哈佛架构中也可能包含CIM思想:
- 在哈佛架构的计算单元中,存储单元可以是一个传统的内存模块,也可以是一个集成了计算单元的存储模块,即 CIM。因此,在具有哈佛架构的处理器中,可以实现将计算与存储一体化的设计。比如,在专用的 AI 加速器中,可能会同时采用哈佛架构来优化指令与数据访问效率,同时采用CIM来优化计算效率。
-
互补性:
- 哈佛架构和CIM的结合可以使得系统在数据存取和处理上都达到更高的效率。例如,哈佛架构可以确保指令和数据的高速并行访问,而CIM可以在存储层面上进行计算,减少数据传输带来的能耗和延迟。
总结
- 哈佛架构 和 CIM 并不矛盾。它们分别从不同的角度优化计算机系统的性能。
- 哈佛架构 主要聚焦于存储的分离和访问效率的提升,而 CIM 侧重于减少存储与计算之间的传输开销,提高能效。
- 在一些高效能计算需求(如AI加速)中,二者可以结合使用,发挥各自的优势。
在这篇论文《A 28nm 83.23TFLOPS/W POSIT-Based Compute-in-Memory Macro for High-Accuracy AI Applications》中,POSIT 被用于 CIM(Compute-in-Memory)宏结构的核心数值表示和计算格式,替代传统的浮点数(如FP16/FP32),以降低功耗、提高能效,并保持高精度。
✅ POSIT 在论文中的具体使用方式
论文中提出的 DP-CIM(Digital POSIT-based CIM)宏结构,将 POSIT 作为主导数据表示和计算格式,应用于整个计算链路,包括权重存储、输入数据格式转换、乘加计算以及加法器树的能量优化。
以下是详细说明:
1. 数据表示格式选用 POSIT
在原文位置【页码567左栏第1段】提到:
“The emerging POSIT data format, exploiting dynamic bit width that adapts to varied data distributions, can use a low bit width to achieve nearly the same training and inference accuracy as high bit width FP (POSIT8 ≈ FP16 and POSIT16 ≈ FP32)...”
✅ 解释:
- 该系统使用 POSIT8(8位)代替 BF16/FP16,用更小位宽获得类似精度;
- 提升了存储效率和计算能效。
2. POSIT 编码/解码单元嵌入
在图 34.1.2 的描述中提到(页码567右栏):
“When loading data to DP-CIM, the FP-to-POSIT encoder transfers the FP data to POSIT format for storage... a POSIT-to-FP decoder...”
✅ 解释:
- 系统设计了 FP-to-POSIT encoder 和 POSIT-to-FP decoder;
- 所有输入数据(如权重、激活)在进入 CIM 核心之前,都会先编码为 POSIT 格式。
3. BRPU:优化 POSIT 中的 Regime 处理
在页码567右栏:
“a bi-directional regime processing unit (BRPU) that replaces the complicated codec logic... saving 40.3% of regime processing energy.”
✅ 解释:
- POSIT 中的 Regime 部分是动态位宽编码(如11110、00001);
- BRPU 利用其 单调1/0位特性,用移位+按位或替代原本复杂的加减解码逻辑;
- 减少了 Regime 运算能耗(节省达68%,详见图34.1.3和原文)。
4. CPCS:支持动态尾数位宽的优化
在页码567右栏底部:
“CPCS detects the weight mantisa bit width to pre-compute and store a logical value into the spare CIM cell...”
✅ 解释:
- POSIT 中 尾数(Mantissa)位宽动态变化;
- CPCS 利用闲置位进行关键位预计算(critical-bit precompute);
- 支持 双位MAC操作,提升CIM单元利用率达63%。
5. CASU:应对动态尾数对齐产生的能耗问题
在页码567最底至568顶:
“CASU uses bit wise or operations to replace bit wise addition if two mantissas have no overlap bits, saving 56.9% of energy...”
✅ 解释:
- POSIT 尾数在累加过程中需对齐,但有66.8%概率不会重叠(因为位宽动态);
- CASU 利用这一特点将加法器树中的部分加法替换为 OR 操作,极大降低了功耗。
📌 POSIT 使用的核心位置总结(含原文定位):
功能 | 详细说明 | 原文页码/位置 |
---|---|---|
POSIT 格式介绍 | 解释了 POSIT 的4部分结构,及其精度-范围平衡机制 | 页566-567左栏第1段 |
POSIT 编码/解码 | 系统包含 FP-to-POSIT 和 POSIT-to-FP 模块 | 页567右栏第2段 |
BRPU 处理 POSIT Regime | 替代传统codec逻辑,节能达68% | 页567右栏 + 图34.1.3 |
CPCS 处理动态尾数 | 预计算尾数关键位,提升CIM利用率 | 页567底部 + 图34.1.4 |
CASU 优化加法器树 | 替代冗余加法,提升非重叠尾数能效 | 页568顶部 + 图34.1.5 |
这三点涉及 POSIT 格式在 CIM 宏结构中的应用,主要是为了优化 计算能效 和 提高CIM单元的利用率。以下是每一点的详细解释,结合原文中的具体内容进行更深入的分析。
1. BRPU 使用 POSIT 中的单调1/0位特性,优化 Regime 处理
原文解释(页567右栏):
“a bi-directional regime processing unit (BRPU) that replaces the complicated codec logic with shifting and concatenation logic by using the successive 0/1 coding property of the regime...”
BRPU(双向规程处理单元)工作原理:
- Regime 是 POSIT 格式的一部分,其表示数据的范围(指数部分)。在 POSIT 中,Regime 是通过 单调的 0/1 编码 表示的,例如:
11110
或00001
,它指示了数字的大小范围。 - 传统的 浮点数处理 需要复杂的解码和编码操作来计算 Exponent(指数) 和 Mantissa(尾数)。而在 POSIT 格式中,由于 Regime 的位是单调递增或递减的(即连续的 0 或 1),这使得可以利用 移位操作 和 按位或操作 来代替原来的复杂加减法运算,从而减少计算和功耗。
具体优化:
- 在 BRPU 中,原本需要进行 加法和减法 计算来调整 Regime 值的过程,改为 移位(shift) 和 按位或(OR) 操作。具体来说,如果两个 Regime 值需要相加或相减,BRPU 通过移位操作来调整,然后使用按位或操作来拼接结果,避免了传统解码中的繁重计算。
原文:
“... saving 40.3% of regime processing energy.”
总结:
- 通过利用 Regime 的 1/0单调编码特性,BRPU 避免了传统复杂的解码过程,显著降低了 规程处理的能耗。
2. CPCS 利用闲置位进行关键位预计算(critical-bit precompute)
原文解释(页567右栏底部):
“CPCS detects the weight mantisa bit width to pre-compute and store a logical value into the spare CIM cell...”
CPCS(关键位预计算与存储) 工作原理:
- CPCS 是一种优化方法,它通过在 CIM 单元中利用 空闲位(spare bits) 来存储 关键位(critical bits) 的计算结果。
- 在 POSIT 格式中,Mantissa(尾数) 的位宽是动态的,根据数据的分布和需求可能会变化。例如,如果数据的尾数较小,可能只需要较少的位来表示。
- CPCS 会在数据存储过程中,检测每个权重(weight)的尾数位宽,并将一些关键的位(如 S[1],即权重的最重要的位)预计算出来,并存储在 空闲的 CIM 单元中。这样,计算过程中不需要重新计算这些关键位,而是直接从存储单元中获取,节省了计算资源。
具体优化:
- 预计算关键位并存储在空闲位中,避免了在每个计算周期中重新计算,尤其是对 尾数 需要频繁对齐的情况下,能极大地提升 CIM 单元的计算效率。
原文:
“... improving CIM cell utilization by 63%.”
总结:
- CPCS 通过 空闲位的利用,在 CIM 中 预计算关键位,提高了单元的 计算效率 和 资源利用率,尤其是对于需要高效计算的 动态尾数位宽 数据。
3. CASU 利用尾数对齐的特点,减少加法器树功耗
原文解释(页568顶部):
“CASU uses bit wise or operations to replace bit wise addition if two mantissas have no overlap bits, saving 56.9% of energy...”
CASU(循环交替计算调度单元) 工作原理:
- 在 POSIT 格式中,尾数(Mantissa) 是 动态对齐的,即在进行累加操作时,尾数的 对齐方式 会根据不同的数据而变化。
- 当两个 Mantissa (尾数)进行乘加(MAC)操作时,如果它们的尾数没有 重叠位(即没有相同的位被同时访问或加法操作),那么传统的加法器树(Adder Tree)会进行 逐位加法。然而,如果尾数没有重叠,CASU 会通过 按位或操作(bit-wise OR) 来代替传统的加法操作,因为 OR操作 不需要进行逐位的进位和加法,直接合并两数结果。
具体优化:
- 当两个尾数的 位宽不重叠 时,CASU 使用 按位或操作 替代逐位加法,从而避免了冗余的加法操作,显著 减少了加法器树的能量消耗。
- 在 CASU 中,调度单元会根据尾数的 重叠情况 调整计算顺序,使得更多的尾数不重叠,从而节省了更多的计算资源。
原文:
“... saving 56.9% of energy for the adder tree.”
总结:
- CASU 通过 按位或操作 替代了部分冗余的加法操作,特别是在尾数没有重叠的情况下,大大减少了 加法器树的能量消耗。
总结
这三点的优化措施都围绕 POSIT 数据格式的动态特性进行设计,通过以下方式提高了计算效率和能效:
- BRPU 利用 Regime 的 单调1/0位特性,优化了 规程处理,减少了功耗。
- CPCS 利用 空闲位 存储 关键位,提高了 CIM单元的计算利用率。
- CASU 利用尾数对齐的特点,减少了 加法器树的能耗,通过 按位或操作 优化了尾数计算。
这些创新设计大大提升了 CIM宏结构 在AI计算中的能效和计算能力。
当两个 Mantissa (尾数)进行乘加(MAC)操作时,如果它们的尾数没有 重叠位(即没有相同的位被同时访问或加法操作),那么传统的加法器树(Adder Tree)会进行 逐位加法。然而,如果尾数没有重叠,CASU 会通过 按位或操作(bit-wise OR) 来代替传统的加法操作,因为 OR操作 不需要进行逐位的进位和加法,直接合并两数结果。
这个分析再详细说明一下,可以举案例来说明:
非常好,这是论文中最关键也最巧妙的一点优化,我们来深入分析这个逻辑,再结合一个具体的示例说明为什么可以将加法替换为按位或(OR)操作,从而在POSIT尾数乘加操作中节省功耗。
📌 背景:尾数乘加中的“位对齐”
在计算中(尤其是位串加法),两个乘积的尾数(Mantissa)需要 对齐(shift) 后再相加。常规做法中,即使两个数的位串没有重叠,加法器(Adder)依然会逐位处理所有位,导致无谓的能耗。
论文中统计发现:有66.8%的尾数对齐后是“没有重叠”的,也就是说在某些位上永远只有一个操作数有1,另一个是0,例如下面这个例子。
✅ 举例说明:按位或替代加法
假设两个乘积尾数如下(对齐后):
A: 00011000 ← 这是 W0 × A
B: 00000110 ← 这是 W1 × B
分析:
- 你会发现
A
和B
的 非零位完全不重叠; - 传统加法操作:
A + B = 00011000 +00000110 -------- 00011110
- 实际上,这里没有任何进位发生,两个数中没有同一位都为1的情况。
那么可以直接做:
A | B = 00011000
|00000110
--------
00011110
两者的结果完全一致,但按位 OR 操作是硬件中最简单、能耗最低的逻辑操作之一,而加法操作涉及多个进位链路,是最耗电的逻辑之一。
💡 优化背后的逻辑:
- 当两数没有重叠位时:A + B ≡ A | B
- 省去了加法器的运行 → 减少晶体管切换 → 节省功耗
🧠 CASU 的进一步优化:制造更多“非重叠”
论文不仅用 OR 替代了已有的非重叠情况的加法,还做了更进一步的事:
它通过循环移位或改变计算顺序,故意让 原本部分重叠的尾数变得不重叠,以便更多使用 OR 替代加法。
举例(来自论文的描述):
原始尾数乘积:
MA = W0 × A = 00011000
MB = W1 × B = + 00001100
→ 有两位重叠(中间的两个1)
CASU做了什么?它让 A 延后一位,从 A[0:n] 改为 A[1:n] - A[0],变成这样:
新 MA = W0 × A' = 00110000
原 MB = W1 × B = + 00001100
→ 只剩1位重叠(或甚至无重叠)
最终能让 原本需要2个加法器的场景,只需要 1个加法器 + OR 逻辑来搞定。
📊 论文结果回顾:
- 利用上述机制,CASU 提升了 无重叠尾数比例36.4%;
- Adder Tree 能耗下降了 56.9%(基于 POSIT(8,1) 的实验);
- 是整个架构节能的关键。
✅ 总结
- 前提:尾数对齐后无重叠位
- 替代方式:加法器 → 按位或(OR)
- 原因:A + B ≡ A | B (当没有重叠位时)
- 好处:简化硬件逻辑、降低能耗、提高效率
- 进一步优化:CASU 还通过调度控制制造更多非重叠情况以扩大节能范围