【问题标题】:Live-analysis of simulation data using pytables / hdf5使用 pytables / hdf5 对模拟数据进行实时分析
【发布时间】:2014-09-05 14:52:24
【问题描述】:

我正在使用 c/CUDA 和 python 进行一些 cfd 模拟,目前工作流程如下:

  1. 开始用纯 c / cuda 编写的模拟
  2. 将输出写入二进制文件
  3. 使用 python 重新打开文件,即 numpy.fromfile 并进行一些分析。

因为我有很多数据和一些元数据,我认为这样会更好 切换到 hdf5 文件格式。所以我的想法是这样的,

  1. 使用 pytables 为我的模拟创建一些初始条件数据。
  2. 使用标准 hdf5 库重新打开并写入 c 中的数据集。
  3. 使用 pytables 重新打开文件进行分析。

我真的很想对数据进行一些实时分析,即 从 c 程序写入 hdf5 并使用 pytables 直接从 python 读取。 这将非常有用,但我真的不是 确定 pytables 支持多少。

由于我从未使用过 pytables 或 hdf5,所以很高兴知道 如果这是一个好方法,或者可能存在一些陷阱。

【问题讨论】:

    标签: python c hdf5 pytables


    【解决方案1】:

    我认为这是一个合理的方法,但确实有一个陷阱。 HDF5 C 库不是线程安全的(有一个“并行”版本,稍后会详细介绍)。这意味着,您的方案不能开箱即用:一个进程将数据写入文件而另一个进程正在读取(不一定是相同的数据集)将导致文件损坏。要使其正常工作,您必须:

    1. 实现文件锁定,确保在写入文件时没有进程正在读取,或者
    2. 通过将读/写委托给一个可区分的进程来序列化对文件的访问。然后,您必须通过某种 IPC 技术(Unix 域套接字,...)与此进程通信。当然,这可能会影响性能,因为数据会来回复制。

    最近,HDF 小组发布了基于 MPI 的 HDF5 并行版本,这使得并发读/写访问成为可能。参照。 http://www.hdfgroup.org/HDF5/PHDF5/。它是为像您这样的用例而创建的。

    据我所知,pytables 不提供与并行 HDF5 的任何绑定。您应该改用 h5py,它为并行 HDF5 提供了非常用户友好的绑定。请参阅本网站上的示例:http://docs.h5py.org/en/2.3/mpi.html

    不幸的是,并行 HDF5 有一个主要缺点:迄今为止,它不支持写入压缩数据集(虽然可以读取)。参照。 http://www.hdfgroup.org/hdf5-quest.html#p5comp

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多