综合面经
AI Infra 面经 (1)
AI Infra 面试真题,涵盖推理优化、算子优化、高性能计算等方向
推理优化 算子优化 高性能计算
C++ 基础知识
- 指针与引用的异同点有哪些?
- static 关键字的用途,分别修饰成员变量和成员函数时的行为差异,以及 static 全局变量与普通全局变量的区别
- 智能指针的种类与用法,shared_ptr 是否具备线程安全性?
- 右值引用的概念及应用场景
- std::move 与 std::forward 的作用及区别
- 拷贝构造函数的参数为何必须采用引用传递而非值传递?
- new 与 malloc 的区别,new 的底层实现机制
- C++ 内存模型概述
- 构造函数为何不能声明为虚函数?析构函数为何建议声明为虚函数?
- 多态的实现方式及底层原理,虚函数表的存储位置;模板多态与模板偏特化
- vector 的扩容策略是什么?为何通常采用 2 倍扩容?
- lambda 表达式的语法与捕获方式
- 锁的类型及使用场景
- 线程间共享内存时,条件变量与互斥锁各自适用于何种场景?二者有何区别?
- 死锁的四个必要条件及预防方法;lock_guard 与 unique_lock 的区别
- 如何实现线程安全的单例模式?
- 如何限制对象只能在堆上创建?
- C++ 程序的编译流程;动态库与静态库的区别
- C++ 如何调用 C 语言编写的函数?
- 进程与线程的区别
- 大端与小端存储的判断方法(至少两种)
高性能计算
- GPU 架构概述
- GPU 全局内存与共享内存(局部内存)的区别,如何有效利用共享内存?
- Cache 的工作原理及提升缓存命中率的方法
- 时间局部性与空间局部性的概念
- 计算密集型与访存密集型的区别
- 常用的性能优化思路有哪些?
- OpenCL 的执行流程
- 编写 OpenCL kernel 时为何应减少分支?掩码的作用是什么?
- OpenCL kernel 的主要参数包括哪些?
- 可分离卷积在 GPU 上为何性能不佳?为何属于访存密集型?
- 算子融合的概念,conv + BN 融合的公式推导及可融合的原因
- 推理框架中卷积算子的常见实现方式
- 产生 bank conflict 的原因及解决方法
- TVM 编译框架的基本概念
深度学习基础
- Batch Normalization 的计算过程、作用,以及训练与推理阶段的差异
- Depthwise 卷积与 Pointwise 卷积的原理
- MobileNet v1/v2/v3 的演进路线,GhostNet 的设计思路,SE 模块的结构
- YOLO v1/v2/v3 与 SSD 的对比
- 全局池化通常用于网络的哪个位置?
- 模型蒸馏的原理与流程
- 量化技术分类,INT8 量化的具体实现:对称/非对称量化的优缺点,量化感知训练及推理细节
- Dropout 在训练与推理阶段的行为差异
- 反卷积与空洞卷积的原理
- GIoU 损失函数的定义与作用
- Softmax 函数的公式及其用于分类的原因
- NMS 的改进方案
编程题
- 实现卷积操作
- 实现计算图
- 实现 Pooling 操作
- 实现 NMS 算法
- 使用 OpenCL 实现矩阵乘法与向量求和