Преобразование параллельной программы в кластерную программу.Из OpenMP в?

StackOverflow https://stackoverflow.com/questions/972837

  •  13-09-2019
  •  | 
  •  

Вопрос

Я хочу написать конвертер кода, который берет параллельную программу на основе OpenMP и запускает ее в кластере.

Как мне решить эту проблему?Какие библиотеки я использую?Как мне настроить небольшой кластер для этого?

Мне чрезвычайно трудно найти хороший материал о кластерных вычислениях в Интернете.

Редактировать:Если это невозможно, то как Intel это делает?Компилятор Intel, похоже, делает именно то, что я хочу.У меня нет какого-либо конкретного приложения, которое я хотел бы запустить.Я хочу написать "конвертер / компилятор", а не приложение.Я понимаю, что общая память отличается от распределенной памяти, но должен быть способ синхронизировать память, если не для всех случаев, то для некоторых конкретных случаев, даже если это означает, что приложение написано с использованием пользовательских конструкций.

Это было полезно?

Решение

Мне кажется, что это не очень хорошая идея.

Основная идея, лежащая в основе OpenMP, - параллельное выполнение с общим доступом к данным.Это работает хорошо, когда доступ к общим данным вам ничего не стоит.Каждый поток может получить доступ к переменной в общем кэше или оперативной памяти.

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

Итак, если вы хотите написать такой компилятор, вам следует реализовать операции передачи данных (напримерMPI_Bcast из MPI) для каждого доступа к данным в OpenMP.Это вообще убьет параллельную производительность.

Другие советы

Intel имеет реализацию OpenMP, которая работает с их компиляторами C ++ и Fortran для 64-разрядных кластеров x86.Вы можете бесплатно получить 30-дневную версию этих компиляторов для оценки.В остальном, Зифре в основном права.Если вас беспокоит масштабируемость, стисните зубы и напишите свою параллельную программу в другой модели программирования (MPI, CUDA, Cilk, ...), которая разработана с учетом распределенных систем.Если вы предоставите немного больше информации о своем приложении, мы, возможно, сможем предоставить более полезные рекомендации по этому вопросу.

Это просто невозможно.Вы должны структурировать свой код совершенно другим способом, чтобы заставить его работать на кластере (программирование нескольких машин - это очень отличается от программирования одной машины).

Для этого нет волшебной пыльцы фей.

С другой стороны, если вы пишете свою программу с учетом кластеров, ее можно запустить на одной машине (хотя это, очевидно, будет медленнее).

Компилятор SCORE / SCASH и Omni OpenMP

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top