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; }
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 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, ©CorrectOutput, NULL, 0); return status; }
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; }