MPI может быть частью вашего ответа, но, глядя на вопрос, я не уверен, что он решает ту часть проблемы, которая вас волнует.
MPI обеспечивает уровень связи между компонентами обработки. Это низкий уровень, требующий от вас выполнения значительного объема работы, но, как я увидел во вводной презентации, он также поставляется с некоторыми общими функциями манипулирования матричными данными.
В вашем вопросе вас больше интересуют аспекты проблемы с балансировкой нагрузки / обработкой заданий. Если это действительно ваше внимание, возможно, вам подойдет небольшая программа, размещенная на сервлете или сервере RMI. Пусть каждая программа отправится на сервер для следующей единицы работы, а затем отправит результаты обратно (возможно, вы даже сможете использовать базу данных / общий файловый ресурс, но обратите внимание на проблемы блокировки). Другими словами, механизм натяжения против механизма толчка.
Этот подход довольно прост в реализации и дает вам преимущество в увеличении масштаба путем простого запуска большего количества распределенных клиентов. Балансировка нагрузки не слишком важна, если вы хотите, чтобы ваш процесс получил полный контроль над машиной. Вы можете поэкспериментировать с запуском нескольких клиентов на машине с несколькими ядрами, чтобы увидеть, сможете ли вы улучшить общую пропускную способность для узла. Многопоточный клиент будет более эффективным, но может увеличить сложность в зависимости от структуры кода, который вы используете для решения проблемы.