池宏正全神贯注地在脑海中进行第N轮电池材料模拟推演,太阳穴因过度消耗精神力而隐隐作痛时,实验室的门被敲响了。
伊辉阳助探进头来:“池助教,屈老师让你现在去3号会议室一趟,急事。”
池宏揉了揉眉心,暂时从那片模拟世界中退出,心中有些疑惑。
屈院士通常不会在他明确表示闭关时打扰他。
他跟着伊辉阳来到3号会议室,一推开门,就愣了一下。
会议室里坐满了人,粗略一看有十几位,都是年轻面孔,脸上带着几分紧张和茫然。
池宏认出其中几个是CIMS中心今年新录取的博士生。
屈院士坐在主位,面色严肃,看到他进来,点了点头:“池宏来了,坐。就等你了。”
池宏找了个空位坐下,低声问旁边一位面生的同学:“什么情况?”
那同学也压低声音:“不知道啊,突然被叫过来,屈老师也没说什么事。”
这时,屈院士清了清嗓子,开口了:“今天把大家叫来,没什么大事。就是你们都是新入学的博士生,博一阶段有不少专业课程要上。”
“我呢,想先了解一下大家的基础知识掌握得怎么样,方便后续因材施教。”
他顿了顿,目光扫过全场,最后落在池宏身上:“我们就来个随堂小测,我问,你们答。从计算机体系结构开始吧。”
众人:“……”
这博一还没开始呢,暑假提前上岗就算了,还一来就考试?
况且这架势,可一点都不像“随堂小测”啊!
提问开始了。
最初的问题确实比较基础——
“冯·诺依曼体系结构的核心思想是什么?”
“简述一下CPU流水线的基本概念。”
这些问题对于能考上青华博士的学生来说并不难,大家都能七嘴八舌地回答上来。
但很快,众人就发现不对劲了。
无论问题多基础,那个自动化系本科毕业的池宏,回答得总是最精准、最全面,甚至还能引申出相关的优化技术和当前的研究热点。
他的表述清晰严谨,仿佛教科书成精。
几位计算机系本硕博一路上来的同学都暗自吃惊:这就是那个传说中的池神?不是自动化本科毕业吗?怎么对计算机底层知识这么熟?比我们还溜?
池宏表面平静,心里却在嘀咕:还好收着讲了,没把后世的多核、众核、异构计算、存算一体那些概念秃噜出来……
随着屈院士的问题逐渐深入,开始涉及具体的工程实践、系统优化、甚至是某些特定架构的优缺点分析时,会议室里的气氛开始变了。
“在分布式存储系统中,如何有效解决False Sharing问题?”
“在设计实时操作系统内核时,优先级反转有哪些主流的预防和解决机制?”
“从编译器优化的角度,谈谈如何更好地利用现代CPU的SIMD指令集?”
问题越来越刁钻,越来越贴近实际科研项目中会遇到的具体难题。
刚才还能对答如流的博士生们,开始卡壳了。
“呃……这个……”
“好像……是通过缓存行对齐……”
“优先级反转可以用优先级继承或者……”
回答变得零碎、不确定,有时甚至需要互相补充才能凑出一个勉强完整的答案。
而几乎每一次,当众人陷入沉默或者回答得不尽如人意时,所有人的目光都会不自觉地投向池宏。
池宏被看得有点不自在,内心吐槽:喂喂喂,你们可是正儿八经计算机系研究生上来的啊!看我这个跨界选手干嘛?
但他还是略作思考。
当被问及一个关于“如何优化特定循环结构以最大化利用CPU缓存 locality”的具体问题时,他忽然站起身,走到会议室前面的电脑前,直接敲起了代码。
一行行代码飞快地出现在投影仪上。
“这个问题用语言描述可能有点抽象,我直接演示一下可能更清楚。”
他边说边极其自然地敲起了键盘。
他一边敲还一边解释:“这里的关键是分块大小BLOCK_SIZE的选取,需要根据CPU的L1 Cache容量和缓存行(Cache Line)大小来定,比如一般是64字节,那么对于int型数据……”
他甚至顺手在旁边用注释列出了计算公式。
写完,他放下笔,略一沉吟,又补充道:“当然,这只是最基础的。”
“在实际开发‘池小司’的运动控制内核时,我们还遇到过编译器自动优化不够理想的情况,需要手动插入Pragma指令来强制向量化,或者使用restrict关键字来辅助编译器进行别名分析……”他又举了一个具体的例子。
稍稍检查后,池宏敲下了CTRL+Enter——
程序顺利运行!
池宏长舒了一口气。
整个过程中,他边写边梳理自己的思路,甚至觉得速度有点慢,耽误大家时间了。
然而,当他回过头,却发现整个会议室鸦雀无声。
所有博士生,包括助教伊辉阳,都目瞪口呆地看着他。
看着屏幕上那工整清晰、直接编译成功的示例,眼神里充满了震惊。
现场直接敲代码来解释?!
还这么快这么标准?思路清晰得像抄书一样!
这真的是临时想出来的?!
而且他居然还真的在实际项目里搞过这种级别的优化?!
屈院士脸上的笑容越来越明显,几乎要藏不住了。
终于,在一连串高难度问题都被池宏轻松化解后,屈院士满意地点了点头,环视一圈其他略显沮丧的博士生们:
“好了,我看考得差不多了。情况大家也看到了。”
“池宏同学虽然本科刚毕业,在你们当中专业看似不对口。”