L2·专家经验

计算与内存 — 专家经验

Compute & Memory

资深工程师的深度洞察

核心抽象:指令执行与存储6 分钟阅读2,029 字更新于 2026/09/19

专家经验

1. 深入 CPU 微架构

超标量执行: 现代 CPU 每个周期可发射 6 条微操作到 8 个执行端口。

乱序执行: 当一条指令因数据未就绪而无法执行时,CPU 会跳过它,先执行后面已准备好的指令。

分支预测: 现代处理器的分支预测准确率可达 95-98%,一次预测失败浪费 14-19 个时钟周期。

2. CPU 性能计数器的使用

bash
perf stat -e cycles,instructions,cache-misses,branch-misses ./my_program

关键指标:

  • IPC > 3:优秀
  • IPC 1-3:一般
  • IPC < 1:很差

3. 内存带宽 vs 延迟

  • 延迟:从请求到收到第一个字节的时间(~100ns)
  • 带宽:单位时间内可以传输的数据量(~50-100 GB/s)

高延迟可以通过内存级并行(MLP)来隐藏,但带宽不足无法通过软件优化解决。

4. 缓存一致性协议

MESI 协议:

  • M(Modified):已修改,独占
  • E(Exclusive):独占,与内存一致
  • S(Shared):共享
  • I(Invalid):无效

5. TLB 与虚拟内存

使用大页(2MB 或 1GB)可以显著减少 TLB 压力:

c
void *ptr = mmap(NULL, size,
    PROT_READ | PROT_WRITE,
    MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB,
    -1, 0);

6. 内存级并行

c
// 高 MLP 代码
float dot_product_mlp(float *a, float *b, int n) {
    float sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
    for (int i = 0; i < n; i += 4) {
        sum0 += a[i]   * b[i];
        sum1 += a[i+1] * b[i+1];
        sum2 += a[i+2] * b[i+2];
        sum3 += a[i+3] * b[i+3];
    }
    return sum0 + sum1 + sum2 + sum3;
}

7. 性能分析技术

bash
perf record -F 99 -g -- ./my_program
perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg

8. 缓存无关算法

c
void transpose_recursive(float *dst, float *src, int n, int dst_stride) {
    if (n <= 32) {
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                dst[j * dst_stride + i] = src[i * dst_stride + j];
    } else {
        int half = n / 2;
        transpose_recursive(dst, src, half, dst_stride);
        // ... 递归处理四个象限
    }
}

9. 硬件事务内存

c
#include <immintrin.h>
void increment_counter() {
    unsigned status = _xbegin();
    if (status == _XBEGIN_STARTED) {
        shared_counter++;
        _xend();
    } else {
        pthread_mutex_lock(&mutex);
        shared_counter++;
        pthread_mutex_unlock(&mutex);
    }
}

10. GPU 内存架构

内存类型大小延迟带宽
寄存器256/线程~1 cycle极高
共享内存48-164KB/SM~20-30 cycles极高
L1 缓存与共享内存共享~30 cycles
全局内存数 GB-数十 GB~400-600 cycles极高

11. 专家级性能调优工作流

1

确定瓶颈类型(前端、后端、分支、内存)

2

定位热点(火焰图、VTune)

3

分析根因

4

实施优化

5

验证效果

黄金法则:

  • 先测量,再优化
  • 关注最大的瓶颈
  • 算法优化优先于微优化
  • 保持代码可维护性

交互沙盒

亲手操作验证本层概念,沙盒状态可编码进 URL 分享。

学习资源

推荐书籍(3 本)

Computer Organization and Design

计算机组成与设计的经典教材,从加法器等基础组件到完整处理器的设计。

查看详情

Computer Systems: A Programmer's Perspective

从程序员视角理解计算机系统,涵盖寄存器、内存、并发等底层概念。

查看详情

Digital Design and Computer Architecture

从数字逻辑到计算机体系结构,详细讲解寄存器文件和状态机的设计。

查看详情

经典论文(3 篇)

The Flip-Flop: A Historical Perspective

触发器发展历史的综述论文,从 RS 触发器到 D 触发器的演进。

阅读论文

Synchronous Design Methodology

同步设计方法论的经典论文,阐述时钟同步和状态机设计原则。

阅读论文

Register Transfer Language and Computer Design

寄存器传输语言(RTL)和计算机设计的早期论文,奠定现代硬件描述语言基础。

阅读论文