2013-10-15 2 views
0

У меня есть две программы master и slave. Мой мастер выполняет декомпозицию данных, а ведомые устройства выполняют вычисления со стороны разложенных данных. MPI scaterv реализован для распространения работы. Сначала я запускаю мою основную программу, затем динамически порождает дочерние или подчиненные процессы, а подчиненный выполняет другой код ie.computation. Теперь снова мастер должен собирать результаты с ведомых и выполняет следующий уровень декомпозиции. как это сделать с помощью MPI? Я действительно хотел выполнить мой мастер и подчиненный код попеременно. Как я могу это реализовать?MPI изменить порядок выполнения master и slaves

Спасибо заранее ..

ответ

0

MPI-2 (если я правильно помню) введены механизмы динамического управления процессом, вы могли бы заботиться искать mpi_comm_spawn, чтобы начать изучение этих механизмов. Поэтому, безусловно, возможно написать программу MPI, которая чередуется между одним процессом, выполняющим главную задачу, и несколькими процессами, выполняющими рабочие задачи (термин slave устарел). Можно даже спроектировать ваши вычисления, чтобы одна программа выполняла главную задачу, а другая программа выполняла (несколько) рабочих задач и использовала MPI для передачи сообщений между ними.

НО (это большой, но) Я не думаю, что многие менеджеры ресурсов (или люди, которые управляют параллельными компьютерными системами или операционной системой и системным программным обеспечением, например менеджерами по работе) поддерживают такое динамическое управление процессами. Представьте сложность планирования и управления двумя или более программами с базовым дизайном, который вы предлагаете. Так же, как программа A пытается запустить 2^10 рабочих процессов, также программа B и программа C, в то время как программа D пытается сбросить 2^8 рабочих процессов; все это на кластере с только 2^10 процессорами (или ядрами). Вероятно, не так сложно построить сценарии, где пропускная способность рабочих мест в кластере падает до нуля, поскольку несколько рабочих мест конкурируют за ограниченные ресурсы.

Если ваша платформа поддерживает динамическое управление процессом, идите прямо вперед. В гораздо более вероятном случае, когда на вашей платформе нет, по крайней мере, два варианта, который вы выбираете, зависит от отношения мастера: рабочего времени и, возможно, других факторов. Вы могли бы:

  1. Выполняйте то, что большинство из нас всегда делали и продолжают делать и запрашивают общее количество процессоров для всей работы, оставляя всех, кроме одного, бездействующим во время фаз только для мастера. Возможно, для менеджеров ресурсов легко справиться с отходами. Относительно легко программировать.
  2. Если мастер выполняет много работы между этапами работника, вы можете изменить свою программу, чтобы мастер и работник были отдельными программами. Сначала выполните мастер в одном процессе и, по мере его завершения, отправьте запрос в систему управления заданиями, чтобы начать первый этап расчета рабочего. Попросите, в свою очередь, инициировать выполнение следующей основной фазы и т. Д. И т. Д.
+0

Да, именно так я разработал код, который использует MPI_comm_spawn(), который динамически создает дочерние процессы. Давайте посмотрим, как это работает. :) – user2881216

Смежные вопросы