SIMD 与向量指令集(SSE/AVX/NEON/SVE/RVV)

共 19 题
#

1. SIMD 的工作原理,单指令多数据如何在寄存器宽度内并行计算?

A 多条指令同时执行
B 多个核并行
C 多个线程并行
D 一条指令对寄存器内多个数据 lane 同时执行同一运算 ✓ 正确答案
#

2. AoS(Array of Structs)与 SoA(Struct of Arrays)两种数据布局对 SIMD 向量化的影响,为什么 SoA 更易被编译器向量化?

A SoA 使同一字段元素连续存放,可直接向量加载,AoS 需 gather 重组 ✓ 正确答案
B SoA 占用更少内存
C SoA 结构更小
D AoS 更连续
#

3. 给定一段 16 字节对齐的 float 数组,如何用 SSE 一次处理 4 个?

A 2
B 8
C 4 ✓ 正确答案
D 16
#

4. 解释 ARM NEON 在 AArch64 的 v0-v31 寄存器命名规则?

A 128 位 ✓ 正确答案
B 64 位
C 256 位
D 512 位
#

5. 解释 ARM SVE(Scalable Vector Extension)与 NEON 的核心差异,可伸缩性体现在哪?

A SVE 向量长度可伸缩(由硬件 VL 决定),NEON 固定 128 位 ✓ 正确答案
B NEON 支持谓词
C NEON 更宽
D 两者相同
#

6. 解释 AVX-512 mask register k1-k7 的使用?

A 用 bit 控制每个数据元素是否参与运算(元素级掩码) ✓ 正确答案
B 存储地址
C 存整数
D 存浮点
#

7. 解释 SSE/AVX SIMD 寄存器位宽(128/256/512 位)与寄存器数?

A 128 位
B 256 位
C 512 位 ✓ 正确答案
D 64 位
#

8. 解释为何 SIMD 适合数据并行而线程并行适合任务并行?

A 线程适合数据并行
B SIMD 适合任务并行
C SIMD 适合数据并行,线程适合任务并行 ✓ 正确答案
D 都适合任务并行
#

9. 解释为何 x86 从 SSE 升级到 AVX 而非直接上 AVX-512?

A 无法实现 512 位
B 512 位更快
C 兼容性、功耗/降频与产品定位的权衡,AVX 与 SSE 兼容、普及广 ✓ 正确答案
D 编译器不支持
#

10. 解释为何编译器自动向量化(如 -O3 -ftree-vectorize)经常失败?

A 循环太短
B 编译器 bug
C 数据依赖、指针别名(无法证明无重叠)、控制流复杂等 ✓ 正确答案
D 内存不足
#

11. 解释 ARM SME(Scalable Matrix Extension)与 SVE 的层级差异?

A SME 无寄存器
B SME 更慢
C 两者相同
D SME 是二维矩阵扩展(可伸缩 ZA 寄存器),SVE 是一维向量 ✓ 正确答案
#

12. 解释 SIMD intrinsics 编程模型与汇编指令的关系?

A 完全无关
B 每个 intrinsic 通常映射到对应的 SIMD 汇编指令,代码由编译器生成汇编 ✓ 正确答案
C intrinsics 是解释型
D intrinsics 无法编译
#

13. SSE/AVX/NEON 的指令集演进,寄存器宽度(128/256/512)与 AVX-512 的降频问题如何?

A 寄存器太少
B 512 位执行单元功耗大,长时间高负载可能触发降频 ✓ 正确答案
C 无法编译
D 指令太少
#

14. SVE/RVV 的可变向量长度,为何适合 ARM/RISC-V 的异构核心?

A 长度无关无法运行
B 固定宽度更高效
C 让代码长度无关,一份代码在不同宽度的核上按各自宽度运行 ✓ 正确答案
D 只适合单核
#

15. 对齐加载 movaps 与未对齐 movups 的性能差异何时显著,__builtin_assume_aligned 如何帮助编译器生成对齐访存?

A 强制对齐数据
B 告诉编译器指针已对齐,使其生成对齐访存指令(如 movaps) ✓ 正确答案
C 关闭对齐
D 检查对齐
#

16. 横向归约(horizontal reduction),为什么 SSE 求 4 个 float 之和需要 shuffle+add 多步,相对标量求和的开销有多大?

A SSE 没有纵向加法
B 编译器不支持
C 寄存器太小
D 横向归约需把不同 lane 相加,需 shuffle 重排 lane 后逐步 add ✓ 正确答案
#

17. 解释 RISC-V Vector Extension(RVV)vlen 与 vtype 寄存器?

A 向量最大长度
B 缓存
C 分支预测
D SEW(元素宽度)、LMUL(向量长度倍数)等执行参数 ✓ 正确答案
#

18. SIMD 在代码中的应用,编译器自动向量化 vs 手写 intrinsics 如何选择?

A 自动向量化总是更好
B 手写 intrinsics 总是更好
C 两者不可用
D 优先自动向量化,对热点/失败处用手写 intrinsics 补充 ✓ 正确答案
#

19. 图像处理中的饱和运算,paddusb(无符号饱和加)相比普通加法再 clamp 的优势是什么,溢出行为有何不同?

A 更快但结果错误
B 无法向量化
C 结果环绕
D 单条指令完成饱和加,无分支、可向量化;溢出时钳制而非环绕 ✓ 正确答案