GPU 编程
精通预计深耕 6 个月+星团 AI 基础设施
岗位需求
2 核心 · 0 加分
在职岗位将其列为技能要求
核心岗位薪资带
22k-55k
核心要求岗位的月薪区间
需求趋势
上升 2稳定 0收缩 0
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. GPU 与 CPU 的架构差异是什么?为什么 GPU 适合并行计算?
CPU 面向延迟优化:少量强大核心(几到几十),大缓存、复杂分支预测与乱序执行、深流水线,控制逻辑占大量晶体管,适合串行逻辑复杂、分支密集的任务。GPU 面向吞吐优化:数千个简化核心(ALU 占晶体管大头),以极多线程隐藏访存与指令延迟(没有快cache 就靠并发摊薄),高带宽显存(HBM 数 TB 每秒对比 CPU 内存数百 GB), warp 为单位锁步执行。适合计算密度高、数据并行的任务(矩阵乘、卷积、物理仿真);不适合强依赖串行与分支发散的逻辑。理论峰值算力看核心数乘频率乘每周期指令数,实际看利用率(内存带宽与计算访存比,roofline 模型)。类比:CPU 是几位博士,GPU 是几千个小学生做大量简单算术。能讲晶体管分配与延迟隐藏机制即满分。
2. CUDA 的线程层级模型是怎样的?
kernel 启动形如 kernel 小括号 grid 与 block,三层组织:grid 是全部线程的集合,划分成 block(常用二维三维形状便于映射图像与矩阵),block 内再按 warp(32 线程)调度执行,thread 有唯一标识(blockIdx 加 threadIdx 加 blockDim 计算数据索引)。关键规则:同 block 内线程可通过共享内存与 同步屏障 协作,不同 block 之间默认不通信不保证执行顺序(正因此 block 可任意调度到不同流多处理器,实现透明扩展)。内存层级与层级对应:每线程私有寄存器与本地内存;block 级共享内存(片上 SRAM,低延迟,配合 同步屏障 做数据交换);全局内存(显存,所有块可见,高延迟)加只读缓存与纹理;常数内存广播友好。写 kernel 的套路:先想数据怎么分给块(tiling),再想共享内存怎么复用。能讲三层结构与两级协作边界即达标。
3. 什么是 warp 与分支发散?
warp 是 GPU 调度与执行的基本单位:32 个线程锁步执行同一条指令(SIMT 模式),流多处理器的 warp 调度器每个周期发射一条 warp 指令,靠大量 warp 间切换隐藏显存延迟。分支发散指同一 warp 内线程在条件语句走向不同路径(如 threadIdx 对 2 取模做不同计算),硬件只能串行执行两条路径——先让满足条件的线程执行、其余屏蔽,再反过来,该 warp 的执行时间变成两路径之和,并行度折半甚至更糟(多路发散按路数放大)。规避手段:数据布局与索引设计让相邻线程走同一路径(按 warp 而非按线程组织分支)、把不同分支拆成两个 kernel 分别只处理符合条件的元素(stream compaction 思想)、分支条件尽量编译期确定(模板参数与 kernel 特化)。发散也影响内存访问(相邻线程访问不连续地址同样降速)。能讲锁步与串行执行代价即优秀。
4. 显存访问为什么要合并?共享内存如何优化?
全局内存按 32 或 128 字节事务传输:warp 内 32 线程如果访问连续对齐地址(coalesced 合并访问),一次事务全带走,带宽满血;若散乱访问(跨步、错位、每线程随机地址),每个地址段都要单独事务,等效带宽跌到几分之一甚至几十分之一。优化:线程索引与数据布局对齐(线程 i 访问第 i 个 float)、结构数组转数组结构(同字段连续)、二维访问让最内层维度连续且对齐、避免跨事务的错位起点。共享内存是片上 SRAM(每 block 几十 KB),比全局内存快一个量级:经典用法是分块(tiling)——矩阵乘中每 block 协作把两块子矩阵从全局内存加载进共享内存(合并访问一次),随后从共享内存高频复用做乘加,全局访存量降一个数量级;再配合 padding(多加一列)消除共享内存的 bank conflict(共享内存分 32 个 bank,同 warp 线程撞同 bank 会串行化)。能讲合并原理与 tiling 流程即满分。
5. CUDA 流与异步执行、锁页内存是什么?
默认流串行执行所有操作,多流(stream)让多个 kernel 与拷贝并发:把任务拆到不同流,拷贝引擎与计算引擎重叠(compute 与 copy 双队列),经典流水线是三分缓冲——流 A 在算第 N 批时,流 B 在传第 N 加一批数据,传输与计算重叠提升整体利用率;注意流间同步(event 跨流等待)与伪并发(单拷贝引擎、资源占满时退化串行)。锁页内存(pinned memory,host 侧 page-locked):普通可分页内存做 DMA 拷贝要先拷进引擎可访问的临时锁页区,多一次中转;cudaMallocHost 分配的锁页内存支持直接 DMA,主机与设备带宽翻倍且可配异步拷贝 cudaMemcpyAsync 真正不阻塞 CPU,代价是分配贵且锁定物理内存(不能换页,别滥用)。可合并访问(UVA 与零拷贝映射)按场景选。能讲三分缓冲流水线与 pinned 原理即优秀。
官方文档
1 条工具链与编程指南权威入口,装环境从这开始
推荐教程
1 条深度学习框架的 CUDA 使用规范,张量与流的行为说明
推荐课程
1 条官方体系课程与认证,CUDA 与 AI 加速方向
上手实践
1 条官方示例集,从向量加法到多卡通信的模板代码
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

