Как использовать параллельный ввод/вывод с netCDF-4?

Я хотел бы читать и писать из одного файла netCDF-4 из R. К файлу будут обращаться многие процессы узлов одновременно (~ 100 для разработки, ~ 1000 для производства).

Как лучше всего получить доступ к функциям параллельного ввода-вывода в netCDF из R?

Что я нашел:

  • На странице Unidata видно, что все, что мне нужно сделать, это скомпилировать с включенными параллельными функциями (--enable-parallel). Это действительно все, что мне нужно сделать?
  • Я не могу найти упоминания о параллельном вводе-выводе в описании пакета ncdf4.
  • Учитывая, что ввод-вывод является узким местом в моих вычислениях, какие-либо подсказки о том, как оптимизировать мои вычисления - существуют ли обстоятельства, когда было бы лучше записывать в несколько файлов во время вычислений (например, локально) и объединять файлы позже (например, используя nco)?

person David LeBauer    schedule 11.10.2013    source источник
comment
Есть ли у вас оборудование и файловая система, которые поддерживают параллельный ввод-вывод?   -  person High Performance Mark    schedule 11.10.2013
comment
@HighPerformanceMark да. Один из них — кластер RedHat Rocks (информация здесь), а другой — кластер Dell PowerEdge (информация здесь)   -  person David LeBauer    schedule 11.10.2013


Ответы (4)


Информацию об использовании параллельного ввода-вывода с Unidata NetCDF можно найти здесь:

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

Флаг --enable-parallel больше не нужен при настройке netCDF; Он проверит документацию и при необходимости обновит ее. Однако флаг обязателен при сборке библиотеки hdf5.

Чтобы использовать параллельный ввод-вывод с netCDF-4, вам необходимо убедиться, что он был создан для библиотеки hdf5 с включенным параллельным вводом-выводом. Во время настройки netCDF запросит библиотеку hdf5, чтобы узнать, присутствуют ли символы параллельного ввода/вывода.

  • Если да, то предполагается параллельный ввод-вывод для netCDF-4.
  • Если это не так, параллельный ввод-вывод для файлов netCDF-4 отключается.

Если вы устанавливаете библиотеку netCDF самостоятельно, вы можете указать флаг --enable-parallel-tests при настройке; при запуске make check будут запущены параллельные тесты. Вы также можете просмотреть вывод в config.log, чтобы увидеть, были ли обнаружены функции параллельного ввода-вывода в библиотеке hdf5; должно быть сообщение, уведомляющее вас, включено ли оно.

Обратите внимание, что существуют некоторые ограничения для параллельного ввода-вывода с netCDF-4, а именно:

NetCDF-4 обеспечивает доступ к функциям параллельного ввода-вывода HDF5 для файлов netCDF-4/HDF5. Классический и 64-битный формат смещения NetCDF нельзя открывать или создавать для использования с параллельным вводом-выводом. (Их можно открывать и создавать, но параллельный ввод-вывод недоступен.)

Предполагая, что базовая библиотека netCDF поддерживает параллельный ввод-вывод и вы работаете с файлом правильного типа, стандартный вызов API, вызываемый ncdf4, должен автоматически использовать параллельный ввод-вывод.

person Ward F.    schedule 11.10.2013

Существует еще один пакет R, предназначенный для параллельной обработки файлов NetCDF, который называется pbdNCDF4.
Это решение основано на стандартном пакете ncdf4, поэтому синтаксис очень похож на "традиционный" подход. Дополнительная информация доступна в CRAN: https://cran.r-project.org/web/packages/pbdNCDF4/vignettes/pbdNCDF4-guide.pdf

person speleo    schedule 02.01.2017

Уорд дал прекрасный ответ. Я хотел добавить, что есть еще один способ получить функции параллельного ввода/вывода из Unidata NetCDF-4.

NetCDF-4 имеет архитектуру, которая отделяет API от внутренней реализации хранилища. Обычно это NetCDF API на серверной части HDF5. Но вот что интересно: вы также можете использовать NetCDF API на Северо-Западном/Аргоннском "Parallel-NetCDF" (http://cucis.ece.northwestern.edu/projects/PnetCDF/ и http://www.mcs.anl.gov/parallel-netcdf).

Этот подход даст вам метод параллельного ввода-вывода для классических и 64-битных наборов данных, отформатированных со смещением.

person Rob Latham    schedule 23.02.2015

И Уорд, и Роб дали прекрасные ответы! ;-)

Но есть еще один способ получить параллельный ввод-вывод для классических и 64-битных файлов смещения через стандартный API-интерфейс netCDF.

Когда netCDF собран с параметром --enable-pnetcdf, то за кулисами используется библиотека parallel-netcdf для выполнения параллельного ввода/вывода с классическим, 64-битным смещением и CDF5 (хотя я не тестировал этот последний формат с параллельный ввод-вывод).

При открытии файла используйте флаг NC_PNETCDF для режима, чтобы указать, что вы хотите использовать параллельный ввод-вывод для этого файла.

person Edward Hartnett    schedule 14.01.2016