1. CUDA面试精选20题解析:从基础到高阶实战
在GPU加速计算领域,CUDA编程能力已成为衡量开发者水平的重要标尺。这套精选的20道面试题不仅覆盖了CUDA核心概念,更通过独特视角考察候选人对并行计算本质的理解。我曾用这些题目筛选过数百名候选人,发现能完整回答其中15道以上的开发者,在实际项目中往往表现出色。
1.1 内存体系深度拷问
共享内存与L1缓存的相爱相杀
"同一Block内的线程是否共享L1缓存?"这道题看似简单,却暗藏杀机。根据Volta架构白皮书,SM(流式多处理器)上的L1缓存确实被同一Block内的所有线程共享,但更关键的是要理解其与共享内存的物理关系:
cuda复制// Fermi架构的缓存配置示例
cudaDeviceSetCacheConfig(Func, cudaFuncCachePreferShared);
// 可选的配置模式:
// - cudaFuncCachePreferNone (默认)
// - cudaFuncCachePreferShared (48KB共享内存+16KB L1)
// - cudaFuncCachePreferL1 (16KB共享内存+48KB L1)
实际项目中,矩阵乘法优化时就需要权衡:当共享内存需求不大时,调大L1缓存能显著提升全局内存访问性能。我在优化卷积神经网络时,通过调整这个比例获得了23%的速度提升。
关键陷阱:有些候选人会混淆"共享内存是软件可控的,而L1缓存是硬件自动管理的"这一本质区别。在Ampere架构中,L1缓存的行大小变为128字节(Volta是32字节),这对合并内存访问提出了新要求。
1.2 执行模型精要
Warp调度背后的魔法
"为什么说Warp是CUDA执行的基本单位?"这个问题需要从硬件层面解释。每个SM包含:
- 4个warp调度器(Maxwell到Turing架构)
- 每周期可发射2条指令(独立线程调度)
- 32个CUDA核心/warp
当面试者能画出类似下面的执行流程图时,我会给额外加分:
code复制Warp 0: INS1 -> INS2 -> ...
Warp 1: -> INS1 -> ...
Warp 2: -> INS1 -> ...
