使用pytables / hdf5对模拟数据进行实时分析

时间:2014-07-15 12:00:49

标签: python c hdf5 pytables

我正在使用c / CUDA和python进行一些cfd仿真,目前工作流程是这样的:

  1. 开始用纯c / cuda编写的模拟
  2. 将输出写入二进制文件
  3. 使用python重新打开文件,即numpy.fromfile并进行一些分析。
  4. 由于我有很多数据和一些元数据,但我会更好 切换到hdf5文件格式。所以我的想法就像是,

    1. 使用pytables为我的模拟创建一些初始条件数据。
    2. 使用标准hdf5库重新打开并写入c中的数据集。
    3. 使用pytables重新打开文件进行分析。
    4. 我真的想对数据进行实时分析,即 从c-programm写入hdf5并使用pytables直接从python读取。 这将是非常有用的,但我真的不是 确定pytables支持多少。

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

1 个答案:

答案 0 :(得分:3)

我认为这是一种合理的方法,但确实有一个陷阱。 HDF5 C库不是线程安全的(有一个" parallel"版本,以后会有更多内容)。这意味着,您的方案无法开箱即用:一个进程将数据写入文件而另一个进程正在读取(不一定是相同的数据集)将导致文件损坏。要使其有效,您必须:

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