用于科学模拟的“日志”

时间:2011-11-03 10:07:12

标签: c++ logging scientific-computing

我正在使用C ++对某些事情进行科学模拟。此时,由于参数数量的增加,我发现需要一个“日志”:一个文件,其中存储了有关给定模拟的所有信息(不是输出;导致该输出的参数和相应的git commit )。

我已经搜索过,在我看来,使用XML应该是一个不错的选择,因为它可以使用python,mathematica或其他分析软件轻松解析。

我想知道是否有人同意这一点,或者有更好的选择。

此外,我想知道如何选择当前的git提交以将其保存在日志中。

6 个答案:

答案 0 :(得分:4)

总的来说,我同意你的观点:

  • XML被广泛部署,有大量工具可以使日志成型。
  • 它很灵活,您可以在以后添加其他属性而不会破坏旧的“脚本”
  • 它是基于文件的,一个文档,一个文件,使用文件系统来组织日志``pages''
  • 它是基于文件的纯文本,像find,grep,diff(推送)等工具可以在紧急情况下帮助你
  • 这是您自己的解决方案,您可以随意跟踪所需的任何信息,如果您认为将日照时间与参数相关联至关重要,请执行此操作。

话虽这么说,我应该添加存储格式取决于典型的用例,如果你需要找出为什么每个星期一在满月之后优化器找不到任何解决方案,那将很难(好,更难)提出必要的XPath / XQuery hackery来做,因为你的结构的非规范性

我能想到的所有缺点:

  • 这是冗长的,我所在区域的XML文档往往更像20到40 GB,而信息可能更像是500 MB。
  • 它很慢(取决于你如何使用它),RDBM甚至nosql解决方案采用索引等技术来更快地读取
  • 它很灵活,这也是一个缺点:如果你碰巧每天添加两个新属性,你最终只得到一个标记的自由文本,如果你想将它导入结构聚焦系统,它将需要彻底抛光(SQL,csv,json,...)
  • 这是您自己的解决方案,您必须编写并维护它

至于第二位:git describe --always HEAD

答案 1 :(得分:1)

最简单的选择是使程序成为一个纯函数,即将所有更改和可能更改的参数外部化为程序选项,以便模拟由选项和git提交标识符完全指定。

Boost.Program_options有助于实施这样的计划。

答案 2 :(得分:1)

这在编程网站上可能听起来很奇怪,但我发现做了几个模拟工作,最好的日志就是......好吧......一本日志。

具体来说,我已广泛使用this one(链接到亚马逊)。这可能是因为我来自湿实验室/生物学背景,但我发现了一些关于旧死树笔记本的吸引人的东西。它确实不是自动化的,如果你运行大量不同的参数组合,或者如果你的模拟开始有大量的参数,它就不会很好。

但对于我正在研究的项目,它有大约20个左右的参数可能会有所不同,我喜欢能够记录关于我的想法的自由形式的注释,让它们以易于携带,易于回忆和相当耐用的形式存在,对于许多实验室伙伴来说,“保持一个实验室笔记本”似乎在物理上更好。

你的语言当然可能会有所不同。

答案 3 :(得分:0)

您还可以标记特定提交。有关详细信息,请参阅http://book.git-scm.com/3_git_tag.html

答案 4 :(得分:0)

使用逗号分隔或制表符分隔的值。人类可读且可编辑的小存储开销,可轻松导入几乎任何内容(包括R和excel)。

答案 5 :(得分:0)

粒子物理世界主要使用ROOT来满足它的数据收集,存储和分析需求。这包括来自模拟的数据。 ROOT可以 - 确实很容易 - 使用结果保存一整套元数据

通常,当我们拥有大型数据集时,我们保留一个数据库,但这样可以方便地构建查询:真正的记录保存在包含的元数据中。