Раздели программу на две: одна- ГУИ, другая - для вычисления, общения между ними - DBus, либо собственный протокол. С потоками проблем много - нужно блокировки ставить, значительно увеличишь время на разработку.
Можно, конечно. В большинстве реализаций, mpirun -- всего лишь скрипт на shell. Только вот нафига? Он для того и сделан, чтобы не возиться с деталями реализации способа обмена данными.