跳转至

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。

ncu --set full python train.py
# 报告 SM 利用率 / 内存带宽 / tensor 利用

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)