Closed. This question is opinion-based。它当前不接受答案。












想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

2年前关闭。



Improve this question




在科学模拟(物理学)领域,我正在考虑开发一些使用C/C++的新模拟程序包。从头开始时,您认为最佳做法是什么?你能推荐一些书目吗?

谢谢

最佳答案

这是一份阅读 list 。不知道这对您来说是否太基础了:

Writing Scientific Software:基本的“学习用C++编程”之类的好书。

Parallel Scientific Computing in C++ and MPI:如果您不打算并行化应用程序,则应该这样做。

Engineering and Scientific C++:C++编程的一个不错的,特定于领域的介绍。在语言细节上有些过时,但是整体方法尚未老化。

我建议您通读SO对诸如“我应该如何设计大型C++程序?”之类的问题的答案。在其他可能感兴趣的书上寻求建议。

关于最佳做法,这里有一些建议。同样,我不确定您的起点,所以其中有些可能太基础了:

  • 如上所述,您应该从一开始就计划开发一个并行程序。如果不是在集群上传递消息,那至少要考虑为多核桌面进行共享内存编程。 OpenMP值得调查。
  • 使自己熟悉现有工作。 BOOST库可能是必不可少的。当我为您打算自己动手而称​​赞时,请不要忽略现有的完善数字库,例如BLAS和LAPACK,您可以在Netlib中找到它们。根据您的开发平台和工具集,您可能会发现它们已经安装。
  • 如果您来自科学背景,则可能需要提高您对软件工程的知识和技能。诸如以下的事项:源代码控制;测试;代码分析和优化;对您的编译器可以做什么的深入了解。以我的经验,许多计算科学家在所有这些方面的知识都很薄弱。
  • 您应该计划(大约)花费在设计和测试程序上的时间与实际编码上的时间一样。即使您自己工作,也必须在开始编码之前制定良好的行动计划。没有理由为什么它必须在一开始就在每个细节上都是完整的,但是永远不要在没有 map 的情况下进入领土。
  • 您对要模拟的物理世界的各个方面保持沉默。各种各样的物理模拟中都有许多现有技术,如果您有更多的细节,那么SO也许能够提供一些更具体的建议。
  • 关于implementation - 从头开始实现科学仿真方法的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3769372/

    10-16 12:44