ncks добавляет медленно для нескольких небольших файлов netcdf

Моя модель создает один файл netcdf для каждого временного шага и каждой переменной с именем DDDDDDD.VVV.nc, где DDDDDDD — дата, а VVV — имя переменной.

Для каждого временного шага я использую nco для добавления файлов, соответствующих различным переменным, чтобы получить один файл для каждого временного шага.

#! /bin/bash  
# looping on timesteps to merge all variables 
# I use one variable 'O2o' to get the list of timesteps                                                                                                                                                                    
for timesteps in *.O2o.nc;
do
  timestep=$(echo $timesteps| cut -b -21)
  echo $timestep
   for var in $timestep*.nc;
   do
     ncks -Ah  $var 'F1_'$timestep.nc
   done
done

Существует около 432 выходных переменных, и каждый файл имеет размер около 6,4 КБ или 1,1 КБ (переменные имеют разное количество измерений).

Я нахожу процесс очень медленным (например, 15 секунд на временной шаг), а файлы очень маленькие. Любая идея, как мне оптимизировать скрипт?


person acapet    schedule 26.04.2016    source источник


Ответы (1)


Медлительность, вероятно, связана с открытием, перемещением данных, добавлением данных и закрытием файлов 432 раза. Чтобы оптимизировать это, уменьшите количество файловых операций, особенно добавление (что вызывает). Попробуйте записать все данные в один файл netCDF4 за один раз (группами), а затем свести файл в netCDF3. Для каждого временного шага это будет выглядеть так:

ncecat --gag in*.nc all_group.nc
ncks -3 -G : all_group.nc all_flat.nc

Две команды вместо 432. Если какие-либо переменные появляются более чем в одном входном файле, вы получите сообщение об ошибке, говорящее о том, что переменная будет многократно определена в all_flat.nc. Избегайте этого, удаляя повторяющиеся входные данные.

person Charlie Zender    schedule 27.04.2016