Ch16 SIMD 与 GPU 编程 · 阶段测试题 (25 题)¶
测试目标: 全面考察 Ch16 八节: C++/框架(§00) / 硬件(§01) / ARM NEON(§02) / x86 AVX(§03) / GPU CUDA(§04) / Triton TPU(§05) / RISC-V(§06) / Vulkan(§07) 难度分布: ★ 基础 / ★★ 中等 / ★★★ 拔高 / ⭐⭐⭐⭐ 竞赛
Part A 选择题 (10 题, 每题 3 分)¶
A1 (★★)¶
题目: AVX-512 宽度? - A) 128 bit - B) 256 bit - C) 512 bit - D) 1024 bit
答案: C
A2 (★★★)¶
题目: NEON 寄存器数量? - A) 8 (Q0-Q7) - B) 16 (Q0-Q15) - C) 32 (Q0-Q31) - D) 64 (Q0-Q63)
答案: B
A3 (★★)¶
题目: CUDA warp 大小? - A) 16 - B) 32 - C) 64 - D) 128
答案: B
A4 (★★★)¶
题目: Tensor core 主要算的? - A) 卷积 - B) 矩阵乘 - C) ReLU - D) Softmax
答案: B
A5 (★★)¶
题目: H100 FP16 峰值算力? - A) 100 TFLOPS - B) 500 TFLOPS - C) 1000 TFLOPS - D) 5000 TFLOPS
答案: C
A6 (★★★)¶
题目: Roofline 模型两个区域? - A) 计算 / 通信 - B) 计算 / 带宽 - C) 计算 / 缓存 - D) 计算 / 内存
答案: B
A7 (★★)¶
题目: Triton 用什么语言? - A) C++ - B) Rust - C) Python-like - D) Julia
答案: C
A8 (★★★)¶
题目: TPU 脉动阵列 MXU 大小? - A) 32×32 - B) 64×64 - C) 128×128 - D) 256×256
答案: C
A9 (★★)¶
题目: RISC-V 主要优势? - A) 高频 - B) 开源 ISA - C) 内置 AI - D) 大缓存
答案: B
A10 (★★★)¶
题目: Vulkan Compute 的中间表示? - A) PTX - B) SPIR-V - C) MLIR - D) LLVM IR
答案: B
Part B 简答题 (8 题, 每题 5 分)¶
B1 (★★★)¶
题目: SIMD 与 SIMT 的区别。
要点: - SIMD: 一条指令多数据 (CPU) - SIMT: 一条指令多线程 (GPU) - SIMT 含分支处理
B2 (★★★)¶
题目: CUDA 内存层级与典型延迟。
要点: - Register < 1 ns - Shared ~10 ns - L1/L2 ~30 ns - Global (HBM) ~400 ns
B3 (★★★)¶
题目: Flash Attention 的核心优化。
要点: - 分块 attention - 不存中间结果 - 减少 IO
B4 (★★★)¶
题目: occupancy 含义及影响。
要点: - 活跃 warp / 最大 warp - 影响延迟隐藏 - 不必 100%
B5 (★★★)¶
题目: Triton 与 CUDA 编程模型对比。
要点: - CUDA: 显式内存管理 + threadIdx - Triton: 自动 + Python-like - 性能接近, 易用性 Triton 优
B6 (★★★)¶
题目: TPU 与 GPU 架构差异。
要点: - TPU: 脉动 systolic - GPU: SIMT - TPU 高吞吐 matmul, GPU 灵活
B7 (★★★)¶
题目: 量化 INT4 的优势与风险。
要点: - 4× 内存节省 - 70B 模型可单卡 - 风险: 精度损失
B8 (★★★)¶
题目: 量化与稀疏化联合优化的意义。
要点: - 单纯量化精度损失 - 单纯稀疏硬件支持差 - 联合: 内存 + 计算双赢
Part C 编程题 (5 题, 每题 10 分)¶
C1 (★★★)¶
题目: 用 AVX intrinsics 实现向量加法。
#include <immintrin.h>
void add(float* a, float* b, float* c, int n) {
for (int i = 0; i < n; i += 8) {
__m256 va = _mm256_load_ps(a + i);
__m256 vb = _mm256_load_ps(b + i);
__m256 vc = _mm256_add_ps(va, vb);
_mm256_store_ps(c + i, vc);
}
}
C2 (★★★)¶
题目: 写 CUDA kernel: 向量加法。
__global__ void vecAdd(float* a, float* b, float* c, int n) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < n) c[idx] = a[idx] + b[idx];
}
C3 (★★★)¶
题目: 用 Triton 写矩阵乘。
import triton
import triton.language as tl
@triton.jit
def matmul_kernel(A, B, C, M, N, K, BLOCK: tl.constexpr):
pid = tl.program_id(0)
rm = pid // N
rn = pid % N
a = tl.load(A + rm * K : rm * K + BLOCK, BLOCK)
b = tl.load(B + rn : B + rn + BLOCK * N : N, BLOCK)
c = tl.dot(a, b)
tl.store(C + rm * N + rn, c)
C4 (★★★)¶
题目: 实现 GEMM 用 cuBLAS。
import torch
A = torch.randn(1024, 1024, device='cuda')
B = torch.randn(1024, 1024, device='cuda')
C = torch.matmul(A, B) # 内部调 cuBLAS gemm
C5 (★★★)¶
题目: 用 Nsight Compute profile kernel。
Part D 综合题 (2 题, 每题 15 分)¶
D1 (⭐⭐⭐⭐)¶
题目: 设计一个 Flash Attention 优化方案, 目标在 H100 上达 80% 理论 FLOPS。
要点: 1. 分块大小选择 2. warp specialization 3. TMA 异步 copy 4. CUTLASS 模板
D2 (⭐⭐⭐⭐)¶
题目: 综述 2024 年 GPU 推理框架 (vLLM, TGI, TensorRT-LLM, SGLang)。
要点: - vLLM: PagedAttention - TGI: HF 集成, Rust - TensorRT-LLM: NVIDIA 极致 - SGLang: RadixAttention
评分标准¶
| 题型 | 题数 | 总分 |
|---|---|---|
| 选择 | 10 | 30 |
| 简答 | 8 | 40 |
| 编程 | 5 | 50 |
| 综合 | 2 | 30 |
| 合计 | 25 | 150 |
自测建议¶
| 目标 | 分数 | 行动 |
|---|---|---|
| 及格 | 75 | 复习 §00-§03, 默写 SIMD + AVX/NEON |
| 良好 | 100 | 复习 §04-§05, 跑通编程 C1-C3 |
| 优秀 | 120 | 完成综合 D1 (Flash Attn) |