Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit 680749a

Browse files
jorblancoapramodk
authored andcommitted
Add buffer size configuration for reportinglib (#132)
- Add buffer size configuration for reportinglib - Read buffer size from report.conf file - Add command line option for the report buffer size (4MB as default)
1 parent c7d2876 commit 680749a

File tree

6 files changed

+35
-30
lines changed

6 files changed

+35
-30
lines changed

coreneuron/nrniv/main1.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -408,16 +408,17 @@ extern "C" int solve_core(int argc, char** argv) {
408408

409409
// register all reports into reportinglib
410410
double min_report_dt = INT_MAX;
411-
int num_report_mindelay = nrnopt_get_int("--num-report-mindelay");
412-
413-
set_num_mindelay_to_buffer(num_report_mindelay);
414-
411+
int report_buffer_size = nrnopt_get_int("--report-buffer-size");
415412
for (size_t i = 0; i < configs.size(); i++) {
416413
register_report(dt, tstop, delay, configs[i]);
417414
if (configs[i].report_dt < min_report_dt) {
418415
min_report_dt = configs[i].report_dt;
419416
}
420417
}
418+
// Set the buffer size if is not the default value. Otherwise use report.conf on register_report
419+
if (!nrnopt_is_default_value("--report-buffer-size")) {
420+
set_report_buffer_size(report_buffer_size);
421+
}
421422
setup_report_engine(min_report_dt, delay);
422423
configs.clear();
423424

coreneuron/nrniv/nrnoptarg.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ static param_int param_int_args[] = {
7171
{"--extracon -x", 0, 0, 10000000,
7272
"Number of extra random connections in each thread to other duplicate models (int)."},
7373
{"--seed -s", -1, 0, 100000000, "Initialization seed for random number generator (int)."},
74-
{"--num-report-mindelay", 100, 1, 10000, "Number of min delay intervals to be buffered during reporting (int)."},
74+
{"--report-buffer-size", 4, 1, 8, "Size in MB of the report buffer (int)."},
7575
{NULL, 0, 0, 0, NULL}};
7676

7777
static param_dbl param_dbl_args[] = {
@@ -311,6 +311,10 @@ void nrnopt_modify_dbl(const char* name, double val) {
311311
args.insert(args.begin(), v);
312312
}
313313

314+
bool nrnopt_is_default_value(const char* name) {
315+
return !opt->isSet(name);
316+
}
317+
314318
// more compact display of parameters.
315319
// ie only first name and first value (or default or isSet).
316320
void nrnopt_show() {

coreneuron/nrniv/nrnoptarg.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,7 @@ int nrnopt_get_int(const char* name);
5757
double nrnopt_get_dbl(const char* name);
5858
std::string nrnopt_get_str(const char* name);
5959
void nrnopt_modify_dbl(const char* name, double value);
60+
61+
bool nrnopt_is_default_value(const char* name);
6062
} // namespace coreneuron
6163
#endif

coreneuron/utils/reports/nrnreport.cpp

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,8 @@ void register_soma_report(NrnThread& nt,
241241
config.report_dt, sizemapping, (char*)config.type_str, extramapping,
242242
(char*)config.unit);
243243

244-
/** add extra mapping */
244+
records_set_report_max_buffer_size_hint ((char*)config.output_path, config.buffer_size);
245+
/** add extra mapping */
245246
records_extra_mapping(config.output_path, gid, 5, extra);
246247
for (int var_idx = 0; var_idx < vars.size(); ++var_idx) {
247248
/** 1st key is section-id and 1st value is segment of soma */
@@ -276,7 +277,9 @@ void register_compartment_report(NrnThread& nt,
276277
records_add_report((char*)config.output_path, gid, gid, gid, config.start, config.stop,
277278
config.report_dt, sizemapping, (char*)config.type_str, extramapping,
278279
(char*)config.unit);
279-
/** add extra mapping */
280+
281+
records_set_report_max_buffer_size_hint ((char*)config.output_path, config.buffer_size);
282+
/** add extra mapping */
280283
records_extra_mapping(config.output_path, gid, 5, extra);
281284
for (int var_idx = 0; var_idx < vars.size(); ++var_idx) {
282285
mapping[0] = vars[var_idx].id;
@@ -312,7 +315,9 @@ void register_custom_report(NrnThread& nt,
312315
records_add_report((char*)config.output_path, gid, gid, gid, config.start, config.stop,
313316
config.report_dt, sizemapping, (char*)config.type_str, extramapping,
314317
(char*)config.unit);
315-
/** add extra mapping : @todo api changes in reportinglib*/
318+
319+
records_set_report_max_buffer_size_hint ((char*)config.output_path, config.buffer_size);
320+
/** add extra mapping : @todo api changes in reportinglib*/
316321
records_extra_mapping((char*)config.output_path, gid, 5, extra);
317322
for (int var_idx = 0; var_idx < vars.size(); ++var_idx) {
318323
mapping[0] = vars[var_idx].id;
@@ -350,20 +355,13 @@ std::vector<int> map_gids(NrnThread& nt) {
350355
}
351356
#endif // ENABLE_REPORTING
352357

353-
// number of min-delay intervals to buffer
354-
static int num_min_delay_to_buffer = 100;
355-
356-
/// number of min-delays completed since last flush
357-
static int num_min_delays_completed = 0;
358+
// Size in MB of the report buffer
359+
static int size_report_buffer = 4;
358360

359361
void nrn_flush_reports(double t) {
360362
#ifdef ENABLE_REPORTING
361363
// flush before buffer is full
362-
if (num_min_delays_completed >= (num_min_delay_to_buffer - 2)) {
363-
records_flush(t);
364-
num_min_delays_completed = 0;
365-
}
366-
num_min_delays_completed++;
364+
records_end_iteration(t);
367365
#endif
368366
}
369367

@@ -376,20 +374,18 @@ void nrn_flush_reports(double t) {
376374
*/
377375
void setup_report_engine(double dt_report, double mindelay) {
378376
#ifdef ENABLE_REPORTING
379-
int timesteps_to_buffer = mindelay / dt_report + 2;
380-
timesteps_to_buffer *= num_min_delay_to_buffer;
381-
382-
records_set_steps_to_buffer(timesteps_to_buffer);
383377
/** reportinglib setup */
384378
records_setup_communicator();
385379
records_finish_and_share();
386380
#endif // ENABLE_REPORTING
387381
}
388382

389-
// number of min delay intervals that will be buffered with reports
390-
// @todo : this will be replaced by buffer size in MB
391-
void set_num_mindelay_to_buffer(int n) {
392-
num_min_delay_to_buffer = n;
383+
// Size in MB of the report buffers
384+
void set_report_buffer_size(int n) {
385+
size_report_buffer = n;
386+
#ifdef ENABLE_REPORTING
387+
records_set_max_buffer_size_hint(size_report_buffer);
388+
#endif
393389
}
394390

395391
// TODO: we can have one ReportEvent per register_report_call generated by MPI rank

coreneuron/utils/reports/nrnreport.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ struct ReportConfiguration {
6868
double start; // start time of report
6969
double stop; // stop time of report
7070
int num_gids; // total number of gids
71+
size_t buffer_size; // hint on buffer size used for this report
7172
std::set<int> target; // list of gids for this report
7273
};
7374

@@ -78,7 +79,7 @@ std::vector<ReportConfiguration> create_report_configurations(const char* filena
7879
void setup_report_engine(double dt_report, double mindelay);
7980
void finalize_report();
8081
void nrn_flush_reports(double t);
81-
void set_num_mindelay_to_buffer(int n);
82+
void set_report_buffer_size(int n);
8283

8384
} // namespace coreneuron
8485
#endif //_H_NRN_REPORT_

coreneuron/utils/reports/report_configuration_parser.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,11 @@ std::vector<ReportConfiguration> create_report_configurations(const char* conf_f
7979
ReportConfiguration& report = reports[reports.size() - 1];
8080
// mechansim id registered in coreneuron
8181
report.mech_id = -1;
82+
report.buffer_size = 4; //default size to 4 Mb
8283
fgets(raw_line, MAX_FILEPATH_LEN, fp);
83-
sscanf(raw_line, "\n%s %s %s %s %s %s %d %lf %lf %lf %d\n", report.name, report.target_name,
84-
report.type_str, report_on, report.unit, report.format, &is_soma, &report.report_dt,
85-
&report.start, &report.stop, &report.num_gids);
84+
sscanf(raw_line, "\n%s %s %s %s %s %s %d %lf %lf %lf %d %d\n", report.name, report.target_name,
85+
report.type_str, report_on, report.unit, report.format, &is_soma, &report.report_dt,
86+
&report.start, &report.stop, &report.num_gids, &report.buffer_size);
8687
for (int i = 0; i < MAX_REPORT_NAME_LEN; i++) {
8788
report.type_str[i] = tolower(report.type_str[i]);
8889
}

0 commit comments

Comments
 (0)