From af39380919c6748b06509ed5d843684e81ff76a0 Mon Sep 17 00:00:00 2001 From: Alexandru Savulescu Date: Thu, 16 Jul 2020 16:18:12 +0200 Subject: [PATCH] Add --quiet option #338 --- coreneuron/apps/corenrn_parameters.cpp | 1 + coreneuron/apps/corenrn_parameters.hpp | 1 + coreneuron/apps/main1.cpp | 27 +++++++++++++++++++------- coreneuron/io/mk_mech.cpp | 7 +++++-- coreneuron/io/nrn_setup.cpp | 4 +++- coreneuron/utils/nrn_stats.cpp | 4 +++- 6 files changed, 33 insertions(+), 11 deletions(-) diff --git a/coreneuron/apps/corenrn_parameters.cpp b/coreneuron/apps/corenrn_parameters.cpp index 7e48a2197..77ae4321f 100644 --- a/coreneuron/apps/corenrn_parameters.cpp +++ b/coreneuron/apps/corenrn_parameters.cpp @@ -42,6 +42,7 @@ corenrn_parameters::corenrn_parameters(){ app.add_option("-e, --tstop", this->tstop, "Stop Time in ms.") ->check(CLI::Range(0., 1e9)); app.add_flag("--show"); + app.add_flag("--quiet", this->quiet, "Disable corenrn outputs (handy if launched from NEURON)"); auto sub_gpu = app.add_option_group("GPU", "Commands relative to GPU."); sub_gpu -> add_option("-W, --nwarp", this->nwarp, "Number of warps to balance.", true) diff --git a/coreneuron/apps/corenrn_parameters.hpp b/coreneuron/apps/corenrn_parameters.hpp index c1d5f83c7..60fda2701 100644 --- a/coreneuron/apps/corenrn_parameters.hpp +++ b/coreneuron/apps/corenrn_parameters.hpp @@ -77,6 +77,7 @@ struct corenrn_parameters { bool threading=false; /// Enable pthread/openmp bool gpu=false; /// Enable GPU computation. bool binqueue=false; /// Use bin queue. + bool quiet=false; /// Disable corenrn outputs (handy if launched from NEURON) double tstop=100; /// Stop time of simulation in msec double dt=-1000.0; /// Timestep to use in msec diff --git a/coreneuron/apps/main1.cpp b/coreneuron/apps/main1.cpp index c37405729..491a8a2f1 100644 --- a/coreneuron/apps/main1.cpp +++ b/coreneuron/apps/main1.cpp @@ -103,6 +103,7 @@ char* prepare_args(int& argc, char**& argv, int use_mpi, const char* arg) { if (use_mpi) { args.append(" --mpi "); } + args.append(" --quiet "); // we can't modify string with strtok, make copy char* first = strdup(args.c_str()); @@ -147,7 +148,9 @@ void nrn_init_and_load_data(int argc, Instrumentor::stop_profile(); // memory footprint after mpi initialisation - report_mem_usage("After MPI_Init"); + if (!corenrn_param.quiet) { + report_mem_usage("After MPI_Init"); + } // initialise default coreneuron parameters initnrn(); @@ -216,7 +219,9 @@ void nrn_init_and_load_data(int argc, nrn_set_extra_thread0_vdata(); } - report_mem_usage("Before nrn_setup"); + if (!corenrn_param.quiet) { + report_mem_usage("Before nrn_setup"); + } // set if need to interleave cells interleave_permute_type = corenrn_param.cell_interleave_permute; @@ -255,7 +260,9 @@ void nrn_init_and_load_data(int argc, int spkcompress = corenrn_param.spkcompress; nrnmpi_spike_compress(spkcompress, (spkcompress ? true : false), use_multisend_); - report_mem_usage("After nrn_setup "); + if (!corenrn_param.quiet) { + report_mem_usage("After nrn_setup "); + } // Invoke PatternStim if (!corenrn_param.patternstim.empty()) { @@ -266,7 +273,7 @@ void nrn_init_and_load_data(int argc, nrn_set_timeout(200.); // show all configuration parameters for current run - if (nrnmpi_myid == 0) { + if (nrnmpi_myid == 0 && !corenrn_param.quiet) { std::cout << corenrn_param << std::endl; std::cout << " Start time (t) = " << t << std::endl << std::endl; } @@ -274,7 +281,9 @@ void nrn_init_and_load_data(int argc, // allocate buffer for mpi communication mk_spikevec_buffer(corenrn_param.spikebuf); - report_mem_usage("After mk_spikevec_buffer"); + if (!corenrn_param.quiet) { + report_mem_usage("After mk_spikevec_buffer"); + } if (corenrn_param.gpu) { setup_nrnthreads_on_device(nrn_threads, nrn_nthread); @@ -459,7 +468,9 @@ extern "C" int run_solve_core(int argc, char** argv) { std::vector > report_handlers; bool reports_needs_finalize = false; - report_mem_usage("After mk_mech"); + if (!corenrn_param.quiet) { + report_mem_usage("After mk_mech"); + } // Create outpath if it does not exist if (nrnmpi_myid == 0) { @@ -532,7 +543,9 @@ extern "C" int run_solve_core(int argc, char** argv) { nrn_finitialize(v != 1000., v); } - report_mem_usage("After nrn_finitialize"); + if (!corenrn_param.quiet) { + report_mem_usage("After nrn_finitialize"); + } // register all reports into reportinglib double min_report_dt = INT_MAX; diff --git a/coreneuron/io/mk_mech.cpp b/coreneuron/io/mk_mech.cpp index d4d3d3c9b..129c89647 100644 --- a/coreneuron/io/mk_mech.cpp +++ b/coreneuron/io/mk_mech.cpp @@ -32,6 +32,7 @@ THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include "coreneuron/apps/corenrn_parameters.hpp" #include "coreneuron/nrnconf.h" #include "coreneuron/sim/multicore.hpp" #include "coreneuron/membrane_definitions.h" @@ -43,11 +44,13 @@ THE POSSIBILITY OF SUCH DAMAGE. #include "coreneuron/coreneuron.hpp" #include "coreneuron/mechanism//eion.hpp" -static char banner[] = "Duke, Yale, and the BlueBrain Project -- Copyright 1984-2019"; +static char banner[] = "Duke, Yale, and the BlueBrain Project -- Copyright 1984-2020"; namespace coreneuron { int nrn_nobanner_; +extern corenrn_parameters corenrn_param; + // NB: this should go away extern const char* nrn_version(int); @@ -177,7 +180,7 @@ static void mk_mech(std::istream& s) { // printf("%s %d %d\n", mname, nrn_get_mechtype(mname), type); } - if (nrnmpi_myid < 1 && nrn_nobanner_ == 0) { + if (nrnmpi_myid < 1 && nrn_nobanner_ == 0 && !corenrn_param.quiet) { fprintf(stderr, " \n"); fprintf(stderr, " %s\n", banner); fprintf(stderr, " %s\n", nrn_version(1)); diff --git a/coreneuron/io/nrn_setup.cpp b/coreneuron/io/nrn_setup.cpp index 8761b2334..093ef2499 100644 --- a/coreneuron/io/nrn_setup.cpp +++ b/coreneuron/io/nrn_setup.cpp @@ -31,6 +31,7 @@ THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include "coreneuron/apps/corenrn_parameters.hpp" #include "coreneuron/nrnconf.h" #include "coreneuron/utils/randoms/nrnran123.h" #include "coreneuron/sim/multicore.hpp" @@ -215,6 +216,7 @@ void (*nrn2core_trajectory_return_)(int tid, int n_pr, int vecsz, void** vpr, do // files with the first containing output_gids and netcon_srcgid which are // stored in the nt.presyns array and nt.netcons array respectively namespace coreneuron { +extern corenrn_parameters corenrn_param; int nrn_setup_multiple = 1; /* default */ int nrn_setup_extracon = 0; /* default */ static int maxgid; @@ -803,7 +805,7 @@ void nrn_setup(const char* filesdat, delete[] gidgroups; delete[] imult; - if (nrnmpi_myid == 0) { + if (nrnmpi_myid == 0 && !corenrn_param.quiet) { printf(" Setup Done : %.2lf seconds \n", nrn_wtime() - time); } } diff --git a/coreneuron/utils/nrn_stats.cpp b/coreneuron/utils/nrn_stats.cpp index 387494f7a..1114fd2bd 100644 --- a/coreneuron/utils/nrn_stats.cpp +++ b/coreneuron/utils/nrn_stats.cpp @@ -36,6 +36,7 @@ THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include "coreneuron/apps/corenrn_parameters.hpp" #include "coreneuron/utils/nrn_stats.h" #include "coreneuron/mpi/nrnmpi.h" #include "coreneuron/sim/multicore.hpp" @@ -44,6 +45,7 @@ THE POSSIBILITY OF SUCH DAMAGE. #include "coreneuron/io/output_spikes.hpp" namespace coreneuron { extern NetCvode* net_cvode_instance; +extern corenrn_parameters corenrn_param; const int NUM_STATS = 12; #if COLLECT_TQueue_STATISTICS @@ -155,7 +157,7 @@ void report_cell_stats(void) { memcpy(gstat_array, stat_array, sizeof(stat_array)); #endif - if (nrnmpi_myid == 0) { + if (nrnmpi_myid == 0 && !corenrn_param.quiet) { printf("\n\n Simulation Statistics\n"); printf(" Number of cells: %ld\n", gstat_array[0]); printf(" Number of compartments: %ld\n", gstat_array[10]);