@@ -241,7 +241,8 @@ void register_soma_report(NrnThread& nt,
241
241
config.report_dt , sizemapping, (char *)config.type_str , extramapping,
242
242
(char *)config.unit );
243
243
244
- /* * add extra mapping */
244
+ records_set_report_max_buffer_size_hint ((char *)config.output_path , config.buffer_size );
245
+ /* * add extra mapping */
245
246
records_extra_mapping (config.output_path , gid, 5 , extra);
246
247
for (int var_idx = 0 ; var_idx < vars.size (); ++var_idx) {
247
248
/* * 1st key is section-id and 1st value is segment of soma */
@@ -276,7 +277,9 @@ void register_compartment_report(NrnThread& nt,
276
277
records_add_report ((char *)config.output_path , gid, gid, gid, config.start , config.stop ,
277
278
config.report_dt , sizemapping, (char *)config.type_str , extramapping,
278
279
(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 */
280
283
records_extra_mapping (config.output_path , gid, 5 , extra);
281
284
for (int var_idx = 0 ; var_idx < vars.size (); ++var_idx) {
282
285
mapping[0 ] = vars[var_idx].id ;
@@ -312,7 +315,9 @@ void register_custom_report(NrnThread& nt,
312
315
records_add_report ((char *)config.output_path , gid, gid, gid, config.start , config.stop ,
313
316
config.report_dt , sizemapping, (char *)config.type_str , extramapping,
314
317
(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*/
316
321
records_extra_mapping ((char *)config.output_path , gid, 5 , extra);
317
322
for (int var_idx = 0 ; var_idx < vars.size (); ++var_idx) {
318
323
mapping[0 ] = vars[var_idx].id ;
@@ -350,20 +355,13 @@ std::vector<int> map_gids(NrnThread& nt) {
350
355
}
351
356
#endif // ENABLE_REPORTING
352
357
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 ;
358
360
359
361
void nrn_flush_reports (double t) {
360
362
#ifdef ENABLE_REPORTING
361
363
// 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);
367
365
#endif
368
366
}
369
367
@@ -376,20 +374,18 @@ void nrn_flush_reports(double t) {
376
374
*/
377
375
void setup_report_engine (double dt_report, double mindelay) {
378
376
#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);
383
377
/* * reportinglib setup */
384
378
records_setup_communicator ();
385
379
records_finish_and_share ();
386
380
#endif // ENABLE_REPORTING
387
381
}
388
382
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
393
389
}
394
390
395
391
// TODO: we can have one ReportEvent per register_report_call generated by MPI rank
0 commit comments