ALU (Arithmetic Logic Unit / 算术逻辑单元)

1. 定义

ALU 是 CPU 内部的一个硬件电路模块,负责执行具体的算术运算和逻辑运算。 可以把它想成 CPU 里专门管算数的一个”小工厂车间”——给原材料(操作数)进来,它干完活,把结果送出去。

2. ALU 能做什么

类别操作例子
算术运算加、减、乘、除a + ba * b
逻辑运算与、或、非、异或a & ba | b~a
位移操作左移、右移a << 2a >> 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) 辨析

这是两个完全不同维度的东西,容易混淆:

维度ALUClock Frequency (时钟频率)
是什么一个部件(硬件模块)一个节奏/速度指标
类比工厂里的车间车间里打节拍的节拍器
衡量单位个(一个核心里有几个 ALU)Hz(每秒滴答几次)
影响什么一个周期能并行算几件事每秒能滴答多少次

时钟频率是什么:CPU 内部有个时钟信号(节拍器),每”滴答”一次就是一个时钟周期。

  • 1.5 GHz = 每秒滴答 15 亿次
  • ALU、控制单元、寄存器等所有部件都跟着这个节拍器的节奏工作

一句话区分:ALU 是”干活的车间”,GHz 是”车间里的节拍器打多快”。性能 = 车间数量 × 节拍速度 × 每拍能干多少活。

5. 一个时钟周期里发生了什么

以一条 ADD R1, R2, R3(把 R2 + R3 存入 R1)为例,简化流程:

  1. 取指 (Fetch):从指令缓存取出这条指令
  2. 译码 (Decode):控制单元识别出”这是加法”,操作数在 R2、R3
  3. 执行 (Execute):ALU 接到 R2、R3 的值,做加法 ← ALU 在这一步登场
  4. 写回 (Write Back):ALU 的结果写回 R1

ALU 只是流水线上的一个工位。一个周期里 ALU 通常完成一次运算,但现代设计里有流水线(pipeline),多条指令的不同阶段可以重叠进行。

6. 现代 CPU 的多 ALU 并行

一个 CPU 核心里通常不止一个 ALU,目的是让同一周期内能并行处理多个运算:

  • 例:某 CPU 核心有 4 个整数 ALU + 2 个浮点 ALU
  • 同一周期可以同时算:a+bc+de+fg+h 四个整数加法
  • 这就是指令级并行 (ILP) 的硬件基础

这也是为什么”核数”不等于”算力翻倍”——单核内部的多 ALU 已经在做并行了,加核是另一个维度的扩展。

7. 常见误区

  • ❌ “GHz 越高 CPU 越快” → 不一定,还要看每周期完成的指令数 (IPC) 和核心数
  • ❌ “ALU 数量等于核心数” → 错,ALU 是核心内部的零件,单核就有多个
  • ❌ “ALU 自己能干活” → 不能,它需要控制单元指挥、寄存器提供数据、时钟提供节拍

8. 延伸阅读 / 关联概念

  • 寄存器 (Register):ALU 的数据来源和去处
  • 流水线 (Pipeline):让多条指令的不同阶段并行
  • IPC (Instructions Per Cycle):每周期完成的指令数,与 GHz 一起决定真实性能
  • FPU (Floating Point Unit):专门处理浮点数的”ALU”,常独立存在