Планирование распределенных вычислений

istran

Всем привет.
Понадобилось распределить задачу по нескольким машинам.
Раньше я с распределенными вычислениями дела не имел, только с многопоточными.
Задача хорошо разбивается на подзадачи со своими входными и выходными данными.
Выходные данные подзадач используются в качестве входных другими подзадачами,
поэтому подзадачи по зависимостям организуют ациклический направленный граф.
Время выполнения каждой из подзадач и объем выходных данных каждой из них можно
оценить по исходным данным.
Пока я только понял, что все это буду реализовывать поверх MPI.
Подскажите в какую сторону копать по поводу следующих проблем:
1. Как раскидать задачи по машинам, чтобы минимизировать время выполнения,
с учетом затрат на пересылку данных?
2. Как грамотно выстроить архитектуру? Я так понимаю должен быть один
контроллер который организует и синхронизирует работу и воркеры для каждой машины,
но не хочется изобретать велосипед.

erotic

Мопед не мой, вернее, я сам на нем не катался, но краем уха слышал, что OpenMP вроде как умеет хоть на одной машине, хоть по сети распределять задачи, конфигурится только OpenMP для этого, а не твоя программа.

356ft85

OpenMP не подойдет

356ft85

Пока я только понял, что все это буду реализовывать поверх MPI.
Подскажите в какую сторону копать по поводу следующих проблем:
1. Как раскидать задачи по машинам, чтобы минимизировать время выполнения,
с учетом затрат на пересылку данных?
2. Как грамотно выстроить архитектура? Я так понимаю должен быть один
контроллер который организует и синхронизирует работу и воркеры для каждой машины,
но не хочется изобретать велосипед.
Ответы на все эти вопросы зависят целиком и полностью от задачи.
например если речь идёт о подборе пароля то тут параллельные технологии не потребуются - распределить на компы можно такую задачу вручную

istran

Ответы на все эти вопросы зависят целиком и полностью от задачи.
Задача не тривиальная. Структура вычислений примерно как на картинке:

geja_03

Пока я только понял, что все это буду реализовывать поверх MPI.
А всякие mpich и аналоги этого не умеют сами? Если нет, то смотри в сторону гридов (Condor, Oracle Grid Engine). У кондора точно DAG менеджер есть, насчет сановского творения не уверен, но тоже наверняка.

Serab

может быть надо что-то типа Kepler, CODE?
http://kepler-project.org/

istran

А всякие mpich и аналоги этого не умеют сами
А разве mpich это не просто одна из реализаций MPI?
Если нет, то смотри в сторону гридов (Condor, Oracle Grid Engine). У кондора точно DAG менеджер есть, насчет сановского творения не уверен, но тоже наверняка.
Condor с DAGMan вроде похож на то, что надо. Буду разбираться.

istran

может быть надо что-то типа Kepler, CODE?
http://kepler-project.org/
Не похоже. На первый взгляд это какая-то гуевая штука, да еще и на Java. Забыл написать, что пишу на C++.

Serab

ну и что, что гуевая? Ну и что, что на джаве? Модули там наверняка можно на любых языках писать.
Ты же говоришь, что сложные механизмы. Как раз недавно слушали предзащиту диссера, тут у нас чувак написал подобную систему, там тоже гуй прикручивается.
Короче, эти workflow системы очень круты, они как раз для этого: распределенное вычисление по сложной схеме.
Есть еще от Microsoft что-то, Microsoft Workflow бла-бла-бла.

okis

Workflow бла-бла-бла
Foundation

kiracher

Не совсем понятно зачем тут mpi. mpi нужен чтобы обеспечить синхронизацию разных решателей одной и той же задачи с одним набором данных. А тут, похоже, много несвязанных последовательно выполняемых задач, как минимум на начальном этапе. У меня впечатление что нужен скорее batch queue processor. Что-то типа torque.
http://en.wikipedia.org/wiki/TORQUE_Resource_Manager

rosali

Есть такой язычок поверх MPI, называется Charm++, кажется должен тебе очень даже подойти.

istran

Всем спасибо, пошел разбираться. Потом отпишусь о результатах.
Оставить комментарий
Имя или ник:
Комментарий: