<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div class="socmaildefaultfont" dir="ltr" style="font-family:Arial, Helvetica, sans-serif;font-size:10.5pt"><div dir="ltr"><div>[The previous email was missing the body somehow; so here we go again!]</div>
<div> </div>
<div>Storytime! Consider the following scenario:</div>
<div> </div>
<div>1. Using Hydra, MPICH spawns 2 different processes (Simulators). Call them Apple and Orange!<br>2. Apple and Orange start, they load a dynamically linked library, and they use that library to call MPI_Init and do all MPI communications. (That DLM is what I make)<br>3. Sometime later we initiate a checkpoint<br>4. Apple saves everything it needs into a file which it loads on the restart<br>Ora5. nge, however, saves the whole Linux process state and loads it back up at the restart.<br>6. Now later, we want to load the simulation from the checkpoint to run it with different parameters.<br>7, We call Hydra again with the new parameters to start Apple and Orange<br>8. Apple comes up, loads its stuff, loads my library, and calls MPI_Init (Allgood)<br>9. Pear loads the whole old state back up! Nice, except that the MPI state variables get loaded too as a part of Process state, so the MPI in orange thinks that it has already been initialized, but it doesn't know about this new network and its variables are for an old MPI network from the first simulation.</div>
<div> </div>
<div>This is a diagram for visualization [https://i.stack.imgur.com/Wf48T.png]</div>
<div> </div>
<div> </div>
<div>So here's my problem now:<br>How can I tell Orange to call MPI_Init again (or any other way really since I know duplicate calls to mpi_init is disallowed) so it can get to know of the new network?</div>
<div> </div>
<div> </div>
<div>Facts:<br>1. I can edit my library all I want. They are c++ libraries.<br>3. I cannot edit how the Apple and Orange simulators save the checkpoints or restart. They are proprietary simulators with no source code available.<br>4. Simulation run over days, so it is essential to run the common part first, and then save a checkpoint as a starting point for other simulations.</div>
<div> </div>
<div>My Research:</div>
<div>I know calling duplicate calls to MPI_Init is not an option<br>I have looked into the source code for MPICH where it checks if it's initialized, but I would rather not modify MPICH and have to maintain my own new silly version!<br>I have looked at the mailing list, stack overflow, and Google with no luck on how to connect to the new MPI network when a process state is restored.</div>
<div> </div>
<div> </div>
<div>Potential answer:</div>
<div>Of course, I could have my library start a new process and do everything there, but there will be a big performance overhead in communication from a simulator to this new process. Besides, doing it correctly is another can of worms which I prefer not opening if I can.</div>
<div> </div>
<div> </div>
<div>So... any ideas on how to tell this restored Orange process state that this is a new MPI network and you need to talk to this one now instead?</div>
<div>Thanks in advance :)</div></div></div><br>