很少有科学软件开发人员了解好的设计原则,因此,如果这个答案有点冗长,我深表歉意。从软件工程的角度来看,科学软件开发人员的目标是设计一种解决方案,该解决方案应满足一系列经常相互冲突的约束。
这是这些约束的一些典型示例,可能会应用于稀疏矩阵库的设计:
- 一个月内完成
- 在笔记本电脑和多个工作站上正确运行
- 高效运行
科学家逐渐关注软件工程的其他一些常见要求:
- 文档(用户指南,教程,代码注释)
- 可维护性(版本控制,测试,模块化设计)
- 可重用性(模块化设计,“灵活性”)
您可能需要或多或少的这些要求之一。如果您想获得Gordon Bell的性能奖,那么即使只有零点几分都是有意义的,而且很少有评委会评估您的代码质量(只要您可以说服他们是对的)。如果您试图证明在共享资源(例如集群或超级计算机)上运行此代码的合理性,那么通常您必须捍卫关于代码性能的主张,但是这些主张很少非常严格。如果您想在期刊上发表一篇描述您的方法所带来的性能提升的论文,那么您就理所当然地要比竞争对手更快,而要想获得更好的可维护性和可重用性,必须权衡20%的性能。
回到您的问题,“足够的设计”,只要有足够的开发时间,就不应牺牲性能。如果目标是使代码尽可能快地运行,那么应该围绕这些约束来设计代码。您可能会使用诸如代码生成,内联汇编之类的技术,或者利用经过高度调整的库来帮助您解决问题。
但是,如果您没有足够的开发时间怎么办?有什么好吃的?好吧,这取决于一切,没有更多的背景,没有人能够给您一个很好的答案。
FWIW:如果您真的对编写高性能的稀疏矩阵内核感兴趣,那么您应该将其与优化的PETSc安装进行比较,并击败他们,与他们的团队合作,他们很乐意将调整后的内核合并到库中。