立即注册 登录
气象家园 返回首页

一大碗年糕的个人空间 http://bbs.06climate.com/?116087 [收藏] [复制] [分享] [RSS]

日志

NCO和CDO的对比分析(搬运汇总一下网上的)先记着google机翻

已有 232 次阅读2020-3-31 10:55

https://code.mpimet.mpg.de/boards/1/topics/2112

最近,一个用户对在某些NC4文件上的子盒内对数据进行子集化的最佳方式提出了疑问。显然,我想到了CDO(在这里很简单),但他还提到了NCO(在这里从来都不简单)。在NCO网站上滚动了一段时间之后,我发现您可以使用NCO的ncea做点菜。

但是,令我惊讶的是,NCO的执行速度比CDO快得多:

(280)$ time ncea -d lat,25.0,50.0 -d lon,-127.0,-65.0 dR_MERRA-AA-r1.del_aer_Nv.200812clm.nc4subset.ncea.nc4 0.081u 0.355s 0:00.44 97.7%0 + 0k 0 + 43208io 0pf + 0w (281)$每个sellonlatbox的时间,-127,-65,25,50 dR_MERRA-AA-r1.del_aer_Nv.200812clm.nc4subset.cdo.nc4 cdo sellonlatbox:在1个时间段内从15个变量处理了224570880值(2.37s) 2.168u 0.214s 0:02.38 99.5%0 + 0k 0 + 43416io 0pf + 0w (282)$每个diffn子集.ncea.nc4子集.cdo.nc4 1080条记录中的0条不同 cdo diffn:在2个时间步(0.32s)中从30个变量中处理了11016000个值

在我做过的大多数事情中,CDO似乎在性能领域和易用性领域(例如h5diff v cdo diffn;在CDO中要快得多)上都胜出。因此,我的第一个想法是,也许我没有像对NCO那样对NetCDF编译CDO(两者都是对同一个NetCDF构建进行编译)。或者,这里的一位同事经常告诉我有关为NetCDF选择错误的“缓存大小”如何导致速度降低10倍的问题,从CDO中从磁盘读取的最小数据集是阵列的水平切片(在一级上一步一步)。sellonlatbox在内存中创建此数据集的子集。我假设NCO操作员ncea正在直接从netCDF文件读取此子集。在这种情况下,可以加快处理速度。

http://hannahlab.org/cdo-vs-nco/?unapproved=31706&moderation-hash=2850529b92791fac409ee7bb8571f0c3#comment-31706

当我需要处理大型数据文件(即100的GB或TB)时,通常会用NCLPython编写脚本 来完成这项工作。最近,我意识到这通常是浪费时间!问题在于,我的方法要求将任务分解为多个块,由于迭代产生的计算开销以及我自己编写代码的时间,因此将过程减慢了几个数量级。

处理大型数据集的一种更快,更清洁的方法是使用专门为气候数据集设计的命令行运算符。为此,独立开发了两个库,具体而言:

在  “气候数据运算符”(CDO)  库的开发  马克斯-普朗克研究所在德国汉堡,而  “创建NetCDF运营商”(NCO)  库是作为一个开源的项目  不同的人他们都可以做相同的事情,但是命令看起来很不一样。它们在后台的工作方式也不同,对于相同的计算,可能会导致不同的性能结果

这是一个简单的NCO示例列表  关于NCO的好处是基本命令列表很短。尽管有这种简单性,但NCO命令可能比CDO命令更为复杂。

  • ncap      – NetCDF算术处理器
  • ncatted   – NetCDF属性编辑器
  • ncbo      – NetCDF二进制运算符(例如ncadd,ncmultiply)
  • ncea      – NetCDF合奏平均
  • ncecat    – NetCDF集合连接器
  • ncflint   – NetCDF文件插值器
  • ncks      – NetCDF厨房水槽
  • ncpdq     – NetCDF Permute尺寸快速,安静地打包数据
  • ncra      – NetCDF记录平均
  • ncrcat    – NetCDF记录连接器
  • ncrename – NetCDF重命名器
  • ncwa      – NetCDF加权平均

CDO 的操作员列表很长,可能很难记住。每次使用它们时,我仍然需要查找它们,但是我想我会开始记住一些加班时间。

这是将具有不同时间步长的文件列表组合到单个输出文件中的简单示例:

cdo  复制ifile1 ifile2 ifile3 ofile      

这很简单。用NCOis做同样的事情也很简单

ncrcat -h ifile1 ifile2 ifile3 ofile   

CDO胜过NCO的一种情况是将grib文件转换为netcdf:

cdo -f nc复制file.grb file.nc

NCO似乎具有优势的一个实例是编辑变量属性。NCO属性编辑器“ ncatted”使这一过程变得非常简单:

ncatted -O单位,U,m,c,“ m / s” file.nc

最后,选择“最佳”库添加到工具箱并不是问题。两者都有各种优点和缺点,应该加以利用。无论哪种方式,它们都可以为我们节省大量时间!

随着时间的流逝,我将发布一系列带有示例和技巧的简短文章。这些大多仅供我参考,但我希望其他人会发现它们有用。 

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

返回顶部