У меня есть программа, которая выполняет симуляцию типа Монте-Карло. В настоящее время я написал версию программы для OpenMP и OpenCL и хочу знать, как лучше распределить нагрузку между компьютерами в моей локальной сети.
Моя первая идея состояла в том, чтобы написать клиент-серверное приложение на основе сокетов, в котором сервер будет разделять рабочие блоки для отправки клиентам, а затем завершать их и отправлять результаты обратно. Чтобы использовать системы с быстрыми процессорами и графическими процессорами, я мог запустить несколько экземпляров клиентской программы в системе (исполняемый файл -omp и -ocl).
Тем не менее, программирование сокетов редко доставляет удовольствие и боль в правильности решения (выбор протокола и т. Д.). Поэтому я решил взглянуть на MPI, который выглядит неплохо, хотя я не уверен, насколько хорошо он работает, когда вы хотите включить в процессоры CPU + GPU или насколько хорошо подходит мой «рабочий блок», предписанный сервером. Области проблемного пространства для выборки нетривиальны, следовательно, требуется, чтобы разумный мастер-процесс координировал вещи.)
Следовательно, мне интересно знать, есть ли какие-либо другие варианты, доступные мне или что другие решили в подобной ситуации.