岗位描述
角色和期待:
1. 负责 AI 芯片系统软件开发,包括基于 RISC-V CPU 的固件、底层驱动及系统管理功能,支撑芯片启动、运行与调试。
2. 负责但不限于 PCIe、DMA、DDR、ETH、RDMA、I2C 等模块的驱动开发、功能验证、问题定位及性能优化。
3. 负责芯片启动流程、内存管理、中断与异常处理、任务调度,以及固件加载、升级和故障恢复等功能开发。
4. 参与多 Die、多卡及多节点 AI 芯片互联系统的软件设计,支持高速互联、跨芯片数据传输、同步及通信性能优化。
5. 面向 GPGPU 计算场景,与驱动、Runtime 及硬件团队协作,开发任务提交与调度、命令队列、设备内存管理、数据搬运及完成通知等底层功能。
6. 参与 GPGPU 功能验证与性能分析,定位任务执行、内存访问、同步及计算通信协同中的问题。
7. 参与芯片仿真、FPGA 验证及芯片 Bring-up,完成软硬件联调、稳定性测试和技术文档编写。
8. 负责 GPGPU 卡主机侧内核驱动(Host KMD)开发,包括 PCIe 设备初始化、BAR 映射、DMA 传输、中断处理,以及与用户态驱动、设备固件的接口开发和联调。
9. 负责主机侧 GPU 内存与执行上下文管理、任务提交与同步、多进程资源隔离及异常恢复,完成驱动稳定性验证与性能优化。
人才画像:
1. 计算机、电子工程、自动化或相关专业,具备扎实的计算机体系结构和操作系统基础。
2. 熟练掌握 C/C++,具备嵌入式软件、固件或底层驱动开发经验,能够独立完成复杂问题分析与定位。
3. 熟悉 RISC-V 架构,理解特权级、中断与异常、CSR、原子操作及内存访问顺序;熟悉 Cache、内存屏障和 DMA 一致性处理。
4. 熟悉 PCIe、DMA、DDR、ETH、RDMA、I2C 等常用模块的工作原理,具备其中多个模块的实际开发与调试经验。
5. 熟悉 GPGPU 体系结构,至少熟悉一款 NVIDIA 或 AMD GPU 架构,理解 SM/CU、SIMT/SIMD、Warp/Wavefront、线程组织与调度及存储层次。
6. 熟悉 CUDA、HIP 或 OpenCL 中至少一种编程模型,理解 Kernel 启动、异步执行、事件同步及原子操作,能够编写测试程序验证底层功能。
7. 熟悉 GPU 软件栈,理解 Runtime、用户态驱动、内核态驱动与设备固件之间的协作关系;了解命令队列、Doorbell、任务调度、上下文管理及完成通知机制。
8. 熟悉 GPU 内存管理与数据传输机制,理解设备内存分配、地址映射、主机与设备数据交互、P2P 访问及内存可见性。
9. 熟悉 AI 芯片互联场景,包括片间互联、卡间互联和节点间通信;了解超链接等高速互联技术,以及 RDMA、集合通信在 AI 训练与推理中的作用。
10. 熟悉 Linux 开发环境,具备裸机或 RTOS 开发经验,能够使用 GDB、JTAG、日志及性能分析工具,定位任务执行异常、数据错误、同步问题和性能瓶颈。
11. 具备良好的跨团队沟通能力,能够与硬件、验证及上层软件团队协作推进问题闭环。
12. 熟悉 Linux 内核及 PCIe 驱动开发,掌握内核内存管理、并发同步、DMA API、MSI/MSI-X 中断及 ioctl、mmap 等用户态接口,具备内核异常定位与调试能力。
13. 熟悉 GPGPU Host KMD 的核心机制,理解显存管理、GPU 虚拟地址映射、用户内存固定及 IOMMU,掌握任务提交、Fence 同步、上下文与资源生命周期管理,能够处理 GPU Hang、任务超时及设备复位恢复。
加分项:
1. 具备 AI 芯片或 GPU 从仿真、FPGA 到硅后 Bring-up 的完整项目经验。
2. 具备多 Die、多卡互联开发经验,熟悉 NVLink、NVSwitch、AMD Infinity Fabric 或其他高速互联方案。
3. 具备 RDMA/RoCE 驱动开发经验,熟悉 QP、CQ、MR、Doorbell 及相关数据传输流程。
4. 参与过 GPU 驱动、Runtime、设备固件或通信库开发,具备任务调度、内存管理、资源隔离或异常恢复相关经验。
5. 具备 GPGPU 性能调优经验,理解访存合并、占用率、带宽利用率及计算通信重叠,能够分析并优化系统性能瓶颈。
6. 具备 GPGPU Host KMD 实际开发经验,熟悉 DRM 子系统及 GEM、TTM、dma-buf、dma-fence、DRM Scheduler 等相关机制。
7. 具备 GPU 统一虚拟内存、缺页处理与内存迁移,或 SR-IOV、VFIO 等虚拟化与设备隔离相关开发经验。