上一周基本只面了两家公司,一家是字节,一家是商汤。这两家面的都是做异构计算加速方面的实习生岗位,只不过字节的岗位是系统部STE部门的异构计算实习生,而商汤的是MIG的计算机视觉见习研究员岗位,更专注于移动端的算法落地工程实现。目前两家都拿到了offer,分享一下面经。
字节一面:45分钟
- 问项目
- cache空间局部性是什么,cache miss发生的原因
- 快排算法的复杂度分析
- IPC在指令较多的时候会变高,此时如何根据两个函数的IPC进行性能比较?
- codesize对函数性能的影响
- 代码cost model的特征映射是怎么做的?
- 汇编指令的单指令及跨指令之间的特征有哪些
- Roofline模型的原理?
- 编译器parser的空间、时间复杂度分析
- 数据流分析的具体过程是什么?
- Top-Down过程的原理是什么?
- AST的构建方法?
- 虚拟内存中地址转换的工作原理是什么?
- 对AI的了解
字节二面:1小时20分钟
- Spec的工作原理是什么?
- 假设一个cache miss发生时的load时间为100ns,由于乱序执行等原因可以线性地处理多个cache miss,那么在一个指令执行window中如何计算最多可线性处理的cache miss数量?
- 写C++代码测量一个单核cpu在1秒内的访存数据数量(内存带宽)
- 测量代码和硬件之间可能存在哪些gap使得测量性能不准?(编译器及硬件角度出发)
- 测量代码中如何消除cache line size对测量结果的影响?
- 测量代码中如何消除page fault对测量结果的影响?
- 测量代码中向量化对测量结果的影响?
- 如何避免编译器优化中的常量传播对测量结果的影响?(顺便问了C++中volatile的原理)
- 如果数组中存的都是全局变量,对测量结果的影响是什么?
- 超线程的硬件原理是什么
- OpenMP原理
- 除了OpenMP还有哪些方法可以使用超线程运行程序?
- 了解apache和nginx吗
-
内存管理中的虚拟地址转换过程,page fault怎么处理
- CPU流水线深度和计算单元数量之间的关系对程序性能的影响(又譬如向量体系结构)
-
用过其他架构的cpu吗?
字节三面Leader面:1小时15分钟
- GCC/LLVM项目中的cost model是怎么做的
- perf原理
- instruction retired是什么
- 同样的函数在不同的编译方式下IPC下降的原因具体有哪些
-
fall-through和jmp的哪种执行方式更快,为什么?
- CPU选择指令的乱序执行的算法?
-
会引起cpu流水线中stall的原因是什么
- 保证cache/memory一致性的实际硬件方法
- iTLB是什么?放在哪里?
- L1 i-cache是什么
-
堆排和快排的复杂度分析和为什么大家都在用快排
-
MMU是什么,虚拟内存的工作原理
- 链接器的原理
- 将可执行目标文件运行后,os层级发生了什么,原理是什么
- fork()函数原理
- fork()之后什么时候子进程会修改.text内容
- 进程切换的具体过程,线程切换时有哪些信息被切换?堆和栈都是线程之间共享的吗?
-
栈的作用
- malloc和free的原理,free如何确定要释放多大的内存空间
-
codesize如何对程序性能产生影响?
- Add/Sub和Dec/Inc之间的性能差异分析及原因
- 对性能会产生影响的汇编代码特征具体有哪些?
- 对代码的cost model需要考虑哪些因素?特征的选取如何完成?
- 如何学习计算机体系结构的知识?csapp说了啥?
- 你觉得自己的缺点是什么
- 手撕代码:小王写了一个makefile,其中有n个编译项编号为0~n-1,他们互相之间有依赖关系,用vector<pair<int,int>> deps表示。例如[a,b]表示b项依赖于a,请写一个程序解析依赖,给出一个可行的编译顺序。
用时5天顺利拿到字节实习Offer。
商汤一面:1小时15分钟
- 问项目
- 用C++写一个卷积函数并在二维矩阵上进行计算
- 使用SIMD向量化优化该函数
- 根据访存优化方法优化该函数(提高cache hit rate)
- 列计算优化(没做出来)
- 如何将计算量从O(MNK^2)降到O(MN)?
商汤二面:40分钟
问项目和相关细节(不太记得了,但是都问得很简单)
全部评论
(8) 回帖