Я изучаю вопрос о том, существует ли инфраструктура / библиотека, которая поможет мне реализовать распределенную вычислительную систему.
У меня есть мастер, который разбивает большой объем данных на несколько файловсто мегабайтФайлы будут разбиты на части по ~ 1 МБ и переданы работникам для обработки.После инициализации обработка каждого работника зависит от информации о состоянии, полученной из предыдущего чанка, поэтому работники должны оставаться в живых на протяжении всего процесса, и мастер должен иметь возможность отправлять нужные чанки нужным работникам.Еще одна вещь, которую стоит отметить, это то, что эта система является лишь частью более крупной цепочки обработки.
Я немного изучил MPI (в частности, Open MPI), но я не уверен, что этоправильно подходит.Похоже, что он предназначен для отправки небольших сообщений (несколько байтов), хотя я нашел несколько диаграмм, показывающих, что его пропускная способность увеличивается с увеличением файлов (до 1/5 МБ).
Я обеспокоен тем, чтоможет не быть способом поддержания состояния, если оно не было постоянно отправлено туда и обратно в сообщениях.Глядя на структуру некоторых примеров MPI, выглядело так, как хозяин (ранг 0) и рабочие (ранг 1-n) были частью одного и того же элемента, а их действия определялись условными выражениями.Могу ли я попросить рабочих остаться в живых (поддерживать состояние) и ждать, пока придут другие сообщения?
Теперь, когда я пишу это, я думаю, что это сработает.Секция ранга 1 ... n будет просто циклом с блокирующим приемом, за которым следует код обработки.Состояние будет поддерживаться в этом цикле до тех пор, пока не будет получено сообщение «больше нет данных», и в этот момент оно отправит результаты обратно.Я мог бы начать понимать структуру MPI здесь ...
Мой другой вопрос о MPI - как на самом деле запустить код.Помните, что эта система является частью большой системы, поэтому ее необходимо вызывать из другого кода.В примерах, которые я видел, используется mpirun, с помощью которого вы можете указать количество процессоров или файл hosts.Могу ли я получить то же поведение, вызывая мою функцию MPI из другого кода?
Так что мой вопрос в том, является ли MPI подходящей платформой здесь?Есть что-то лучше подходит для этой задачи, или я собираюсь делать это с нуля?