FPGA学习笔记
从面试官的角度聊几句吧。我们招AI编译器工程师,最看重的是候选人能否把编译器技术和硬件架构知识打通。TVM/MLIR是工具,核心考察的是你如何用它们解决实际问题。
对于TVM,除了楼上说的自动调度,我们常会问一些更底层的问题。比如TVM的中间表示(IR)是怎么设计的?Tensor Expression和Schedule是如何分离的?这样设计的好处是什么?可能会让你手写一个简单的TVM IR,或者解释一下Lowering过程(从计算图调度到LLVM/GPU代码)经历了哪些阶段。
MLIR方面,重点是考察你对多层中间表示的理解。为什么MLIR要用Dialect体系?Linalg、Affine、LLVM这些Dialect分别负责什么抽象层次?我们会问:“如果要为我们的NPU添加一个自定义Dialect,你会怎么设计?需要定义哪些操作(Operation)和类型(Type)?” 这考验你是否真正理解了MLIR的可扩展性设计。Pass管理也很重要,MLIR的Pass是如何组织、依赖、运行的?和LLVM的Pass管理器有什么异同?
关于与硬件协同,问题非常开放。比如:“给你一个典型的Transformer层(有MatMul、Softmax、LayerNorm等),在我们的NPU上(假设有专用矩阵计算单元和分散的SRAM),你会制定怎样的算子融合策略?为什么?融合后的kernel在代码生成时,内存布局(Memory Layout)上要注意什么?” 这里没有标准答案,我们想看你的思考过程:是否考虑了数据局部性、计算密度、硬件并行度、以及编译开销的平衡。
最后给个建议:找一两个开源NPU模型(比如Gemmini)或者用TVM的VTA模拟器,实际走一遍从模型导入、调度优化、到代码生成和性能分析的完整流程。把过程中遇到的坑和你的解决方案总结出来,面试时这就是最好的谈资。
