主办单位:
项目团队成员:
西北大学
廖维坑 Alok Choudhary先生 侯开元 (博士生2022年毕业) 承佑子 (前博士后,现任麻省大学洛厄尔校区助理教授) 奎高 (以前是博士后,现在是达索系统模拟公司。 李建伟 (毕业后,现为彭博社)
阿贡国家实验室
净CDF
新闻:
发布PnetCDF版本 1.13.0 是 2024年3月29日提供。 我们一直在与Unidata的netCDF团队合作,以集成CDF-5 和PnetCDF功能集成到netCDF 4.4.0中。 请参见 发布说明 有关更多信息,请参阅第4.4.0节。 PnetCDF用于 一 飓风桑迪的大规模模拟 在蓝色水域上跑步 2013年NCSA的超级计算机。
内容:
什么是netCDF?
-
文件格式 --自描述的机器相关文件 格式(CDF和HDF5)用于存储面向多维数组的 数据及其属性(例如注释)。数据布局 在CDF文件中,遵循数组的规范顺序。 -
应用程序编程接口(API) --Fortran集合, C、 netCDF软件版本中提供了C++和Java函数 用于访问文件中存储的数据(CDF和HDF5格式)。 API用于定义 变量,并对文件执行数据读/写。
NetCDF并行化的设计策略:
最小化对netCDF API语法的更改 -- 为了便于从顺序netCDF到PnetCDF的代码迁移, PnetCDF API模仿netCDF APIs的语法,只使用次要的 更改以添加并行I/O概念。 这些更改突出显示为 跟随。 所有并行API均以原始netCDF API命名 C/C++的前缀为“ncmpi_”,Fortran 77的前缀为”nfmpi_“,以及 Fortran 90的“nf90mpi_”。 例如, 整数 ncmpi_put_vara_float(int ncid,/*数据集ID*/ int varid,/*变量ID*/ 常量MPI_Offset开始[],/*[ndims]*/ 常量MPI_Offset count[],/*[ndims]*/ float*buf)/*用户缓冲区*/ MPI通信器和MPI_Info对象添加到 打开/创建API的参数列表。 通信器定义 将并行访问netCDF文件的一组进程。 这个 info对象允许用户为PnetCDF和 MPI-IO进一步提高性能(例如,文件的文件对齐 变量的标头大小和起始偏移量,以及MPI-IO 提示。) 一个例子是 整数 ncmpi_open(MPI_Comm Comm,/*共享文件的MPI进程组*/ const char*路径, 整数模, MPI_Info信息、/*PnetCDF和MPI-IO提示*/ 整数*ncidp) PnetCDF定义了两种数据模式,集体和独立, 对应于MPI集合和独立I/O操作。 与MPI命名约定类似,所有集合API都带有 额外后缀“_all”。 独立I/O模式由 调用ncmpi_begin_indep_data()和ncmpi_end_indep_data()。 在集体数据模式下,对集体API的调用只有 允许。 类似地,在 独立模式。 上面显示的API ncmpi_put_vara_float()是一个 独立API和集体对应项是: 整数 ncmpi_put_var_float_all(int ncid,/*数据集ID*/ int varid,/*变量ID*/ 常量MPI_Offset start[],/*[ndims]*/ 常量MPI_Offset count[],/*[ndims]*/ float*buf)/*用户缓冲区*/ 对于与变量大小或其相关的API参数 类型为size_t的访问,PnetCDF将其替换为 MPI_Offset(MPI_偏移)。 例如,中的参数start[]和count[] 上述API是MPI_Offset数据类型与中的size_t 净CDF。 另一个例子是定义维度的API, 如下所示。 ptrdiff_t类型的参数也已更改 到MPI_Offset,包括vars中的参数stead[]和imap[] 和varm API系列。 整数 ncmpi_def_dim(int ncid,/*数据集ID*/ const char*name,/*维度名称字符串*/ const MPI_Offset len,/*维度长度*/ int*dimidp)/*返回的维度ID*/
支持大文件 -- PnetCDF支持CDF-2文件格式(当 创建新文件)。 使用CDF-2格式,即使在32位平台上 可以创建大于2GB的netCDF文件。
PnetCDF中添加的新功能:
支持大变量 -- PnetCDF支持 CDF-5型 文件格式。 带CDF-5 格式,包含40多亿元素的大型数组变量可以 在文件中创建。 支持其他数据类型 -- CDF-5中引入的新数据类型包括NC_UBYTE、NC_USHORT、NC_UINT、, NC_INT64和NC_UINT64。 PnetCDF I/O提示 -- PnetCDF I/O提示nc_header_align_size和nc_var_align_size允许用户 设置自定义文件头大小和起始文件偏移 非记录变量。 已知文件布局对齐会导致 对并行文件系统的性能产生重大影响。 提示 nc_header_align_size可用于为 文件头,以防将更多元数据添加到现有的netCDF 文件。 设置提示nc_var_align_size的常见做法是 文件系统条带化大小。 示例程序可以在中找到 提示。 c(c) . 用于非接触用户缓冲区的灵活API -- 除了支持现有的netCDF功能外 一组API,称为 灵活的API ,可使用MPI 派生的数据类型,用于描述用户I/O缓冲区的复杂内存布局。 相反,传统的netCDF API只允许连续的数据缓冲区。 示例程序可以在中找到 flexible_api。 c(c) 和 flexible_api。 (f) . 下面给出了一个示例API。 整数 ncmpi_put_vara_all(int ncid, int变量, 常量MPI_Offset开始[],/*[ndims]*/ 常量MPI_Offset count[],/*[ndims]*/ void*buf,/*用户I/O缓冲区*/ MPI_Datatype bufcount,/*buf中buftype元素的数量*/ MPI_Datatype buftype)/*MPI派生的数据类型*/ vard API --接受MPI派生数据类型的参数,该参数 描述了文件访问布局,与使用的vara和vars API相对 开始[]并计数[]。 通过此API系列,用户可以访问复杂 非连续文件空间,不再局限于子阵列布局。 A安 示例API是 整数 ncmpi_put_vard_all(int ncid,/*数据集ID*/ int varid,/*变量ID*/ const MPI_Datatype filetype,/*文件访问布局*/ 常量void*buf, 常量MPI_ Offset bufcount, const MPI_Datatype buftype);/* 内存中的缓冲区布局*/ varn API --对同一变量发出多个请求 传统的netCDF API(即var、var1、vara、vars和varm)允许 每个API调用请求一个变量。 一组名为varn的新API是 引入以允许使用任意位置向 单个变量。 参见示例程序 输入varn_float。 c(c) ). API示例如下 整数 ncmpi_put_varn_float_all(int ncid,/*数据集ID*/ int varid,/*变量ID*/ int num,/*请求数*/ MPI_Offset*const*start,/*[num][ndims]开始偏移列表*/ MPI_Offset*const*counts,/*[num][ndims]访问计数列表*/ 浮动*buf);/* 缓冲区指针*/ mput/mget API --用于向不同的 变量。 此API系列允许单个API调用完成多个 对相同和/或不同变量的子数组请求。 参见示例 程序 计算机。 c(c) ). API示例如下 整数 ncmpi_mput_vara_all(int ncid,/*数据集ID*/ int nvars,/*变量数*/ int varids[],/*[nvars]变量ID列表*/ MPI_Offset*const*启动,/*[nvars][ndims]启动偏移列表*/ MPI_Offset*const*计数,/*[nvars][ndims]访问计数列表*/ void*bufs[],/*[nvars]缓冲区指针列表*/ const MPI_Offset bufcounts[],/*[nvars]缓冲区计数列表*/ const MPI_Datatype buftypes[]);/* [nvars]描述buf的MPI派生数据类型*/ iput/iget API --用于请求聚合。 非阻塞API(ncmpi_iput_xxx/ncmpi_iget_xxx)旨在聚合 较小的I/O请求转换为较大的I/O请求以获得更好的性能。 一个普通的 实践是首先发布多个非阻塞调用,然后使用单个 调用ncmpi_wait_all()以完成I/O事务。 聚合 适用于对相同变量以及不同变量的请求 变量。 请参见 示例/README 例如程序。 整数 ncmpi_iget_vara_int64(int ncid, int变量, 常量MPI_Offset开始[],/*[ndims]*/ 常量MPI_Offset count[],/*[ndims]*/ void*buf,/*用户I/O缓冲区*/ int*请求id); bput API --用于缓冲写入。 缓冲写API(ncmpi_bput_xxx)是另一组非阻塞API 它将请求数据缓存在内部缓冲区中,以便用户缓冲区 可以在发布调用返回后重用或释放。 此API集位于 与要求用户缓冲区保持不变的iput/iget API系列签订合同 等待API完成之前。 用户程序必须首先调用 ncmpi_buffer_attach()指定可以 PnetCDF用于聚合写入请求。 示例程序可以是 在中找到 examples/tutorial/pnetcdf-write-buffered。 c(c) 和 示例/tutorial/pnetcdf-write-bufferedf.f90 . 整数 ncmpi_bput_vara_int64(int ncid, int变量, 常量MPI_Offset start[],/*[ndims]*/ 常量MPI_Offset count[],/*[ndims]*/ void*buf,/*用户I/O缓冲区*/ int*请求id);
与NetCDF-4的互操作性
从4.1版开始,netCDF-4程序可以执行并行I/O 通过PnetCDF在经典CDF-1和CDF-2文件上运行。 这是由 传递文件创建标志 NC_网络CDF 例如,对于nc_create_par(), nc_create_par(文件名,nc_PNETCDF|nc_CLOBBER,MPI_COMM_WORLD,信息,&ncid); 自NetCDF 4.6.3以来,标志NC_PNETCDF已被弃用,使用它没有 需要更长的时间。 例如, nc_create_par(文件名,nc_CLOBBER,MPI_COMM_WORLD,信息,&ncid); 注意,一些新的PnetCDF API在netCDF-4中尚不可用。 这些API是“灵活”、“非阻塞”、“mput/mget”、“vard”和“varn”。 下面提供了C和Fortran中的示例程序,展示了如何 使用netCDF-4 API启用并行I/O。 它们可以很容易地更改为 在下面使用PnetCDF或HDF5库。 在每个的顶部 示例程序,配置netCDF以启用的说明 提供了PnetCDF选项,以及用于编译和运行 例子。 nc4_pnc_put。 c(c) 是一个调用 nc_输出_变量_输入() 将子数组并行写入2D整数数组。 在本例中,进程之间的数据分区模式沿X和Y维度以块方式进行。 nc4_pnc_get。 c(c) 是一个read示例程序,是nc4_pnc_put.c的对应程序。 上述示例的Fortran版本可以在中找到 nc4_pnc_put_vara。 (f) 和 nc4_pnc_get_vara。 (f) coll_perf_nc4.c公司 是一个I/O性能基准测试程序,报告并行写入20个整数类型三维数组的总带宽。 所使用的数据分区模式是沿着三维以块-块-块的方式进行的。 该程序还报告了使用HDF5+MPI-IO方法的性能。
下载源代码
最新的稳定版本1.13.0于2024年3月29日发布。 请访问 下载页面 用于下载当前版本和早期版本。 文件INSTALL中提供了构建PnetCDF库的说明 随附源代码版本。 PnetCDF使用Autoconf工具 通常足够聪明,只需运行命令即可检测到所需的软件 “./configure”。 然而,如果您遇到问题,还有几个 为特定平台构建配方:README。 IBM,自述。 CRAY,和 自述。 SGI公司。 源代码存储库——建议用户使用该版本 用于生产运行的版本,但也欢迎尝试最新功能 正在开发中。 https://github.com/Parallel-NetCDF/PnetCDF
用户文档和示例程序
PnetCDF C接口指南 基于 netCDF C接口指南 . PnetCDF问答 包含一些实现 更好的I/O性能。 A类 教程 使用流行的并行I/O策略的用例: 主进程的I/O 每个进程一个文件 共享文件上的并行I/O 使用非接触I/O缓冲区 使用非阻塞I/O,以及 使用缓冲API
其他示例程序 以矩阵转置方式读取/写入变量: 转置。 c(c) , 转置。 (f) , 转座.f90 , 转座子.cpp 在PnetCDF中使用填充模式API(注意记录变量与netCDF的区别): fill_mode(填充模式)。 c(c) , fill_mode(填充模式)。 (f) , 填充模型.f90 , 填充模型.cpp 在内存中使用具有虚单元的I/O缓冲区: 幻影单元格。 c(c) , flexible_api。 c(c) , flexible_api。 (f) , flexible_api.f90型 , flexible_api.cpp软件 当数据分区模式是块循环方式时的读/写: 块_循环。 c(c) , 块_循环。 (f) , 块_循环.f90 , 块_循环.cpp Uisng varn API在单个API调用中读取/写入多个子数组: 输入varn_float。 c(c) , 输入变量整数.c , 输入varn_float。 (f) , 输入变量整数.f , 输入变量浮点.f90 , 输入变量积分f90 , 输入变量浮点cpp 输入变量int.cpp varn API的非阻塞版本: bput变量单元。 c(c) , i_varn_int64.c , bput变量整数8.f , i_varn_real。 (f) , 请参见 自述文件 和 附加说明的每个示例程序的开头 PnetCDF中提供了所有教程和示例程序 releases,位于名为“ 示例 ".
正在开发中
提交次级文件 --可以划分 将大型多维全局数组划分为较小的子数组,每个子数组保存在 一个单独的netCDF文件,名为subfile。 子文件方案可以减少 共享文件的进程数,以减少文件访问 争用,文件系统为保持数据一致性而支付的开销。 PnetCDF 1.4.1版中提供了子归档功能。
I/O性能基准测试计划
BTIO中的PnetCDF BTIO是NASA的I/O部分 NAS并行基准测试(NPB)套件 . btio-pnetcdf-1.1.1.tar.gz公司 (SHA1校验和:7a1380e496f7c328d7605c560c94bbbd84409cfc)
S3D-IO中的PnetCDF S3D系列 是桑迪亚国家实验室开发的连续尺度第一原理直接数值模拟代码。 S3D-IO是其I/O内核。 s3d-io-pnetcdf-1.2.1.tar.gz (SHA1校验和:c2a5fc2175d9836ce39f76c8c8bbcd9065782d1d)
GCRM-IO中的PnetCDF 全球云解析模型 ( 全球客户关系管理 )开发于 科罗拉多州立大学是一个气候应用框架,旨在 模拟与大对流云相关的环流。 GCRM中的I/O模块使用Geodesic I/O库 ( GIO公司 )在太平洋开发 西北国家实验室。 注意,用Fortran编写的GCRM I/O内核基准测试程序是 包含在GIO源代码版本中。 可在此处下载焦油球 包含从GIO的Fortran版本转换而来的C版本。 gcrm-io-pnetcdf--1.0.0.tar.gz (SHA1校验和:32bd510faf4fcef3edeb564d3885edac21f8122d)
FLASH-IO中的PnetCDF 闪光 是块结构的 自适应网格流体动力学程序主要用于研究 中子星和白矮星上的核闪光。 PnetCDF方法是基于 FLASH I/O基准套件 并包含在 PnetCDF发布 从v1.4.0开始。
出版物
承佑子、萨巴·塞里什、廖伟景、罗恩·奥德菲尔德和阿洛克·乔德瑞。 I/O负载波动的并行系统上的动态文件分条和数据布局转换 2013年9月,在科学数据存储接口和架构研讨会上。 罗布·拉瑟姆(Rob Latham)、克里斯·戴利(Chris Daley)、廖维坑(Wei-keng Liao)、奎高(Kui Gao)、罗布·罗斯(Rob Ross)、安舒·杜比(Anshu Dubey)和阿洛克·乔德瑞。 科学I/O的一个案例研究:改进FLASH天体物理代码 《计算机与科学发现》,2012年3月5日。 Kui Gao、Chen Jin、Alok Choudhary和Wei-keng Liao。 并行网络CDF中支持高性能I/O的计算数据模型表示 在IEEE高性能计算国际会议上,2011年12月。 Kui Gao、Wei-keng Liao、Arifa Nisar、Alok Choudhary、Robert Ross和Robert Latham。 使用子归档提高并行共享文件I/O的编程灵活性和性能 《并行处理国际会议记录》,奥地利维也纳,2009年9月。 高奎、廖维坑、阿洛克·乔德瑞、罗伯特·罗斯和罗伯特·拉瑟姆。 并行netCDF中多数组变量的I/O操作组合 2009年9月,在路易斯安那州新奥尔良举行的IEEE集群会议期间举行的科学数据存储接口和架构研讨会会议记录中。 李建伟、廖维坑、阿洛克·乔德瑞、罗伯特·罗斯、拉杰夫 Thakur、William Gropp、Rob Latham、Andrew Siegel、Brad Gallagher和 迈克尔·津格尔。 并行netCDF:一种科学的高性能I/O接口 . 在 超级计算会议记录 2003年11月。
用户社区:
-
社区多尺度空气质量模型 ( CMAQ公司 ) 美国环保署大气科学建模部门的一个积极的开源开发项目,包括一套用于进行空气质量模型模拟的程序。 组织机构: CMAS中心 参考: I/O API的新增功能
-
社区地球系统模型 ( 化学文摘社 ) 供更广泛的气候研究界使用的全球大气模型。 组织:UCAR 人物:吉姆·爱德华兹 该程序使用 项目执行办公室 用于并行I/O操作的库,其中包括PnetCDF方法。 CESM软件先决条件 -
GPU机架 主要为天体物理学应用程序编写的通用流体动力学(HD)和磁流体动力学(MHD)模拟代码。 组织机构: Maison de la仿真 和 CEA/Sap公司 人员:Pierre Kestener和Sebastien Fromang 参考: OLCF/TITAN上测得的弱标度 -
全球云解析模型的数据服务( 全球客户关系管理 ) 全球大气环流模式,网格间距约为3公里,能够模拟与大对流云相关的环流。 使用PnetCDF、Fortran 90、C++ 组织机构:太平洋西北国家实验室 人员:Karen Schuchardt 参考文献:B.Palmer、A.Koontz、K.Schuchardt、R.Heikes和D.Randall。 并行全球云解析模型的高效数据IO 环境。 模型。 柔和。 第26、12页(2011年12月),1725-1735。 DOI=10.1016/j.envsoft.2011.08.007。 -
NCAR社区大气模型( 计算机辅助制造 )
使用并行netCDF、ZioLib 平台:IBM SP3、SP4、SP5、BlueGene/L、Cray X1E 文件系统:GPFS、PVFS2、NFS 单位:国立台湾大学大气科学系 人物:Yu-heng Tseng(yhtseng at as.ntu.edu.tw) 证明人:曾毅和丁毅。 社区大气模型(CAM)中的高效并行I/O , 《国际高性能计算应用杂志》,2008年第22期,第206-218页。 -
天体物理热核闪光( 闪光 ) 使用PnetCDF、HDF5、C, 用户指南 平台:IBM SP、Linux群集 组织:芝加哥大学ASCI Flash中心 人物:Brad Gallagher、Katie Antypas 参考文献:R.Latham、C.Daley、W.Liao、K.Gao、R.Ross、A.Dubey和A.Choudhary。 科学I/O的一个案例研究:改进FLASH天体物理代码 《计算科学与发现》,2012年第5卷。 内政部。 10.1088/1749-4699/5/1/015001 -
平行VTK方面 使用PnetCDF,C 平台:Linux群集、Cray X 组织机构:ORNL 人物:Nagiza Samatova -
大气化学传输模型(ACTM) 使用PnetCDF、FORTRAN 组织:LLNL应用科学计算中心 人员:John R.Tannahill -
综合地球系统建模程序( 棱镜 )支持倡议 支持IO库中的netCDF和PnetCDF 作为OASIS4耦合器的一部分 使用netCDF、PnetCDF(FORTRAN API) 平台:NEC SX、Linux Cluster、SGI等 组织:C&C研究实验室,NEC欧洲有限公司。 PRISM中pnetcdf的联系人:Reiner Vogelsang和 雷内·雷德勒 NEC SX上pnetcdf用户的联系人:Joachim Worringen和 雷内·雷德勒 -
天气研究与预报 ( WRF公司 )建模系统 软件 使用PnetCDF、FORTRAN、, 看见 WRF安装最佳实践 组织:国家大气研究中心(NCAR) 人物:John Michalakes 新闻项目: 飓风力超级计算:沙地的Petascale模拟
高功率射频 (飓风WRF)。 -
石溪平行海洋模型( sbPOM公司 ) 使用PnetCDF、FORTRAN sbPOM是一个基于普林斯顿海洋模型的并行、自由表面、σ坐标、原始方程海洋建模代码( POM公司 ) 人物:安东尼·乔迪(toniimeea.uib-csic.es)和王东平(dpwannotes.cc.sunysb.edu) -
WRF-ROMS(区域海洋模型系统)输入/输出模块 使用PnetCDF、FORTRAN 组织:NCSA科学数据技术集团 人员:杨慕群、布隆丹 -
可移植、可扩展的科学计算工具包 ( PETSc公司 ) 组织:ANL -
地球系统建模框架( ESMF公司 ) 平台:IBM Blue Gene/L 组织:科学计算部 国家大气研究中心 科罗拉多州博尔德80305 人物:南希·柯林斯、詹姆斯·P·爱德华兹 -
平行冰盖模型( 乘客信息管理系统 ) 平行冰盖模型是一个开源、并行、高分辨率的冰盖模型。
相关链接
-
Unidata的netCDF -
消息传递接口标准 -
净CDF --的 github.com上的官方项目网页。 -
净CDF 阿贡国家实验室维护的项目网页,包括 软件下载、用户文档等。 -
高性能I/O:并行netCDF -福雷斯特·霍夫曼的一篇文章出现在 Linux杂志 . 菲利普·沃特莱塔(Philippe Wauteleta)和皮埃尔·凯斯特纳(Pierre Kestener)。 PRACE CURIE超级计算机的并行IO性能和可扩展性研究 , 欧洲高级计算伙伴关系白皮书( 实践 )2012年9月。 本报告比较了CURIE超级计算机与Lustre并行文件系统上的PnetCDF、HDF5和MPI-IO的性能,使用 内部收益率 和 GPU机架 .