ALU (Arithmetic Logic Unit / 算术逻辑单元)
1. 定义
ALU 是 CPU 内部的一个硬件电路模块,负责执行具体的算术运算和逻辑运算。 可以把它想成 CPU 里专门管算数的一个”小工厂车间”——给原材料(操作数)进来,它干完活,把结果送出去。
2. ALU 能做什么
| 类别 | 操作 | 例子 |
|---|---|---|
| 算术运算 | 加、减、乘、除 | a + b、a * b |
| 逻辑运算 | 与、或、非、异或 | a & b、a | b、~a |
| 位移操作 | 左移、右移 | a << 2、a >> 1 |
| 比较 | 等于、大于、小于 | 用于分支跳转的判断 |
注意:ALU 只负责”算”,不负责”记”。中间数据存在寄存器(Register)里,ALU 从寄存器读操作数、把结果写回寄存器。
3. ALU 在 CPU 中的位置
CPU 核心内部大致由几类部件协作:
┌─────────────────────────────────┐
│ CPU 核心 │
│ │
│ 控制单元 (CU) ← 指挥做什么 │
│ 寄存器 (Registers) ← 临时记数据 │
│ ALU ← 真正干算数活的车间 │
│ Cache (L1/L2) ← 拿数据快的地方 │
│ │
└─────────────────────────────────┘
- 控制单元 (CU):译码指令,告诉 ALU 这次该做加法还是与运算
- 寄存器:ALU 的”原料仓”和”成品仓”
- ALU:执行运算本身
4. ALU vs Clock Frequency (GHz) 辨析
这是两个完全不同维度的东西,容易混淆:
| 维度 | ALU | Clock Frequency (时钟频率) |
|---|---|---|
| 是什么 | 一个部件(硬件模块) | 一个节奏/速度指标 |
| 类比 | 工厂里的车间 | 车间里打节拍的节拍器 |
| 衡量单位 | 个(一个核心里有几个 ALU) | Hz(每秒滴答几次) |
| 影响什么 | 一个周期能并行算几件事 | 每秒能滴答多少次 |
时钟频率是什么:CPU 内部有个时钟信号(节拍器),每”滴答”一次就是一个时钟周期。
- 1.5 GHz = 每秒滴答 15 亿次
- ALU、控制单元、寄存器等所有部件都跟着这个节拍器的节奏工作
一句话区分:ALU 是”干活的车间”,GHz 是”车间里的节拍器打多快”。性能 = 车间数量 × 节拍速度 × 每拍能干多少活。
5. 一个时钟周期里发生了什么
以一条 ADD R1, R2, R3(把 R2 + R3 存入 R1)为例,简化流程:
- 取指 (Fetch):从指令缓存取出这条指令
- 译码 (Decode):控制单元识别出”这是加法”,操作数在 R2、R3
- 执行 (Execute):ALU 接到 R2、R3 的值,做加法 ← ALU 在这一步登场
- 写回 (Write Back):ALU 的结果写回 R1
ALU 只是流水线上的一个工位。一个周期里 ALU 通常完成一次运算,但现代设计里有流水线(pipeline),多条指令的不同阶段可以重叠进行。
6. 现代 CPU 的多 ALU 并行
一个 CPU 核心里通常不止一个 ALU,目的是让同一周期内能并行处理多个运算:
- 例:某 CPU 核心有 4 个整数 ALU + 2 个浮点 ALU
- 同一周期可以同时算:
a+b、c+d、e+f、g+h四个整数加法 - 这就是指令级并行 (ILP) 的硬件基础
这也是为什么”核数”不等于”算力翻倍”——单核内部的多 ALU 已经在做并行了,加核是另一个维度的扩展。
7. 常见误区
- ❌ “GHz 越高 CPU 越快” → 不一定,还要看每周期完成的指令数 (IPC) 和核心数
- ❌ “ALU 数量等于核心数” → 错,ALU 是核心内部的零件,单核就有多个
- ❌ “ALU 自己能干活” → 不能,它需要控制单元指挥、寄存器提供数据、时钟提供节拍
8. 延伸阅读 / 关联概念
- 寄存器 (Register):ALU 的数据来源和去处
- 流水线 (Pipeline):让多条指令的不同阶段并行
- IPC (Instructions Per Cycle):每周期完成的指令数,与 GHz 一起决定真实性能
- FPU (Floating Point Unit):专门处理浮点数的”ALU”,常独立存在