静地听着,脸上没有任何表情,既不点头,也不摇头。
会议室里的气氛,随着刘毅讲解的结束,再次陷入一种古怪的安静。
所有人的目光,都聚焦在了许燃身上。
刘毅推了推眼镜,心里有些打鼓。
这套方案他自信是毫无破绽的。
这位新来的组长,难道还能挑出什么毛病不成?
许燃终于动了。
他站起身,走到会议室前方巨大的白板前,拿起一支黑色记号笔。
这个动作让所有人都愣了一下。
“刘师兄。”
许燃开口了,声音不大,却清晰地传到每个人耳朵里。
“你的架构很规范,很标准。”
他先是给了一句肯定。
刘毅刚想松口气,许燃的下一句话,却让他全身的肌肉瞬间绷紧。
“但这是给‘桃宝’、‘狗东’这种商业软件设计的架构。
我们的目标是科学计算,是国之重器,追求的不是高可用、易维护,而是极致,是压榨出硬件最后一丝性能的极致效率。”
话音落下,整个会议室鸦雀无声。
周振华脸上的笑容僵住了。
刘毅的脸色微微一变。
许燃没有看他们,他转身面对白板,手中记号笔的笔盖被“啪”一声拔开。
他没有直接说刘毅的方案哪里不好,而是提出了第一个问题。
“第一个问题,数据结构。
你的方案里完全没有提。
我要知道,飞机表面被离散成上亿个网格点,这些数据在内存中如何组织?
你考虑过cpU的缓存行对齐来避免伪共享问题了吗?”
“嗡!”
刘毅的脑袋里像是被狠狠敲了一下。
缓存行对齐?
伪共享?
瞬间刺破了他方案华丽架构的外壳!
这是只有最顶尖的高性能计算专家,在进行底层优化时才会去死磕的细节!
对于习惯了应用层开发的程序员来说,这几乎是知识盲区!
他引以为傲的微服务、docker,在这些底层硬件效率问题面前,听起来像个笑话。
冷汗瞬间从他的额角渗了出来。
不等他回答,许燃的第二个问题接踵而至。
“第二个问题,多线程模型。
你说用c++,无非就是用标准库里的std::utex或者std::lock_guard来给共享数据加锁。
但我们的计算场景,是典型的多生产者-单消费者模型。
每次加锁解锁,都意味着用户态到内核态的切换,会带来多大的上下文开销?
为什么不用基于cAS原子操作的无锁队列?”
如果说第一个问题只是让他震惊,第二个问题就让他感到了恐惧!
无锁编程!
这在程序员的世界里,堪称金字塔尖的屠龙之技!
难度极高,稍有不慎就会导致逻辑崩溃,但一旦成功,带来的性能提升是碾压性的!
这个搞应用数学的,怎么会对计算机并发编程的底层原理,理解到这种妖孽的程度?
会议室里,几位教授的脸色已经变了,他们看着许燃的背影,眼神里充满了骇然。
许燃仿佛没有看到这一切。
他的声音依旧平稳,提出了第三个,也是最致命的一个问题。
“第三个问题,算法。
这是核心。
我看到你的架构图里,‘模型计算’只是一个黑盒子。
核心的偏微分方程求解器,你准备用传统的有限元法(FE)还是有限差分法(Fd)?
这两种方法,时间复杂度都是o
