2011-01-15 2 views
0

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

Моя первая идея состояла в том, чтобы написать приложение на основе сокетов, которое будет разделять рабочие единицы для отправки клиентам, которые затем завершат их и отправят обратно результаты. Чтобы использовать системы с быстрыми процессорами и графическими процессорами, я мог запускать несколько экземпляров клиентской программы в системе (исполняемый файл aomp и a -ocl).

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

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

+0

mpi - стандарт дезактома. – Anycorn

ответ

1

Ваше описание немного расплывчато, но это, безусловно, звучит с MPI. Добавление GPU не должно иметь значения, поскольку MPI не относится к тому, какой код работает отдельно от вызовов MPI (например, однажды я написал приложение MPI, которое использовало Qt для визуализации и потоковой передачи).

Самое большое предостережение, которое я вижу, заключается в том, что программа MPI состоит из нескольких экземпляров одной программы: если ваши решения OpenMP и OpenCL являются отдельными приложениями, вы не можете просто создать пару из них и объединить их всех. Однако вы можете написать простое приложение-оболочку, которое, например, создает один поток с помощью решения OpenMP и другой поток с решением OpenCL. Запуск этого приложения-обертки с MPI достигнет желаемого результата, но тогда, конечно, общение может немного запутаться (обмен информацией между коммуникаторами между потоками и т. Д.).

+1

Нет проблем с запуском различных программ в коммуникаторе с MPI. Для OpenMPI см. Http://www.open-mpi.org/faq/?category=running#mpmd-run; MPICH2 имеет аналогичный синтаксис. Я добавлю, что MPI действительно предназначен для надежных сетей в кластере, а не для распределенных вычислений; он не будет хорошо реагировать, если один из ваших компьютеров выключен, или сбои сети. Помимо этого, он должен работать - такой «гибридный» подход к распараллеливанию с MPI используется довольно часто в HPC. –

+0

Укажите, что я не знал об этом. Просто из любопытства, это стандартная функция, которая должна иметь все реализации MPI? – suszterpatt

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