make LPs (MPI) usable in more contexts
Currently it's not really possible to use the MPI client in any other context than within its own standalone program. Same with the IO clients we've developed. For example, we may want the MPI client to handle communication operations and an IO client to perform IO operations, under the same "process".
One way of getting around this is to recast the LP(s) as "libraries" that allow some arbitrary LP to drive it's execution, similar to how the model-net LP drives the individual network LPs. Under this change, the user would drive the workload parsing loop and call into the library LP to perform actions (such as MPI ops) on behalf of her. Changing this requires reworking the interface in such a way that:
- event type integers of the library LPs (the MPI LP) are offset so as to prevent conflicts (the user would specify this)
- specify an interface for driving the actual operations. This could be as simple as
switching on the workload operation type and forwarding to the library LP.
- instead of the MPI/IO LPs driving the workload generation, have a callback-style interface that informs the user of events of interest (ie an MPI_Send has completed).
If we have this in place, we can use the MPI client basically anywhere, with the user needing to provide a shim to call into and out of the client.