【问题标题】:Valgrind hangs when reading large HDF5 dataset in Fortran在 Fortran 中读取大型 HDF5 数据集时,Valgrind 挂起
【发布时间】:2015-09-20 07:31:40
【问题描述】:

我有一个用 Fortran 编写的应用程序,它使用并行 HDF5 进行输入/输出。

使用匹配的后处理代码以*.h5 文件的形式读取其输出,并对其进行处理。

但是,当我尝试使用 valgrind 检查内存泄漏时,它会在读取大型数据集时停止。

更准确地说,对于大型数据集(例如 1069120 双精度数(其中双精度数定义为 H5kind_to_type(REAL64,H5_REAL_KIND)))调用 H5Dread_f 时会发生停顿,而对于较小的数据集则可以。

我尝试使用 --enable-using-memchecker 重新编译 HDF5 库,如 here 所述,但没有帮助。

有人有这方面的经验吗?

【问题讨论】:

  • 您是否尝试过使用中等大小的数据集?可能仅仅是 valgrind 导致读取速度非常慢,并且具有逐渐变大数据集的测试将需要更长的时间才能完成。如果是这样,您没有看到挂起 - 只是缓慢。
  • 这样做需要对涉及的两个代码进行重写。我可以做到,但这需要一些时间。我稍后再试。
  • 在运行 valgrind 时运行 top。如果它正在吞噬 CPU,它可能没有挂起。 Valgrind 是出了名的慢,所以这并不奇怪。
  • 我做到了,它没有卡住。正如你所说,它只是出了名的慢。谢谢。

标签: linux fortran mpi valgrind hdf5


【解决方案1】:

我找到了原因/解决方案:由于我的一个错误,我在这些 HDF5 例程中使用的块大小通常只有 1 个字节,这当然太小了。

解决此问题也使 valgrind 更快且更实用。

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 2019-11-15
    • 1970-01-01
    • 2014-11-15
    • 2019-08-02
    • 2013-12-12
    • 2020-06-19
    • 1970-01-01
    • 2014-02-26
    相关资源
    最近更新 更多