在初次设计与开发 HierBEM 伽辽金边界元算法库时,因为我的目标明确且每次只涉及一条技术路线,采用提灯走夜路的方式——即,只需照亮与看清脚下的路和眼前的一片范围——便足以应对。身处围绕自己的一小团光晕中,在黑暗中试探地移动,就能逐步走向期望的终点。通过理论知识的学习与编程技能的训练,这团光晕的范围会不断扩大,从而让我在探索的过程中拥有更多的自信,提高了代码开发的效率与准确度。

如今我为了提升算法性能,需要进入代码回顾与重构的阶段。由于代码于最初实现时在正交性的设计上缺乏严谨周到的考虑(准确地说是无暇顾及,因为那时的注意力都放在了数学理论的推导与正确性上),以及重构需要变动底层数据结构与逻辑流程,我需要同时处理多条乃至所有已经实现的技术路线。这包括:

  • 用于早期理论验证、未采用 CUDA 加速的满阵组装算法;
  • 初次使用 CUDA 加速、在数值积分点级别上实施并行计算的 H-矩阵组装算法;
  • 基于生产者-消费者模型、在数值积分任务级别上实施并行计算的 H-矩阵组装算法。

这个时候,采用前面“提灯走夜路”的方法会导致开发效率极低,因为视野范围有限,无法统一全局。此时,只有同时做到宏观与细节的全面把控才是有效的办法。这里,我将其称为“皇家宴会厅模式”,即 HierBEM 软件库中所有的一切都应当被照亮,所有的细节都应被清晰地呈现。

在这种新的模式下,需要的专注力与心力自然大大高于以前。这就要求我跳出以前的经验、习惯与舒适圈,以更高的强度投入算法开发工作。当然,这也是提升自身记忆力、耐心与细心水平、软件工程能力的大好时机。

参考:数值算法从理论到实践的三种工作模式