🖥️体系结构 ETH 2024笔记
type
status
date
slug
summary
tags
category
icon
password
AI summary
什么是Computer Architecture?


传统的Computer Arch只包括中间两层: SW/HW Interface和Micro-architecture,但是现在为了效率,性能必须将整个视野拓宽,必须软硬件协同设计。
设计目标

Compute Arch的目标:
- 性能
- 能效
- 性能/能效 比
Different Platforms, Different Goals
脉动阵列:用于矩阵乘法的架构, TPU用的架构
现在的公司认为自己可以定制硬件可以更匹配他们的软件栈,也可以调整软件来适应硬件,实现软硬件协同设计,提升性能,降低总拥有成本。

- 模型变得越来越大,单个GPU无法满足,因此需要多个GPU配合,多GPU之间的bandwidth/latency往往成为瓶颈,因此GPU相互连接变得非常重要 - NvLink
- 就是在GPU内部,也有很多互连 - NOC

- Cerebras 晶圆大小的芯片
- 非常多的核心
- 大芯片更容易出错(物理上),需要有机制绕过这些错误的部分
- 只有45G SRAM,相对它的面积来说,小了 ^270795
- 存内计算 Opmem公司。 每个dram bank旁边放一个通用处理器
- 三星。在DRAM旁边放了acceclerator,可以在数据不移出DRAM的情况,作mma
- alibaba,类似的,在每个bank旁边都有一个Processor
- 和HBM紧密相连的FPGA
- 3D-Stack技术,在DRAM下面放处理器,不需要将数据搬远离DRAM。 3D-DRAM
- Specialize as much as possibile,也就意味着更难拥抱变化。 就像我前司的芯片。LLM改变了一切。
追求的目标:
- 鲁棒性,防止不可预见的后果,因为这些芯片将被用在各个场景做决策。
- 在未来会更重要,因为将在很多重要场景下被使用。航天....
- 可持续于高能效
- 基因组分析也是一个数据增长极快的领域
- 应用领域和使用场景决定了如何设计架构,通用处理器是一种浪费.
- 摩尔定律。慢慢失效
- scaling law: 缩小晶体管的大小,可以降低晶体管的激活电压,同时可以降低能效。但是这一趋势已经停止,因为我们已经达到物理极限。
- 这使得架构方面的工作更重要


- 作为架构师
- 往下需要考虑采用哪些技术,会面临哪些挑战。
- 往上需要考虑芯片上跑得什么程序, 五年后跑的又是什么程序

- 即使上层和下层都没有改变,把中间做好,让上层和下层沟通更流畅,也能带来很大提升。
什么限制了我们的计算?

- memory and communication
Memory and Storage
Why is memory important?
- perfmance
- energy
- scaling challenge(物理极限)

- 超过95%的面积用于存储和移动数据
- 对于AI,数据的增长速度超过计算的增长速度
- 低精度,同时减少了数据搬运同时也减小了计算单元的复杂度. GPU中,从fp32 -> fp16 -> fp8, even fp4
- 对于 数据库,基因组测序多个领域,都是memory 瓶颈
- memory system的现状
- DRAM不能满足所有需求
- 出现了一些关于memory的新技术,比如持久化的memory + storage Major Trends:
- more capacity, bandwidth
- 数据密集的应用
- 多核
- main memory is key design concern
- DRAM 技术的scaling趋于停止

- 计算核心scaling相比memory来说更简单
- 意味着memory capacity per core实在下降的
- 带宽和延迟更甚
- 曾经对memory的指标是成本,一个单位面积能放小多少晶体管
- amdahl定律, 能够完美并行的程序不存在,因此latency也很重要
- 如果只有50%的能并行,无限多的core,也只能提速2倍
- 容量和延迟的trade off
- 要latency低,走线就需要更短,更直
- 走线更短,更直,就没法走更多的线
- latency的存在使得我们为系统增加了很多复杂性
- prefetch
- pipeline

- 处理器基本都在等数据
- 3d 堆叠

- 移动设备65%能耗来自memory
- 大型边缘设备中,90%的能耗来自memory
- 电容为了保持retention time,不能过小,如果过小,就会需要频繁刷新,能耗就会提升.
- 增加chip的density,故障率也就更高 (scaling)
新技术:
Type of Memory | Characteristics | ㅤ |
3D-Stacked DRAM | 高带宽 | 小容量 |
Reduced-Latency DRAM | 低时延 | 高成本 |
Low-Power DRAM | 低功耗 | 高成本,高时延 |
Non-Volatile Memory | 大容量 | 高时延 |

- 多核共享memory,会有复杂的一致性问题需要解决, 可能由memory controller解决

- 异构系统中,不同的processor共享DRAM,也需要memory controller解决很多问题
- cpu对latency非常敏感
- gpu对latency相对没那么敏感,可以通过切换wrap来缓解问题

How Do We Solve The Memory Problem
- 更加只能的memory / controller
- 消灭它,不用dram
- 拥抱,设计精妙异构系统,使得能够享受到不同部分的好处,而不享受坏处
Solution 1: New Memory Arch
- memory-centric system design Solution 2: Emergiing Memory Tech
- 新的memory技术(物理上的),比DRAM更好的方案 Solution 3: Hybrid Memory System


- Data-aware的DRAM
- 针对DNN,考虑到其对错误的容忍程度相对其它应用较高,可以设计低功耗,低时延,但是更容易出现错误的DRAM.

当前computing arch

- 在数据这块很糟糕:
- 存储数据和搬运数据都是为了计算
- 是processor-centric ,而不是 data-centric
- 没有利用大量数据的优势
- 设计是Human-driven 而不是 data-driven
- 对应用数据不感知,(EDEN就是数据感知的)

- 数据感知的arch,应该对在上面跑的应用有更多的考虑,比如稀疏性呀,或者关键计算(attention的softmax)

- 预取:提前将数据取到cache/reg,而不是等到真正需要计算用到时候,再发现cache miss。

- corss-layer协同优化,软件可以将计算/存储的一些特性,告诉硬件,硬件拥有了更多信息,可以做更智能的动作。


Simulating (Memory) Systems
Ramulator
Memory-Centric Computing
The Problem
Processing of data is performed far away from the data
现在的数据量超过我们现在的 storage/memory 能力,communication能力
A New Paradigm
- enable computation with minimal data movememnt
- 在data所在的地方进行compute
- 让整个架构更加的data-centric
Processing-in-Memory Landscape Today
- 将processor放在dram旁边,甚至每个dram bank旁边都放一个processor
- CXL-Memory
Two Approaches:
- Processing near Memory
- 本质上processor和memory依然是独立的两个部件
- Processing using Memory
- 设计拥有计算能力的memory
Today's Systems: Bulk Data Copy

上图描述了一个memcpy。将白色的一个page拷贝到灰色。数据走向:
DRAM -> memory controller -> L3 -> L2 -> L1 -> CPU -> ...... -> L3 -> memory controller -> DRAM (即使用DMA, 至少也需要到memory controller)
- 高时延
- 带宽占用高,4. 冗余的数据搬运
- cache 污染,因为数据会走cache 过一遍
Future Systems: In-Memory Copy
为什么不直接在memory本身里面做呢

- low latency
- 不占用带宽,没有额外搬运
- 没有cache污染 并且更快,能耗更低
RowClone: In-DRAM Row Copy


Row A -> Row Buffer -> Row B
这个可以通过一些黑魔法改造成品DRAM实现。
Row-Clone: Inter-Bank


bank间的数据直接拷贝:
- bank A 读模式
- band B 写模式
- A的数据通过bank 间互连的总线,直接给到B 目前还没有这样的DRAM
Low-Cost Inter-Linked Subarrays

In-DRAM AND/OR

memory内的and/or逻辑
SIMDRAM 框架

左边是用户的通用逻辑
中间是针对SIMDRAM的指令
- ACT 激活一行
- PRE, Precharge, 关闭当前活跃行并清理缓冲区...
这些指令由memory controller执行发送给DRAM
PUD System
Processing-In-System
最大的问题是DRAM的访问粒度太大且相对固定。 ^5fcaff
- SIMD利用率低,因为很多使用我们的计算需要的SIMDA计算规模没浙大,就需要进行mask
- col之间的计算很难
- 编程模型的挑战


理想情况:程序员只用写high-level的kernel,剩下的分析和代码生成工作交给compiler去完成
MIMDRAM

- 更小的粒度,在subarray的粒度上操作DRAM,而不是Row
- 不同数据执行不同的命令 Multi-Inst-Multi-Data
- 更低level的数据交流,
- 更好的可编程性,当前向量化ISA的指令位宽已经由512,比如AVX512

compiler分析出可以向量化的部分, 生成MIMDRAM指令

Other work

现在的DRAM其实也有一定程度上的计算能力,通过一些黑魔法,比如连续快速令激活两个相邻行,或者改变电压。
有能力,不代表可以编程,并且成功率不是100%。
DRAM还能做什么
- 随机数生成,超过DRAM设置的安全访问间隙就去访问指定位置,存在物理上的随机性
- 不可能克隆函数,上面提到的随机性,对于每一片DRAM都有各自独特且固定的pattern,这可能是由工艺,各种因素导致的,可作为设备独一无二的签名。
- 把DRAM当作look-up table
其他类型的memory呢?
也存在类似的工作
存内 Crossbar 计算

利用基尔霍夫定律进行gemv计算, 电阻阻值是weight, 电压是输入,电流是结果

Processing near Memory

- 3D堆叠, 将logic放在DRAM上方

Prev
DeepSeek-v3 模型笔记
Next
torch memory planning
Loading...