Hello,
I am trying to convert an existing system from PVM to MPI. I have a few
questions and statements and I would appreciate any comments on them.
The system requires dynamic process management. I understand MPI2 has this
functionality. The system basically has a Service Configurator that
launches multiple Services. Each Service can be connected to any number of
other Services. With MPI, there is a MPI_Comm_spawn method. I have
identified this as the best way to launch external executables with MPI.
Question 1: Does the application spawned by MPI_Comm_spawn have to be an MPI
application itself? I have read that it does have to, but I have successfully
launch Unix apps like xcalc, which I know is not an MPI app.
Once Services are launched from the Service Configurator, they must
establish communication with each other. I have identified the socket like
behavior of MPI as suitable for this (MPI_Open_port, MPI_Comm_connect, etc).
Question 2: My system needs to be able to handle dynamic Service disconnection
commands. If I wanted to disconnect Service A from B and connect A to C, it
seems that Id have to instruct A to disconnect from B, tell C to call
MPI_Comm_accept, then tell A to connect to C. Is there anyway to do this in a
non-blocking manner? What if I wanted to connect multiple Services to Service
C? Would Service C have to do multiple blocking MPI_Comm_accept calls?
Wouldn't this create a a logjam with the other Services trying to connect to
Service C?
Question 3: My system requires a high fault tolerance. With permanent MPI
pipelines being open between Services and between Services and the Service
Configurator, isnt there a significant chance for an error in communication
to bring down the entire MPI system? Is there anyway to recover smoothly from
a seg fault or fatal error in communication? As a test, I purposely caused a
seg fault in a Service while it was connected to another Service with MPI and
it brought down both Services. Any way around this?
Question 4: Are there any caveats to making an MPI shared object? I would
like all of the Services to dynamically use a shared Dispatcher object that
uses MPI as the message passing paradigm.
Question 5: Lastly, I dont even know if MPI is right for this kind of system.
The Service Configurator and Services will always be using just one MPI
process each. So in effect, the only thing I am using MPI for would be the
message passing between Services and between Services and the Service
Configurator. Is this proper use of MPI?
I think these are all my questions for now. I hope I have made them clear as
possible. I will be happy to go into more detail if needed. I appreciate any
help.
Andy Tarpley
|