Это почти вопрос. Я имею в виду, я знаю, что mpi_file_write_all - это «коллективная» версия, но я считаю, что mpi_file_write будет вызываться несколькими процессами одновременно, так что какова фактическая разница в их работе? Благодарю.Как mpi_file_write отличается от mpi_file_write_all?
ответ
Функционально в большинстве практических ситуаций мало различий. Если ваш IO работает правильно с mpi_file_write_all(), он должен корректно работать с mpi_file_write(), если вы не делаете что-то очень сложное. Обратное не строго верно, но в большинстве реальных ситуаций, которые я видел, когда все процессы выполняют простые обычные шаблоны ввода-вывода в одно и то же время, mpi_file_write_all() работает, если mpi_file_write().
В любом случае, если вы вызываете mpi_file_write(), тогда библиотека IO должна обрабатывать этот запрос ввода-вывода, а затем, поскольку он не может предположить, что другие процессы также выполняют IO. Во всех, кроме самых простых параллельных разложений, данные из одного процесса не будут содержать единый непрерывный фрагмент файла. В результате каждый процесс будет выполнять большое количество небольших транзакций ввода-вывода (запись, поиск, запись, поиск, ...), что очень неэффективно для параллельной файловой системы. Хуже того, он, вероятно, блокирует файл, когда он выполняет IO, чтобы остановить другие процессы, мешающие тому, что он делает, поэтому IO может эффективно сериализоваться через процессы.
С write_all() библиотека IO имеет глобальный вид и знает, что делает каждый процесс. Во-первых, это позволяет ему реорганизовать данные, поэтому каждый процесс имеет один большой кусок данных для записи в файл. Во-вторых, поскольку он контролирует все процессы, он может избежать необходимости блокировки файла, поскольку он может гарантировать, что записи не конфликтуют.
Для простых обычных образцов, например. большой трехмерный массив, распределенный по трехмерной сетке процессов, я видел огромные различия между коллективными и не коллективными подходами на Cray с файловой системой Luster. Разница может составлять гигабайт/сек против десятков мегабайт в секунду.
PS Я предполагаю, что в шаблоне много процессов, записывающих данные в один общий файл. Для чтения также должно быть улучшение (небольшое количество больших непрерывных чтений), но, возможно, не так драматично, как блокировка файлов для чтения не требуется.
- 1. Как `((...))` отличается от `(...)`?
- 2. Как отличается от +?
- 3. Как $() отличается от перенаправления?
- 4. Как профилирование отличается от регистрации?
- 5. Как listview отличается от listactivity
- 6. Как отличается android.database от android.database.sqlite?
- 7. Как __proto__ отличается от конструктора.прототипом?
- 8. Как отличается engine.io от socket.io?
- 9. Как WebDAV отличается от HTTP?
- 10. Как input_iterator_tag отличается от forward_iterator_tag?
- 11. Как redisAsyncConnect() отличается от redisConnect()?
- 12. Как Node.js отличается от tomcat
- 13. Как огурец отличается от JUnit?
- 14. Как сборка отличается от сборки?
- 15. Как BroadcastReceiver отличается от намерения
- 16. Как Gitlab отличается от Github?
- 17. Как Logstash отличается от Kafka
- 18. Как ракета отличается от схемы?
- 19. Как металл отличается от стойки?
- 20. Как PostgreSQL отличается от MySQL?
- 21. как двойной отличается от Double?
- 22. Как ArrayListMultimap отличается от LinkedListMultimap?
- 23. Как mysql отличается от оракула?
- 24. Как список отличается от карты?
- 25. Как Fitnesse отличается от JUnit?
- 26. Как HWSURFACE отличается от текстуры?
- 27. Как posix_memalign отличается от mmap
- 28. Почему == отличается от === здесь?
- 29. RandomForestClassifier отличается от BaggingClassifier
- 30. JSON.stringify отличается от примера
Да, шаблон представляет собой много процессов, записывающих общий файл. Спасибо за объяснение. Я определенно вижу большие успехи в производительности с помощью write_all. Приятно понять, почему. Является ли это общедоступным? Не мог найти ничего. –
Мое объяснение в значительной степени основано на выполнении некоторых простых тестов (см. «Производительность параллельного ввода-вывода на ARCHER» по адресу http://www.archer.ac.uk/documentation/white-papers/), затем поговорить с местным персоналом Cray, чтобы попытаться понять, что происходит. В нижней части этой страницы есть куча полезных ссылок: https://www.rc.colorado.edu/support/examples-and-tutorials/parallel-io-on-janus-lustre.html –
Спасибо за ссылки ! –