package statalign;
import java.util.Arrays;
import mpi.MPI;
import statalign.base.MainManager;
import statalign.postprocess.Postprocess;
public class StatAlignParallel {
public static void main(String[] args) {
// The MPJ framework appends (at least) three parameters in front of the normal
// parameters when it is initializing the processes. We want to separate those
// from the normal parameters (mpiArgs = [0, 1, 'mpidev'], realArgs = [....]).
String[] mpiArgs = new String[3];
String[] realArguments = new String[args.length - 3];
for (int i = 0; i < 3; i++) {
mpiArgs[i] = args[i];
}
for (int i = 3; i < args.length; i++) {
realArguments[i - 3] = args[i];
}
// Initializes the MPJ framework.
MPI.Init(mpiArgs);
int rank = MPI.COMM_WORLD.Rank();
int noOfProcesses = MPI.COMM_WORLD.Size();
if (MPIUtils.isMaster(rank)) {
System.out.println("\n StatAlign " + StatAlign.version + " - parallel version\n");
System.out.println(" Arguments: " + Arrays.toString(realArguments));
System.out.println(" No of processes: " + noOfProcesses + "");
}
MainManager manager = new MainManager(null);
CommandLine cl = new CommandLine(true);
// Only get INFO messages (errors and warnings excluded) from the master.
if (MPIUtils.isMaster(rank)) {
cl.setVerbose(true);
}
// Configure the program.
if (cl.fillParams(realArguments, manager) > 0) {
System.exit(1);
}
// TODO cf. comment in StatAlign
manager.init(cl.pluginParameters);
//manager.init(Postprocess.pluginParameters);
// Sets up a barrier to synchronize the processes here.
MPI.COMM_WORLD.Barrier();
manager.startParallel(noOfProcesses, rank);
MPI.Finalize();
}
}