Example #1
0
int main(int argc, char * argv[]) {
   int status;
   PV_Init initObj(&argc, &argv, false/*allowUnrecognizedArguments*/);
   int rank = 0;
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);

   if (initObj.getParamsFile()!=NULL) {
      if (rank==0) {
         pvErrorNoExit().printf("%s runs a number of params files in sequence.  Do not include a '-p' option when running this program.\n", argv[0]);
      }
      MPI_Barrier(MPI_COMM_WORLD); /* Can't use `initObj.getComm()->communicator()` because initObj.initialize hasn't been called. */
      exit(EXIT_FAILURE);
   }

   initObj.setParams("input/LayerRestartTest-Write.params");
   status = rebuildandrun(&initObj);
   if( status == PV_SUCCESS ) {
      char const * checkParamsFile = "input/LayerRestartTest-Check.params";
      if (rank==0) {
         pvInfo().printf("*** %s: running params file %s\n", initObj.getProgramName(), checkParamsFile);
      }
      initObj.setParams("input/LayerRestartTest-Check.params");
      status = rebuildandrun(&initObj, NULL, &checkComparisonNonzero);
      if( status == PV_SUCCESS ) {
         char const * readParamsFile = "input/LayerRestartTest-Read.params";
         if (rank==0) {
            pvInfo().printf("*** %s: running params file %s\n", initObj.getProgramName(), checkParamsFile);
         }
         initObj.setParams(readParamsFile);
         status = rebuildandrun(&initObj, NULL, &checkComparisonZero);
      }
   }

#ifdef PV_USE_MPI
   // Output status from each process, but go through root process since we might be using MPI across several machines
   // and only have a console on the root process
   if (rank == 0) {
      int otherprocstatus = status;
      int commsize;
      MPI_Comm_size(MPI_COMM_WORLD, &commsize);
      for(int r=0; r<commsize; r++) {
         if( r!= 0) MPI_Recv(&otherprocstatus, 1, MPI_INT, r, 59, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
         if( otherprocstatus == PV_SUCCESS ) {
            pvInfo().printf("%s: rank %d process succeeded.\n", argv[0], r);
         }
         else {
            pvErrorNoExit().printf("%s: rank %d process FAILED with return code %d\n", argv[0], r, otherprocstatus);
            status = PV_FAILURE;
         }
      }
   }
   else {
      MPI_Send(&status, 1, MPI_INT, 0, 59, MPI_COMM_WORLD);
   }

   //if( !mpi_initialized_on_entry ) MPI_Finalize();
#endif // PV_USE_MPI
   return status;
}
Example #2
0
int main(int argc, char * argv[]) {
   int rank = 0;
   PV_Init initObj(&argc, &argv, false/*allowUnrecognizedArguments*/);
   rank = initObj.getWorldRank();
   char const * paramFile1 = "input/timeBatch.params";
   char const * paramFile2 = "input/dimBatch.params";
   int status = PV_SUCCESS;
   if (pv_getopt_str(argc, argv, "-p", NULL, NULL)==0) {
      if (rank==0) {
         pvErrorNoExit().printf("%s should be run without the params file argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (pv_getopt_str(argc, argv, "-c", NULL, NULL)==0) {
      if (rank==0) {
         pvErrorNoExit().printf("%s should be run without the checkpoint directory argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (pv_getopt(argc, argv, "-r", NULL)==0) {
      if (rank==0) {
         pvErrorNoExit().printf("%s should be run without the checkpoint directory argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (status != PV_SUCCESS) {
      if (rank==0) {
         pvErrorNoExit().printf("This test uses two hard-coded params files, %s and %s. The second run is started from a checkpoint from the first run, and the results of the two runs are compared.\n",
               paramFile1, paramFile2);
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }

   if (rank==0) {
      char const * rmcommand = "rm -rf checkpoints1 checkpoints2 output";
      status = system(rmcommand);
      if (status != 0) {
         pvError().printf("deleting old checkpoints and output directories failed: \"%s\" returned %d\n", rmcommand, status);
      }
   }

   initObj.setParams(paramFile1);

   status = rebuildandrun(&initObj);
   if( status != PV_SUCCESS ) {
      pvError().printf("%s: rank %d running with params file %s returned status code %d.\n", initObj.getProgramName(), rank, paramFile1, status);
   }

   initObj.setParams(paramFile2);

   status = rebuildandrun(&initObj);
   if( status != PV_SUCCESS ) {
      pvError().printf("%s: rank %d running with params file %s returned status code %d.\n", initObj.getProgramName(), rank, paramFile2, status);
   }

   return status==PV_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;
}
Example #3
0
int main(int argc, char * argv[]) {
   const char * paramfile1 = "input/RandStateSystemTest1.params";
   const char * paramfile2 = "input/RandStateSystemTest2.params";

   int rank=0;
   PV_Init* initObj = new PV_Init(&argc, &argv, false/*allowUnrecognizedArguments*/);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Can't use `initObj->getComm()->communicator()` because initObj->initialize hasn't been called. */

   PV_Arguments * arguments = initObj->getArguments();
   if (arguments->getParamsFile() != NULL) {
      if (rank==0) {
         fprintf(stderr, "%s does not take -p as an option.  Instead the necessary params files are hard-coded.\n", arguments->getProgramName());
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }

   arguments->setParamsFile(paramfile1);
   int status1 = rebuildandrun(initObj, NULL, NULL, NULL, 0);
   if (status1 != PV_SUCCESS) {
      fprintf(stderr, "%s failed on param file %s with return code %d.\n", arguments->getProgramName(), paramfile1, status1);
      return EXIT_FAILURE;
   }

   arguments->setParamsFile(paramfile2);
   int status2 = rebuildandrun(initObj, NULL, &customexit, NULL);
   if (status2 != PV_SUCCESS) {
      fprintf(stderr, "%s failed on param file %s.\n", arguments->getProgramName(), paramfile2);
   }
   int status = status1==PV_SUCCESS && status2==PV_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;

#ifdef PV_USE_MPI
   if (status == EXIT_SUCCESS) {
      printf("Test complete.  %s passed on process rank %d.\n", arguments->getProgramName(), rank);
   }
   else {
      fprintf(stderr, "Test complete.  %s FAILED on process rank %d.\n", arguments->getProgramName(), rank);
   }
#else
   if (status == EXIT_SUCCESS) {
      printf("Test complete.  %s passed.\n", arguments->getProgramName());
   }
   else {
      fprintf(stderr, "Test complete.  %s FAILED.\n", arguments->getProgramName());
   }
#endif // PV_USE_MPI

   delete initObj;

   return status;
}
Example #4
0
int testioparams(PV_Init* initObj, int rank) {
   PV_Arguments * arguments = initObj->getArguments();
   arguments->resetState();
   // Ignore -r and -c switches
   arguments->setRestartFlag(false);
   arguments->setCheckpointReadDir(NULL);
   initObj->initialize();
   HyPerCol * hc = build(initObj, NULL, 0);
   if (hc == NULL) {
      fprintf(stderr, "testioparams error: unable to build HyPerCol.\n");
      exit(EXIT_FAILURE);
   }
   int status = hc->run(); // Needed to generate pv.params file
   if (status != PV_SUCCESS) {
      fprintf(stderr, "testioparams error: run to generate pv.params file failed.\n");
      exit(EXIT_FAILURE);
   }
   const char * paramsfile = hc->getPrintParamsFilename();
   std::string paramsfileString = paramsfile;
   if (paramsfile[0]!='/') {
      const char * outputPath = hc->getOutputPath();
      paramsfileString.insert(0, "/");
      paramsfileString.insert(0, outputPath);
   }
   delete hc;

   arguments->setParamsFile(paramsfileString.c_str());
   if (rank==0) {
      printf("%s --testioparams running PetaVision with arguments\n", arguments->getProgramName());
      arguments->printState();
   }
   status = rebuildandrun(initObj, NULL, &assertAllZeroes, NULL, 0);
   return status;
}
Example #5
0
int testioparams(PV_Init* initObj, int rank) {
   initObj->resetState();
   // Ignore -r and -c switches
   initObj->setRestartFlag(false);
   initObj->setCheckpointReadDir(NULL);
   HyPerCol * hc = build(initObj, NULL, 0);
   if (hc == NULL) {
      pvError().printf("testioparams error: unable to build HyPerCol.\n");
   }
   int status = hc->run(); // Needed to generate pv.params file
   if (status != PV_SUCCESS) {
      pvError().printf("testioparams error: run to generate pv.params file failed.\n");
   }
   const char * paramsfile = hc->getPrintParamsFilename();
   std::string paramsfileString = paramsfile;
   if (paramsfile[0]!='/') {
      const char * outputPath = hc->getOutputPath();
      paramsfileString.insert(0, "/");
      paramsfileString.insert(0, outputPath);
   }
   delete hc;

   initObj->setParams(paramsfileString.c_str());
   if (rank==0) {
      pvInfo().printf("Running --testioparams with effective command line\n");
      initObj->printState();
   }
   status = rebuildandrun(initObj, NULL, &assertAllZeroes, NULL, 0);
   return status;
}
int main(int argc, char * argv[]) {
   int rank = 0;
   PV_Init initObj(&argc, &argv, false/*allowUnrecognizedArguments*/);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   char const * paramFile1 = "input/GenerateOutput.params";
   char const * paramFile2 = "input/TestOutput.params";
   char const * outputDir1 = "outputGenerate";
   char const * outputDir2 = "outputTest";
   int status = PV_SUCCESS;
   if (initObj.getParams()!=NULL) {
      if (rank==0) {
         pvErrorNoExit(errorMessage);
         errorMessage.printf("%s should be run without the params file argument.\n", initObj.getProgramName());
         errorMessage.printf("This test uses two hard-coded params files, %s and %s. The first generates an output pvp file, and the second checks whether the output is consistent with the input.\n",
               paramFile1, paramFile2);
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }

   if (rank==0) {
      char const * rmcommand = "rm -rf outputGenerate outputTest";
      status = system(rmcommand);
      if (status != 0) {
         pvError().printf("deleting old output directories failed: \"%s\" returned %d\n", rmcommand, status);
      }
   }

   initObj.registerKeyword("TestNotAlwaysAllZerosProbe", createTestNotAlwaysAllZerosProbe);
   initObj.registerKeyword("TestAllZerosProbe", createTestAllZerosProbe);

   initObj.setParams(paramFile1);
   status = rebuildandrun(&initObj);
   if( status != PV_SUCCESS ) {
      pvError().printf("%s: rank %d running with params file %s returned error %d.\n", initObj.getProgramName(), rank, paramFile1, status);
   }

   initObj.setParams(paramFile2);

   status = rebuildandrun(&initObj, NULL, &checkProbesOnExit);
   if( status != PV_SUCCESS ) {
      pvErrorNoExit().printf("%s: rank %d running with params file %s returned status %d.\n", initObj.getProgramName(), rank, paramFile2, status);
   }

   return status==PV_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;
}
Example #7
0
int main(int argc, char * argv[]) {
   PV_Init* initObj = new PV_Init(&argc, &argv, false/*allowUnrecognizedArguments*/);
   int rank = initObj->getWorldRank();

   char const * paramFile1 = "input/DtAdaptController_ANNNormalized.params";
   char const * paramFile2 = "input/DtAdaptController_dtAdaptController.params";
   char const * paramFileCompare = "input/DtAdaptController_Comparison.params";
   int status = PV_SUCCESS;
   if (pv_getopt_str(argc, argv, "-p", NULL, NULL)==0) {
      if (rank==0) {
         fprintf(stderr, "%s should be run without the params file argument, as it uses hard-coded params files.\n", argv[0]);
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }

   PV_Arguments * arguments = initObj->getArguments();

   arguments->setParamsFile(paramFile1);
   status = rebuildandrun(initObj, NULL, NULL, NULL, 0);
   if( status != PV_SUCCESS ) {
      fprintf(stderr, "%s: rank %d running with params file %s returned error %d.\n", arguments->getProgramName(), rank, paramFile1, status);
      exit(status);
   }

   arguments->setParamsFile(paramFile2);
   status = rebuildandrun(initObj, NULL, NULL, NULL, 0);
   if( status != PV_SUCCESS ) {
      fprintf(stderr, "%s: rank %d running with params file %s returned error %d.\n", arguments->getProgramName(), rank, paramFile2, status);
      exit(status);
   }

   arguments->setParamsFile(paramFileCompare);
   status = rebuildandrun(initObj, NULL, &assertAllZeroes, NULL, 0);
   if( status != PV_SUCCESS ) {
      fprintf(stderr, "%s: rank %d running with params file %s returned error %d.\n", arguments->getProgramName(), rank, paramFileCompare, status);
      exit(status);
   }
   
   delete initObj;
   
   return status==PV_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;
}
Example #8
0
int testrun(PV_Init * initObj, int rank) {
   initObj->resetState();
   // Ignore restart flag and checkpoint directory
   initObj->setRestartFlag(false);
   initObj->setCheckpointReadDir(NULL);
   if (rank==0) {
      pvInfo().printf("Running --testrun with effective command line\n", initObj->getProgramName());
      initObj->printState();
   }
   int status = rebuildandrun(initObj, NULL, &assertAllZeroes, NULL, 0);
   return status;
}
Example #9
0
int testrun(PV_Init * initObj, int rank) {
   PV_Arguments * arguments = initObj->getArguments();
   arguments->resetState();
   // Ignore restart flag and checkpoint directory
   arguments->setRestartFlag(false);
   arguments->setCheckpointReadDir(NULL);
   if (rank==0) {
      printf("%s --testrun running PetaVision with arguments\n", arguments->getProgramName());
      arguments->printState();
   }
   int status = rebuildandrun(initObj, NULL, &assertAllZeroes, NULL, 0);
   return status;
}
int main(int argc, char * argv[]) {
   int status;
   PV_Init initObj(&argc, &argv, false/*allowUnrecognizedArguments*/);
   if (initObj.getParams()==NULL) {
      initObj.setParams("input/KernelActivationTest-fullData.params");
      status = buildandrun(&initObj);
      if (status==PV_SUCCESS) {
         initObj.setParams("input/KernelActivationTest-maskData.params");
         status = rebuildandrun(&initObj);
      }
   }
   else {
      status = buildandrun(&initObj);
   }
   return status;
}
Example #11
0
int testcheckpoint(PV_Init * initObj, int rank) {
   initObj->resetState();
   // Make sure either restartFlag or checkpointReadDir are set (both cannot be set or PV_Arguments will error out).
   bool hasrestart = (initObj->getRestartFlag() || initObj->getCheckpointReadDir()!=NULL);
   if (!hasrestart) {
      if (rank==0) {
         pvErrorNoExit().printf("%s: --testcheckpoint requires either the -r or the -c option.\n", initObj->getProgramName());
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }
   if (rank==0) {
      pvInfo().printf("Running --testcheckpoint with effective command line\n", initObj->getProgramName());
      initObj->printState();
   }
   int status = rebuildandrun(initObj, NULL, &assertAllZeroes, NULL, 0);
   return status;
}
Example #12
0
int testcheckpoint(PV_Init * initObj, int rank) {
   PV_Arguments * arguments = initObj->getArguments();
   arguments->resetState();
   // Make sure either restartFlag or checkpointReadDir are set (both cannot be set or PV_Arguments will error out).
   bool hasrestart = (arguments->getRestartFlag() || arguments->getCheckpointReadDir()!=NULL);
   if (!hasrestart) {
      if (rank==0) {
         fprintf(stderr, "%s error: --testcheckpoint requires either the -r or the -c option.\n", arguments->getProgramName());
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }
   if (rank==0) {
      printf("%s --testcheckpoint running PetaVision with arguments\n", arguments->getProgramName());
      arguments->printState();
   }
   int status = rebuildandrun(initObj, NULL, &assertAllZeroes, NULL, 0);
   return status;
}
Example #13
0
int generate(PV_Init* initObj, int rank) {
   // Remove -r and -c
   initObj->setRestartFlag(false);
   initObj->setCheckpointReadDir(NULL);
   if (rank==0) {
      pvInfo().printf("Running --generate with effective command line\n", initObj->getProgramName());
      initObj->printState();
   }
   if (rank==0) {
      PV_Stream * emptyinfile = PV_fopen("input/correct.pvp", "w", false/*verifyWrites*/);
      // Data for a CORRECT_PVP_NX-by-CORRECT_PVP_NY layer with CORRECT_PVP_NF features.
      // Sparse activity with no active neurons so file size doesn't change with number of features
      int emptydata[] = {80, 20, 2, CORRECT_PVP_NX, CORRECT_PVP_NY, CORRECT_PVP_NF, 1, 0, 4, 2, 1, 1, CORRECT_PVP_NX, CORRECT_PVP_NY, 0, 0, 0, 1, 0, 0, 0, 0, 0};
      size_t numwritten = PV_fwrite(emptydata, 23, sizeof(int), emptyinfile);
      if (numwritten != 23) {
         pvErrorNoExit().printf("%s failure to write placeholder data into input/correct.pvp file.\n", initObj->getProgramName());
      }
      PV_fclose(emptyinfile);
   }
   int status = rebuildandrun(initObj, NULL, &copyCorrectOutput, NULL, 0);
   return status;
}
Example #14
0
int generate(PV_Init* initObj, int rank) {
   PV_Arguments * arguments = initObj->getArguments();

   // Remove -r and -c
   arguments->setRestartFlag(false);
   arguments->setCheckpointReadDir(NULL);
   if (rank==0) {
      printf("%s --generate running PetaVision with arguments\n", arguments->getProgramName());
      arguments->printState();
   }
   if (rank==0) {
      PV_Stream * emptyinfile = PV_fopen("input/correct.pvp", "w", false/*verifyWrites*/);
      // Data for a CORRECT_PVP_NX-by-CORRECT_PVP_NY layer with CORRECT_PVP_NF features.
      // Sparse activity with no active neurons so file size doesn't change with number of features
      int emptydata[] = {80, 20, 2, CORRECT_PVP_NX, CORRECT_PVP_NY, CORRECT_PVP_NF, 1, 0, 4, 2, 1, 1, CORRECT_PVP_NX, CORRECT_PVP_NY, 0, 0, 0, 1, 0, 0, 0, 0, 0};
      size_t numwritten = PV_fwrite(emptydata, 23, sizeof(int), emptyinfile);
      if (numwritten != 23) {
         fprintf(stderr, "%s error writing placeholder data into input/correct.pvp file.\n", arguments->getProgramName());
      }
      PV_fclose(emptyinfile);
   }
   int status = rebuildandrun(initObj, NULL, &copyCorrectOutput, NULL, 0);
   return status;
}
Example #15
0
int main(int argc, char * argv[]) {
   int rank = 0;
   PV_Init * initObj = new PV_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   char const * paramFile1 = "input/CheckpointParameters1.params";
   char const * paramFile2 = "input/CheckpointParameters2.params";
   int status = PV_SUCCESS;
   if (pv_getopt_str(argc, argv, "-p", NULL, NULL)==0) {
      if (rank==0) {
         fprintf(stderr, "%s should be run without the params file argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (pv_getopt_str(argc, argv, "-c", NULL, NULL)==0) {
      if (rank==0) {
         fprintf(stderr, "%s should be run without the checkpoint directory argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (pv_getopt(argc, argv, "-r", NULL)==0) {
      if (rank==0) {
         fprintf(stderr, "%s should be run without the checkpoint directory argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (status != PV_SUCCESS) {
      if (rank==0) {
         fprintf(stderr, "This test uses two hard-coded params files, %s and %s. The second run is started from a checkpoint from the first run, and the results of the two runs are compared.\n",
               paramFile1, paramFile2);
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }

   if (rank==0) {
      char const * rmcommand = "rm -rf checkpoints1 checkpoints2 output";
      status = system(rmcommand);
      if (status != 0) {
         fprintf(stderr, "deleting old checkpoints and output directories failed: \"%s\" returned %d\n", rmcommand, status);
         exit(EXIT_FAILURE);
      }
   }

   ParamGroupHandler * customGroupHandler = new CustomGroupHandler;

   int pv_argc1 = 4 + argc; // command line arguments, plus "-p" plus paramFile1, plus -batchwidth and number
   int pv_argc2 = 6 + argc; // pv_argc1 arguments with paramFile2 in place of paramFile1, plus "-c", plus checkpoint directory, plus -batchwidth and number
   assert(pv_argc1 < pv_argc2); // so we can allocate based on pv_argc2 and be sure it will hold pv_argc1 arguments.
   char ** pv_argv = (char **) calloc((pv_argc2+1), sizeof(char *));
   assert(pv_argv!=NULL);
   int pv_arg=0;
   for (pv_arg = 0; pv_arg < argc; pv_arg++) {
      pv_argv[pv_arg] = strdup(argv[pv_arg]);
      assert(pv_argv[pv_arg]);
   }
   assert(pv_arg==argc);
   pv_argv[pv_arg++] = strdup("-p");
   pv_argv[pv_arg++] = strdup(paramFile1);
   pv_argv[pv_arg++] = strdup("-batchwidth");
   pv_argv[pv_arg++] = strdup("2");
   assert(pv_arg==pv_argc1 && pv_arg==argc+4);
   assert(pv_argv[argc]!=NULL && pv_argv[argc+1]!=NULL && pv_argv[argc+2]!=NULL && pv_argv[argc+3]!=NULL && pv_argv[argc+4]==NULL);

   status = rebuildandrun((int) pv_argc1, pv_argv, initObj, NULL, NULL, &customGroupHandler, 1);
   if( status != PV_SUCCESS ) {
      fprintf(stderr, "%s: rank %d running with params file %s returned error %d.\n", pv_argv[0], rank, paramFile1, status);
      exit(status);
   }

   free(pv_argv[argc+1]);
   pv_argv[argc+1] = strdup(paramFile2);
   assert(pv_argv[argc+1]);
   assert(pv_arg==argc+4);
   pv_argv[pv_arg++] = strdup("-c");
   pv_argv[pv_arg++] = strdup("checkpoints1/batchsweep_00/Checkpoint12:checkpoints1/batchsweep_01/Checkpoint12");

   assert(pv_arg==pv_argc2 && pv_arg==argc+6);
   assert(pv_argv[argc+4]!=NULL && pv_argv[argc+5]!=NULL && pv_argv[argc+6]==NULL);

   status = rebuildandrun(pv_argc2, pv_argv, initObj, NULL, &customexit, &customGroupHandler, 1);
   if( status != PV_SUCCESS ) {
      fprintf(stderr, "%s: rank %d running with params file %s returned error %d.\n", pv_argv[0], rank, paramFile2, status);
   }

   delete customGroupHandler;

   for (size_t arg=0; arg<pv_argc2; arg++) {
       free(pv_argv[arg]);
   }
   free(pv_argv);

   delete initObj;
   return status==PV_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;
}
int runKernelActivationTest(PV_Init* initObj) {
   int status = rebuildandrun(initObj, NULL, &dumpweights);
   return status;
}
Example #17
0
int main(int argc, char * argv[]) {
   int rank = 0;
   PV_Init * initObj = new PV_Init(&argc, &argv, false/*allowUnrecognizedArguments*/);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   char const * paramFile1 = "input/CheckpointParameters1.params";
   char const * paramFile2 = "input/CheckpointParameters2.params";
   int status = PV_SUCCESS;
   PV_Arguments * arguments = initObj->getArguments();
   if (arguments->getParamsFile()!=NULL) {
      if (rank==0) {
         fprintf(stderr, "%s should be run without the params file argument.\n", arguments->getProgramName());
      }
      status = PV_FAILURE;
   }
   if (arguments->getCheckpointReadDir()!=NULL) {
      if (rank==0) {
         fprintf(stderr, "%s should be run without the checkpoint directory argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (arguments->getRestartFlag()) {
      if (rank==0) {
         fprintf(stderr, "%s should be run without the restart flag.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (status != PV_SUCCESS) {
      if (rank==0) {
         fprintf(stderr, "This test uses two hard-coded params files, %s and %s. The second run is started from a checkpoint from the first run, and the results of the two runs are compared.\n",
               paramFile1, paramFile2);
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }

   if (rank==0) {
      char const * rmcommand = "rm -rf checkpoints1 checkpoints2 output";
      status = system(rmcommand);
      if (status != 0) {
         fprintf(stderr, "deleting old checkpoints and output directories failed: \"%s\" returned %d\n", rmcommand, status);
         exit(EXIT_FAILURE);
      }
   }

   ParamGroupHandler * customGroupHandler = new CustomGroupHandler;

   arguments->setParamsFile(paramFile1);
   arguments->setBatchWidth(2);

   status = rebuildandrun(initObj, NULL, NULL, &customGroupHandler, 1);
   if( status != PV_SUCCESS ) {
      fprintf(stderr, "%s: rank %d running with params file %s returned error %d.\n", arguments->getProgramName(), rank, paramFile1, status);
      exit(status);
   }

   arguments->setParamsFile(paramFile2);
   arguments->setCheckpointReadDir("checkpoints1/batchsweep_00/Checkpoint12:checkpoints1/batchsweep_01/Checkpoint12");

   status = rebuildandrun(initObj, NULL, &customexit, &customGroupHandler, 1);
   if( status != PV_SUCCESS ) {
      fprintf(stderr, "%s: rank %d running with params file %s returned error %d.\n", arguments->getProgramName(), rank, paramFile2, status);
   }

   delete customGroupHandler;

   delete initObj;
   return status==PV_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;
}
Example #18
0
int main(int argc, char * argv[]) {
   int rank = 0;
   PV_Init initObj(&argc, &argv, false/*do not allow unrecognized arguments*/);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   char const * paramFile1 = "input/CheckpointParameters1.params";
   char const * paramFile2 = "input/CheckpointParameters2.params";
   int status = PV_SUCCESS;
   if (initObj.getParamsFile()!=NULL) {
      if (rank==0) {
         pvErrorNoExit().printf("%s should be run without the params file argument.\n", initObj.getProgramName());
      }
      status = PV_FAILURE;
   }
   if (initObj.getCheckpointReadDir()!=NULL) {
      if (rank==0) {
         pvErrorNoExit().printf("%s should be run without the checkpoint directory argument.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (initObj.getRestartFlag()) {
      if (rank==0) {
         pvErrorNoExit().printf("%s should be run without the restart flag.\n", argv[0]);
      }
      status = PV_FAILURE;
   }
   if (status != PV_SUCCESS) {
      if (rank==0) {
         pvErrorNoExit().printf("This test uses two hard-coded params files, %s and %s. The second run is started from a checkpoint from the first run, and the results of the two runs are compared.\n",
               paramFile1, paramFile2);
      }
      MPI_Barrier(MPI_COMM_WORLD);
      exit(EXIT_FAILURE);
   }

   if (rank==0) {
      char const * rmcommand = "rm -rf checkpoints1 checkpoints2 output";
      status = system(rmcommand);
      if (status != 0) {
         pvError().printf("deleting old checkpoints and output directories failed: \"%s\" returned %d\n", rmcommand, status);
      }
   }

   initObj.registerKeyword("CPTestInputLayer", createCPTestInputLayer);
   initObj.registerKeyword("VaryingHyPerConn", createVaryingHyPerConn);
 
   initObj.setMPIConfiguration(0/*numRows unspecified*/, 0/*numColumns unspecified*/, 2/*batchWidth*/);
   initObj.setParams(paramFile1);

   status = rebuildandrun(&initObj);
   if( status != PV_SUCCESS ) {
      pvError().printf("%s: rank %d running with params file %s returned error %d.\n", initObj.getProgramName(), rank, paramFile1, status);
   }

   initObj.setParams(paramFile2);
   initObj.setCheckpointReadDir("checkpoints1/batchsweep_00/Checkpoint12:checkpoints1/batchsweep_01/Checkpoint12");

   status = rebuildandrun(&initObj);
   if( status != PV_SUCCESS ) {
      pvError().printf("%s: rank %d running with params file %s returned error %d.\n", initObj.getProgramName(), rank, paramFile2, status);
   }

   return status==PV_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;
}