如何在netCDF-4中使用并行I / O?

时间:2013-10-11 14:41:21

标签: r io parallel-processing netcdf nco

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

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

我发现了什么:

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

4 个答案:

答案 0 :(得分:4)

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

http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-tutorial/Parallel.html

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

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

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

如果您自己安装netCDF库,则可以在配置时指定--enable-parallel-tests标志;运行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. / p>

答案 1 :(得分:2)

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

答案 2 :(得分: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.anl.gov/parallel-netcdf)后端使用NetCDF API。

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

答案 3 :(得分:1)

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

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

当netCDF使用--enable-pnetcdf构建时,则在后台使用parallel-netcdf库来执行经典,64位偏移和CDF5上的并行I / O(尽管我还没有测试过并行I / O的最后一种格式。

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