百度提前批高性能计算研发工程师面经(已意向)
楼主985本科,导师来自某国重,高性能计算方向的。楼主技术栈很浅,语言类C++、openMP和CUDA;算法一点。
一面,
1、介绍简历,项目。面试官根据论文和项目里面涉及的东西,问了几个问题。(楼主有2篇EI和3个小项目,所以这部分说的时间比较长,35分钟左右)
2、openMP并行区怎么开?pragma omp parallel......
3、for(int i=0;i<100;i++){sum++;} 在并行区内和串行区的运行结果是否相同?如何变成相同的? 开放式的,依据自己的习惯来做就可以了。一般来说,我习惯设置数据副本,最后合并。(vector也行)
4、GPU中的内存架构是什么?SP共享Register File,SM独享L1和SM内共享内存,所有SM共享L2和全局内存。
5、计算机体系结构了解嘛?说一下cache映射的分类和特点。组相联映射,全相联映射,直接映射。特点……
6、C++熟悉嘛?说一下智能指针的分类和用法。share、auto(C++11弃用)、weak、unique……
7、多态是什么?怎么实现的?父类中同一个方法,在继承的子类中表现出不同的形式。重写和重载……
8、动态链接和动态绑定?动态绑定:程序运行过程中,把函数(或过程)调用与响应调用所需要的代码相结合的过程。动态链接:需要使用时,才装载目标文件。
9、主要学习的是高性能计算什么方面?接触过大型计算系统嘛?主要是并行计算部分。用过一些云计算服务器。(这个问题是第二个问的,但是写到这我才想起来,懒得再改了)
10、还有什么问题?无。
周三下午面试的,下一周的周一,我询问面试官成绩,面试官说一面过了,等待二面面试官通知。第二周周一,收到二面面试官的电话,约好周三二面。
二面,
1、介绍简历,项目。(20分钟,面试官好像对简历和项目很有兴趣)
2、你觉得数学竞赛难不难?哪个部分比较难?(楼主得过一次大学生数学竞赛国二)挺难的,应该是曲线与曲面积分和微分方程部分比较难。
3、C++的stl库熟悉嘛?说一下map的底层构造?底层是红黑树,一种自平衡二叉搜索树。
4、说一下平衡二叉搜索树和红黑树有什么区别?(1)调平机制不同,红黑是二倍,AVL是差值不超过1;(2)RB插入效率高,统计性能好,AVL查找效率高
5、unordered_map的底层是什么?简单介绍一下。哈希表,随机搜索效率高,依赖于哈希映射函数……
6、如果出现了哈希冲突怎么解决?开放定址法,再哈希法,链地址法,建立公共溢出区。
7、论文里面,关于伪随机数生成的部分,怎么没有使用哈希函数,怎么考虑的?哈希函数本身生成的数据的统计均匀性不太好,不能期望其遍历。有限域内的m序列的统计特性要优于哈希函数,所以考虑有限域内m序列作为基础设计伪随机数生成器。
8、介绍计算机的存储架构?寄存器、cache、主存、辅存(硬盘,磁带,光盘,闪存等)
9、CPU中应用程序员可见的寄存器的分类?PC寄存器的作用?3类,通用寄存器、段寄存器、标志和控制寄存器(CPU寄存器一共6类,系统地址寄存器、调试寄存器和测试寄存器程序员不可见)。程序计数器负责存放下一条指令的地址。
10、对操作系统的命令有了解嘛?说说平时常用的命令。windows cd……
11、还有什么问题?无
二面的面试官没有留个人电话,一直联系不上。周五收到三面面试官的电话,约好周六面试。
三面,
1、介绍简历,项目。(10分钟)
2、面试官说他没面过本科生,不知道我应该会什么,就随便问问。接下来就是被单方面的吊打。
3、在main函数前,运行一个函数怎么处理?对不起,我没有接触过这方面的内容。
4、调试程序的时候设置过断点嘛?如何设置条件断点?对不起,没有接触过条件断点。我如果要选择性的看数据,是直接打印出来的。
5、怎么进行堆栈监视?对不起,我没有接触过这方面的内容。
6、程序在内存中的分段?分5段,命令行参数和环境变量、堆区、栈区,数据区,代码区。……
7、你自己说说什么方面的知识比较熟悉吧?对STL库还比较熟悉,其主要有三个部分,迭代器、容器和算法。
8、STL里面的deque是怎么实现的?map中控数组加指针,指针指向缓冲区即分段连续空间。
9、寄存器和cache哪一个更快?cache的实现方式是什么?主存的实现方式是什么?有什么区别和相同?寄存器快,cache是SRAM实现的。主存是DRAM实现的。主存需要刷新,cache不需要。都是断电易失。
10、CUDA里面的内存分类?主要2类,SM独享L1,SM间共享L2。(这个答案不对,面试官提示说不是指的硬件,是CUDA内的分类。答案是分为本地内存和全局内存)
11、对kernel函数有了解嘛?global关键字的作用是什么?在GPU上执行的函数称为CUDA核函数(Kernel Function)。global关键字表示函数在CPU中调用,在GPU中执行。
12、获取GPU允许最大线程数量的函数?cudaGetDeviceProperties
13、说一下贪心算法和动态规划。贪心:不从整体最优上加以考虑,求局部最优解。动态规划:通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推或分治的方式去解决。
14、说一下图搜索算法。BFS、DFS。
13、可以实习嘛?多久?可以,三到六个月吧。
14、还有什么问题?无。
最后问三面面试官,他说他不知道最后能不能过,他要去问问。第三周的周一,面试官回复我说,面试通过了,等待HR联系。
第三周周三的时候,我才和百度的HR联系上。整个过程中,没有和HR联系过,没有联系方式,想起来都感觉有点后怕。周四做了评测,周五拿到正式的意向书。
感谢牛客,感谢大家的面经。