Преобразование параллельной программы в кластерную программу. От OpenMP до? - PullRequest
2 голосов
/ 10 июня 2009

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

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

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

РЕДАКТИРОВАТЬ: Если это невозможно, то как Intel это делает? Компилятор Intel, кажется, делает именно то, что я хочу. У меня нет конкретного приложения, которое я хотел бы запустить. Я хочу написать «конвертер / компилятор», а не приложение. Я понимаю, что разделяемая память отличается от распределенной памяти, но должен быть способ синхронизации памяти, если не для всех случаев, то для некоторых конкретных случаев, даже если это означает, что приложение написано с использованием пользовательских конструкций.

Ответы [ 4 ]

3 голосов
/ 10 июня 2009

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

2 голосов
/ 20 июня 2009

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

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

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

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

1 голос
/ 13 июля 2009

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

1 голос
/ 10 июня 2009

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

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

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

...