>А почему MPI нельзя? Во-первых, всем приятного возвращения из отпуска. )
Во-вторых, проблему в треде я решил (ИМХО!) приемлемо – UDP сокеты + обработчик из вот этой темы https://www.opennet.ru/openforum/vsluhforumID9/7497.html на SIGIO.
В-третьих, почему не MPI. MPI можно, но мне не нравиться несколько его свойств (сам MPI не пользовал, только читал документацию, потому поправите, если что):
1. MPI запрашивает данные, нужные для продолжения расчета, в момент, когда они уже нужны алгоритму. В моих задачах (биомедицинское моделирование) есть возможность предсказывать, какие данные понадобятся дальше, и, таким образом, избегать простоев потоков в ожидании их доставки, да и саму доставку можно оптимизировать как по времени, так и по топологии сети (последнее впрочем, скорее мечты). Хотя эту часть работы можно переложить на приложение, но ее реализация по затратам усилий сопоставима с разработкой простенькой специализированной программной платформы для кластерных вычислений (виртуальный процессор, стек его команд, протокол обмена данными и т.д.). Короче полумеры – не наш метод ).
2. MPI не позволяет переносить задачу между физичесими потоками и/или менять количество задействованных потоков "на лету", что на практике приводит к частичным простоям и последующим перегрузкам кластера.
3. Нужно дополнительное, стороннее ПО, которое выделит ресурсы для выполнения задачи на кластере.
4. Симметричность приложений MPI. Хотя это и не обязательное правило, но куда рациональнее иметь некий инструмент (в моем случае речь идет о примитивном движке базы данных) в составе системы управления потоками данных, чем изобретать велосипед во всех разрабатываемых приложения.