1

我想从 R 中读取和写入单个 netCDF-4 文件。该文件将被许多节点进程同时访问(约 100 个用于开发,约 1000 个用于生产)。

从 R 中访问 netCDF 中并行 I/O 功能的最佳方法是什么?

我发现了什么:

  • 从 Unidata 页面看来,我需要做的就是在启用并行功能的情况下进行编译(--enable-parallel)。这真的是我需要做的吗?
  • 我在 ncdf4 包描述中找不到任何关于并行 io 的提及。
  • 鉴于 I/O 是我计算中的瓶颈,有关如何优化我的计算的任何提示 - 在计算期间(例如,本地)写入多个文件并稍后合并文件(例如使用nco )?
4

4 回答 4

4

可以在此处找到与使用 Unidata NetCDF 并行 I/O 相关的信息:

https://www.unidata.ucar.edu/software/netcdf/docs/parallel_io.html

--enable-parallel配置 netCDF 时不再需要该标志;它将检查文档并在需要时进行更新。但是,在构建库时,该标志必需的。hdf5

为了在 netCDF-4 中使用并行 I/O,您需要确保它是针对启用并行 I/O 的 hdf5 库构建的。在配置时,netCDF 将查询hdf5库以查看是否存在并行 I/O 符号。

  • 如果是,则假定为 netCDF-4 的并行 I/O。
  • 如果不是,则 netCDF-4 文件的并行 I/O 将关闭。

如果是自己安装netCDF库,可以--enable-parallel-tests在配置的时候指定flag;当您运行时make check,将运行并行测试。您还可以扫描 config.log 中的输出以查看是否在 hdf5 库中找到了并行 I/O 功能;应该有一条消息通知您它是否已启用。

请注意,使用 netCDF-4 进行并行 I/O 有一些限制,特别是:

NetCDF-4 提供对 netCDF-4/HDF5 文件的 HDF5 并行 I/O 功能的访问。不能打开或创建 NetCDF 经典和 64 位偏移格式以用于并行 I/O。(它们可能会被打开和创建,但并行 I/O 不可用。)

假设底层 netCDF 库启用了并行 I/O,并且您正在对正确类型的文件进行操作,则 ncdf4 调用的标准 API 调用自动利用并行 I/O。

于 2013-10-11T22:20:31.800 回答
2

还有一个 R 包专门用于并行处理 NetCDF 文件,称为 pbdNCDF4。
此解决方案基于标准 ncdf4 包,因此语法与“传统”方法非常相似。有关 CRAN 的更多信息: https ://cran.r-project.org/web/packages/pbdNCDF4/vignettes/pbdNCDF4-guide.pdf

于 2017-01-02T19:50:27.790 回答
1

沃德给出了很好的回答。我想补充一点,还有另一种方法可以从 Unidata NetCDF-4 中获得并行 I/O 功能。

NetCDF-4 具有将 API 与后端存储实现分开的架构。通常,这是 HDF5 后端上的 NetCDF API。但是,这很巧妙:您还可以在 Northwestern/Argonne “Parallel-NetCDF”(http://cucis.ece.northwestern.edu/projects/PnetCDF/http://www.mcs)上使用 NetCDF API。 anl.gov/parallel-netcdf ) 后端。

这种方法将为您提供经典和 64 位偏移格式数据集的并行 I/O 方法。

于 2015-02-23T15:54:48.697 回答
1

Ward 和 Rob 都给出了很好的答案!;-)

但是还有另一种方法可以通过标准的 netCDF API 在经典和 64 位偏移文件上获得并行 I/O。

当使用 --enable-pnetcdf 构建 netCDF 时,在幕后使用 parallel-netcdf 库在经典、64 位偏移和 CDF5 上执行并行 I/O(尽管我没有使用并行 I/O)。

打开文件时,使用模式的 NC_PNETCDF 标志来指示您要对该文件使用并行 I/O。

于 2016-01-14T16:37:49.310 回答