开发大规模数值算法的建议
结合我在数值算法开发中的经验与体会,总结出如下几点建议供大家参考。
-
基于仅仅数个单元或者是降维后的超小模型进行有限元、边界元等大规模数值算法的理论验证与性能测试是极为重要的开发手段与实践方法。
-
大规模数值算法的开发、调试与验证应当脱离诸如Octave、Matlab、Python这类虽然开发与上手方便但却运行性能极差的编程语言,转而迁移到具备高度抽象能力与高性能的C++语言上来。由此带来的数个数量级的效率提升,有助于快速找出潜在的数学理论或编程实现中的错误。这一点类似于SpaceX采用的通过多次“设计、开发、测试”迭代来实现产品性能的快速提升与成本的降低。当然,为了用好C++编程语言,充分利用其所提供的模板技术与泛型编程思想,需要开发者付出远大于使用Octave、Matlab、Python这类工具所需的努力、细心与谨慎。
-
充分使用C++提供的assertion与exception机制,践行defensive programming。
-
将关于算法原理与流程的描述融入到代码中,践行literate programming。
-
“工欲善其事,必先利其器”。要有高级的开发工具、编译系统、文档工具、性能分析与单元测试工具为大规模数值算法的开发提供支撑。否则,心有余而力不足,收效也会大打折扣,甚至根本无法实现既定的目标。