|
| 1 | +# Domain Glossary |
| 2 | + |
| 3 | +本文档定义 C++ 高性能指南项目的核心领域术语,统一中英文表达。 |
| 4 | + |
| 5 | +## Memory Optimization / 内存优化 |
| 6 | + |
| 7 | +### cache-line alignment / 缓存行对齐 |
| 8 | +数据对齐到 CPU 缓存行边界(通常 64 字节,某些 ARM 系统为 128 字节)。 |
| 9 | +目的:避免跨缓存行访问导致的性能下降。 |
| 10 | + |
| 11 | +### false sharing / 伪共享 |
| 12 | +多线程访问同一缓存行的不同变量时,由于缓存一致性协议导致的性能下降。 |
| 13 | +解决方案:使用缓存行填充(padding)将变量隔离到不同缓存行。 |
| 14 | + |
| 15 | +### AOS/SOA / 结构数组 vs 数组结构 |
| 16 | +- **AOS (Array of Structures)**: `struct { float x, y, z; } particles[N]` |
| 17 | +- **SOA (Structure of Arrays)**: `struct { float x[N], y[N], z[N]; } particles` |
| 18 | + |
| 19 | +SOA 布局更利于 SIMD 向量化,AOS 布局更符合面向对象思维。 |
| 20 | + |
| 21 | +### memory alignment / 内存对齐 |
| 22 | +数据地址是其大小的整数倍。对齐访问通常比非对齐访问更快。 |
| 23 | + |
| 24 | +### prefetch / 预取 |
| 25 | +在数据实际使用前将其加载到缓存,隐藏内存延迟。 |
| 26 | + |
| 27 | +## Concurrency / 并发 |
| 28 | + |
| 29 | +### lock-free / 无锁 |
| 30 | +不使用互斥锁的并发数据结构,通过原子操作实现线程安全。 |
| 31 | +特点:即使某个线程被挂起,其他线程仍能继续执行。 |
| 32 | + |
| 33 | +### memory ordering / 内存序 |
| 34 | +原子操作的内存可见性顺序: |
| 35 | +- `relaxed`: 无同步,仅保证原子性 |
| 36 | +- `acquire/release`: 建立同步点 |
| 37 | +- `seq_cst`: 顺序一致性(最强保证) |
| 38 | + |
| 39 | +### SPSC / MPMC |
| 40 | +- **SPSC (Single Producer Single Consumer)**: 单生产者单消费者队列 |
| 41 | +- **MPMC (Multiple Producer Multiple Consumer)**: 多生产者多消费者队列 |
| 42 | + |
| 43 | +SPSC 实现更简单,性能更高;MPMC 更通用但实现复杂。 |
| 44 | + |
| 45 | +### atomic / 原子操作 |
| 46 | +不可分割的操作,要么完全执行,要么完全不执行。 |
| 47 | +C++ 中通过 `std::atomic` 模板提供。 |
| 48 | + |
| 49 | +### spinlock / 自旋锁 |
| 50 | +线程在获取锁失败时循环等待(忙等待),而不是让出 CPU。 |
| 51 | +适用于短时间持锁场景。 |
| 52 | + |
| 53 | +## SIMD / 单指令多数据 |
| 54 | + |
| 55 | +### SIMD (Single Instruction Multiple Data) |
| 56 | +一条指令同时处理多个数据元素。 |
| 57 | +x86 平台:SSE (128-bit), AVX (256-bit), AVX-512 (512-bit) |
| 58 | +ARM 平台:NEON (128-bit) |
| 59 | + |
| 60 | +### vectorization / 向量化 |
| 61 | +编译器自动或手动使用 SIMD 指令优化循环。 |
| 62 | +- 自动向量化:编译器分析循环并生成 SIMD 代码 |
| 63 | +- 手动向量化:使用 intrinsics 或 SIMD 包装库 |
| 64 | + |
| 65 | +### intrinsic |
| 66 | +编译器提供的底层函数,直接映射到特定 CPU 指令。 |
| 67 | +例:`_mm_add_ps` 对应 SSE 的 addps 指令。 |
| 68 | + |
| 69 | +### SIMD width / 向量宽度 |
| 70 | +一次 SIMD 操作处理的数据量: |
| 71 | +- SSE: 4 个 float (128-bit) |
| 72 | +- AVX: 8 个 float (256-bit) |
| 73 | +- AVX-512: 16 个 float (512-bit) |
| 74 | + |
| 75 | +## Build System / 构建系统 |
| 76 | + |
| 77 | +### preset-driven build / 预设驱动构建 |
| 78 | +使用 CMakePresets.json 统一构建配置,确保本地和 CI 环境一致。 |
| 79 | + |
| 80 | +### sanitizer / 消毒器 |
| 81 | +运行时检测工具,发现未定义行为和内存错误: |
| 82 | +- **ASAN (AddressSanitizer)**: 检测内存错误(越界、释放后使用等) |
| 83 | +- **TSAN (ThreadSanitizer)**: 检测数据竞争 |
| 84 | +- **UBSAN (UndefinedBehaviorSanitizer)**: 检测未定义行为 |
| 85 | +- **MSAN (MemorySanitizer)**: 检测未初始化内存读取 |
| 86 | + |
| 87 | +### header-only library / 仅头文件库 |
| 88 | +只需包含头文件即可使用的库,无需编译链接。 |
| 89 | +优点:集成简单;缺点:可能增加编译时间。 |
| 90 | + |
| 91 | +## Performance Measurement / 性能测量 |
| 92 | + |
| 93 | +### benchmark / 基准测试 |
| 94 | +测量代码执行时间的标准化方法。 |
| 95 | +关键要素:预热、多次运行、统计中位数/百分位数。 |
| 96 | + |
| 97 | +### flame graph / 火焰图 |
| 98 | +可视化程序执行时间分布的工具,显示调用栈和时间占比。 |
| 99 | + |
| 100 | +### cache miss / 缓存未命中 |
| 101 | +CPU 在缓存中未找到需要的数据,必须从主内存加载。 |
| 102 | +缓存未命中是性能瓶颈的常见原因。 |
| 103 | + |
| 104 | +### throughput / 吞吐量 |
| 105 | +单位时间内处理的操作数或数据量。通常以 ops/sec、MB/s 表示。 |
| 106 | + |
| 107 | +### latency / 延迟 |
| 108 | +单个操作从开始到完成的时间。通常以纳秒、微秒表示。 |
0 commit comments