@@ -270,12 +270,13 @@ struct EventItem {
270
270
double min_time;
271
271
double max_time;
272
272
double ave_time;
273
+ float ratio;
273
274
};
274
275
275
276
// Print results
276
277
void PrintProfiler (const std::vector<std::vector<EventItem>>& events_table,
277
278
const std::string& sorted_domain, const size_t name_width,
278
- const size_t data_width) {
279
+ const size_t data_width, double total ) {
279
280
// Output header information
280
281
std::cout << " \n ------------------------->"
281
282
<< " Profiling Report "
@@ -300,7 +301,8 @@ void PrintProfiler(const std::vector<std::vector<EventItem>>& events_table,
300
301
std::cout << std::setw (name_width) << " Event" << std::setw (data_width)
301
302
<< " Calls" << std::setw (data_width) << " Total"
302
303
<< std::setw (data_width) << " Min." << std::setw (data_width)
303
- << " Max." << std::setw (data_width) << " Ave." << std::endl;
304
+ << " Max." << std::setw (data_width) << " Ave."
305
+ << std::setw (data_width) << " Ratio." << std::endl;
304
306
for (size_t i = 0 ; i < events_table.size (); ++i) {
305
307
for (size_t j = 0 ; j < events_table[i].size (); ++j) {
306
308
const EventItem& event_item = events_table[i][j];
@@ -309,7 +311,9 @@ void PrintProfiler(const std::vector<std::vector<EventItem>>& events_table,
309
311
<< std::setw (data_width) << event_item.total_time
310
312
<< std::setw (data_width) << event_item.min_time
311
313
<< std::setw (data_width) << event_item.max_time
312
- << std::setw (data_width) << event_item.ave_time << std::endl;
314
+ << std::setw (data_width) << event_item.ave_time
315
+ << std::setw (data_width) << event_item.total_time / total
316
+ << std::endl;
313
317
}
314
318
}
315
319
std::cout << std::endl;
@@ -359,6 +363,7 @@ void ParseEvents(const std::vector<std::vector<Event>>& events,
359
363
360
364
std::vector<std::vector<EventItem>> events_table;
361
365
size_t max_name_width = 0 ;
366
+ double total = 0 .; // the total time
362
367
for (size_t i = 0 ; i < events.size (); i++) {
363
368
std::list<Event> pushed_events;
364
369
std::vector<EventItem> event_items;
@@ -379,6 +384,7 @@ void ParseEvents(const std::vector<std::vector<Event>>& events,
379
384
g_state == ProfilerState::kAll )
380
385
? rit->CudaElapsedMs (events[i][j])
381
386
: rit->CpuElapsedMs (events[i][j]);
387
+ total += event_time;
382
388
383
389
std::string event_name =
384
390
" thread" + std::to_string (rit->thread_id ()) + " ::" + rit->name ();
@@ -387,7 +393,8 @@ void ParseEvents(const std::vector<std::vector<Event>>& events,
387
393
if (event_idx.find (event_name) == event_idx.end ()) {
388
394
event_idx[event_name] = event_items.size ();
389
395
EventItem event_item = {event_name, 1 , event_time,
390
- event_time, event_time, event_time};
396
+ event_time, event_time, event_time,
397
+ 0 .};
391
398
event_items.push_back (event_item);
392
399
} else {
393
400
int index = event_idx[event_name];
@@ -431,7 +438,7 @@ void ParseEvents(const std::vector<std::vector<Event>>& events,
431
438
}
432
439
433
440
// Print report
434
- PrintProfiler (events_table, sorted_domain, max_name_width + 4 , 12 );
441
+ PrintProfiler (events_table, sorted_domain, max_name_width + 4 , 12 , total );
435
442
}
436
443
437
444
void DisableProfiler (EventSortingKey sorted_key,
0 commit comments