OpenMP или MPI или OpenMPI для кластера распределенной памяти? - PullRequest
5 голосов
/ 15 декабря 2010

Я хочу распараллелить последовательный код C в кластере распределенной памяти на 100 узлов. Кластер состоит из 25 лопастей с четырьмя ядрами на каждом от InfinBand. Раньше я просто использовал PBS для распространения нескольких последовательных прогонов программы между различными узлами. Теперь мне интересно:

  1. Какова лучшая альтернатива в этом случае OpenMP или MPI или OpenMPI (в данный момент я не хочу пробовать смешанный подход, поскольку я начинаю учиться)?
  2. Где я могу найти примеры / учебные пособия?
  3. Для простого последовательного кода с основным циклом for всегда может OpenMP / MPI / OpemMPI работать лучше, чем подход с очередями, такой как PBS?

Ответы [ 2 ]

15 голосов
/ 15 декабря 2010

Распределенная память исключает использование OpenMP для вычислений с общей памятью. MPI - это стандарт, а OpenMPI - это реализация этого стандарта (есть и другие, такие как MPICH или LAM-MPI). так

  1. MPI, и OpenMPI - его вполне респектабельная реализация. Тем не менее, я думаю, что довольно необычно найти такие кластеры, как ваш, без установки MPI, поэтому лучшим выбором может быть установка MPI, которая у вас уже есть. Об этом следует обязательно поговорить с менеджерами системы. И вам, конечно, не следует пытаться устанавливать OpenMPI в кластере, не зная, что вы делаете.

  2. Повсюду. Вот одно хорошее место для начала.

  3. PBS - система планирования работы. В таком кластере, как ваш, вы обычно устанавливаете MPI и планировщик заданий, если не PBS, то Grid Engine наиболее вероятен.

Как вы уже обнаружили, вы можете использовать PBS (или Grid Engine в этом отношении) для отправки нескольких последовательных заданий в кластер. Вы также можете использовать его для отправки одного параллельного задания в кластер для выполнения на любом количестве процессоров, которые вы запрашиваете. Однако ваш вопрос повышает вероятность того, что ваша проблема смущающе параллельна и что MPI может оказаться для вас излишним. Поищите в курсиве термин «курсив», прежде чем брать на себя обязательство распараллеливать свою программу - если только вы не хотите ради удовольствия, которое, несомненно, приведет к этому.

2 голосов
/ 15 декабря 2010

OpenMP для компьютеров с общей памятью, я считаю, что вы не можете использовать его с распределенной памятью. Так что вам придется использовать MPI.

Хороший учебник по MPI: https://computing.llnl.gov/tutorials/mpi/

...