MPI большие данные все для всех передачи - PullRequest
1 голос
/ 13 июня 2010

Мое приложение MPI имеет некоторый процесс, который генерирует большие данные. Скажем, у нас есть N + 1 процесс (один для главного управления, другие - рабочие), каждый из рабочих процессов генерирует большие данные, которые теперь просто записываются в обычный файл с именем file1, file2, ..., fileN. Размер каждого файла может быть совершенно разным. Теперь мне нужно отправить весь файлM для ранга M, чтобы выполнить следующую работу, так что это точно так же, как и для всей передачи данных.

Моя проблема в том, как мне использовать MPI API для эффективной отправки этих файлов? Раньше я использовал папку общего доступа Windows для их передачи, но я думаю, что это не очень хорошая идея.

Я думаю о MPI_file и MPI_All_to_all, но эти функции, похоже, не очень подходят для моего случая. Простые MPI_Send и MPI_Recv, кажется, трудно использовать, потому что каждый процесс должен передавать большие данные, а я пока не хочу использовать распределенную файловую систему.

1 Ответ

3 голосов
/ 13 июня 2010

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

  • Если ваши процессы генерируют большие наборы данных, они вряд ли будут это делать.мгновенно.Вместо того, чтобы думать о том, чтобы подождать, пока будет создан весь набор данных, вы можете подумать о том, чтобы передать его по частям.
  • Я не думаю, что MPI_Send и _Recv (или их варианты) трудноиспользовать для больших объемов данных.Но вам нужно подумать о том, чтобы найти правильную сумму для передачи в каждом обмене данными между процессами.С MPI это не простой случай наличия времени запуска сообщения плюс скорость передачи сообщения, которая применяется ко всем отправленным сообщениям.Некоторые реализации IBM, например, на некоторых из их аппаратных средств имели различную задержку и пропускную способность для маленьких и больших сообщений.Однако вы должны сами выяснить, каковы компромиссы между пропускной способностью и задержкой для вашей платформы.Единственный общий совет, который я бы дал здесь, - это параметризовать размеры сообщений и экспериментировать, пока вы не добьетесь максимального соотношения вычислений и коммуникаций.
  • Помимо этого, одним из тестов, который вы уже должны были сделать, является измерение скорости передачи сообщений.для широкого спектра размеров и моделей связи на вашей платформе.Это своего рода базовый тест, когда вы начинаете работу над новой системой.Если у вас нет ничего более подходящего, эталон STREAMS поможет вам начать работу.
  • Я думаю, что всеобщая передача больших объемов данных - это необычный сценарийв тех программах, для которых обычно используется MPI.Возможно, вы захотите серьезно подумать о редизайне вашего приложения, чтобы избежать такой передачи.Конечно, только вы знаете, возможно ли это или стоит.Из того небольшого количества информации, которую вы предоставляете, создается впечатление, что вы реализуете какой-то конвейер;в таких случаях обычным способом обмена данными является процесс 0 - процесс 1, процесс 1 - процесс 2, 2 - 3 и т. д.
  • Наконец, если вы работаете на компьютере с общей памятью (например,как многоядерный ПК) вы можете подумать об использовании подхода с общей памятью, такого как OpenMP, чтобы избежать передачи больших объемов данных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...