小鹏汽车 AI Infra 实习
Q: CPU、GPU、NPU的优化差异及对应场景?
三种处理器的架构哲学完全不同,优化策略必须匹配其硬件特性:
CPU —— 延迟优化、复杂逻辑
| 特性 | 详情 |
|---|---|
| 设计哲学 | 最小化单线程延迟(大缓存、深流水线、乱序执行、分支预测) |
| 核心数 | 4-128核,每核功能强大 |
| 内存层次 | L1(32-64KB) → L2(256KB-1MB) → L3(数十MB) → DRAM |
| 典型带宽 | DDR5 ~100GB/s |
优化方向:
- SIMD向量化:AVX-512(x86)/NEON(ARM)一次处理16个float,加速4-16倍。
- 缓存友好:数据layout按访问顺序排列(行优先/列优先)、loop tiling、避免cache thrashing。
- 多线程+亲和性:OpenMP/pthread,绑核避免NUMA跨节点访存。
- 编译器优化:-O3、PGO(Profile-Guided Optimization)、LTO(Link-Time Optimization)。
适用:数据预处理/后处理、小batch推理、逻辑复杂的控制流、延迟敏感的在线服务。
GPU —— 吞吐优化、大规模并行
| 特性 | 详情 |
|---|---|
| 设计哲学 | 最大化吞吐(数千核心、SIMT、大量线程隐藏延迟) |
| 核心数 | 数千CUDA Core + 数百Tensor Core |
| 内存层次 | Register → Shared Memory(192KB/SM) → L2(40-50MB) → HBM |
| 典型带宽 | A100 HBM: 2TB/s,H100 HBM: 3.35TB/s |
优化方向:
- 最大化Occupancy:平衡寄存器/共享内存使用,让尽量多的warp驻留。
- 合并内存访问:连续地址、向量化读写(float4)。
- 共享内存利用:缓存热数据、减少全局内存访问。
- 减少Warp Divergence:连续线程走同一分支。
- Tensor Core:FP16/INT8矩阵运算加速8-16倍。
适用:训练、大batch推理、大规模矩阵运算、任何可并行化的计算密集任务。
NPU —— 能效优化、固定模式加速
| 特性 | 详情 |
|---|---|
| 设计哲学 | 特定AI工作负载的极致能效比 |
| 计算单元 | 专用矩阵乘单元(如华为Cube 16×16)+ 向量处理单元 |
| 内存管理 | 软件显式管理(类似早期DSP) |
| 典型能效 | 5-10 TOPS/W(vs GPU 1-2 TOPS/W) |
优化方向:
- 算子适配硬件:将计算映射到Cube/Vector单元的原生支持格式。
- 数据搬运优化:显式管理Local Memory的数据搬入搬出(MTE/DMA)。
- 流水线设计:搬入→计算→搬出三级流水overlap。
- 算子融合:减少中间数据在各级buffer间的搬运。
适用:端侧/车载部署(功耗约束严格)、固定模型的高效推理。
核心差异总结:GPU重并行度和带宽,CPU重延迟和灵活性,NPU重能效比和固定模式加速。选型根据:延迟要求、功耗预算、算法灵活性需求综合决定。
Q: 手撕CUDA:在uint8数组中找第K大的值?
(编程题)
Q: 手撕:二叉树最右节点?
(编程题)