Мелкомасштабные распределенные вычисления - PullRequest
0 голосов
/ 15 января 2011

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

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

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

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

1 Ответ

1 голос
/ 16 января 2011

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

...