I have a very large external package I would like to use in my application. The package runs in parallel but only under MPI. To have users start the application under "mpirun ..." is impractical.
However, there is a call - MPI_Init_thread - that appears equivalent to MPI_Init. So here's my question: can I continue building the application as I normally do then, say, on Windows, start multiple threads with _beginthreadex and, in each of the threads call MPI_Init_thread? In other words, would all subsequent calls to MPI behave as if I had a true multiprocessor run, except that functions such as MPI_Comm_rank would return the rank within this multi-threaded application, rather than in a multi-processor application?
I'm trying to use this external package but will only run it on multi-core machines as multi-threaded. I'm hoping that all message passing will now be optimized for shared memory and I can use MPI transparently in a single processor application.