Skip to content
Snippets Groups Projects
Commit b98da502 authored by zwart's avatar zwart
Browse files

BugID: 719

Broadcast commandline arguments when using mpi. The standard doesn't say if they should
be broadcast by MPI_Init or the user.
parent d0d94056
No related branches found
No related tags found
No related merge requests found
......@@ -39,16 +39,43 @@ namespace LOFAR {
using APS::ParameterSet;
int ACCmain (int argc, char* argv[], ProcessControl* theProcess) {
int ACCmain (int argc, char* orig_argv[], ProcessControl* theProcess) {
string programName = basename(argv[0]);
char** argv = orig_argv;
#ifdef HAVE_MPI
TH_MPI::initMPI(argc, (const char**)argv);
TH_MPI::initMPI(argc, orig_argv);
int myRank = TH_MPI::getCurrentRank();
// The MPI standard does not demand that the commandline arguments are distributed, so we do it ourselves.
// Broadcast number of arguments
MPI_Bcast(&argc, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (myRank != 0) {
argv = new char*[argc];
} else {
char** argv = orig_argv;
}
for (int arg = 0; arg < argc; arg++) {
int arglen = 0;
if (myRank == 0) arglen = strlen(argv[arg]) + 1;
// Broadcast the length of this argument
MPI_Bcast(&arglen, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (myRank != 0) {
argv[arg] = new char[arglen];
}
// Broadcast the argument;
MPI_Bcast(argv[arg], arglen, MPI_BYTE, 0, MPI_COMM_WORLD);
}
#endif
try {
string programName = basename(argv[0]);
try {
// Check invocation syntax
if ((argc!=3) || (strncmp("ACC", argv[1], 3) != 0)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment