double averageWorstPercentileMsecs(double p) { tick_t acc = 0; int numSamples = (int)(totalRuns*p); for(int i = 0; i < numSamples; ++i) acc += allTicks[totalRuns-1-i]; return acc * 1000.0 / numSamples / ticks_per_sec(); }
void __attribute__((noinline)) main_loop() { tick_t t0 = tick(); for(int i = 0; i < 500000; ++i) { #if BENCHMARK_FUNCTION_POINTER counter += pointerToFunction(i, i+1, i+2); #else counter += foreignFunctionThatTakesThreeParameters(i, i+1, i+2); #endif } tick_t t1 = tick(); allTicks[numRunsDone] = t1 - t0; ++numRunsDone; accumulatedTicks += t1 - t0; printf("Run %d: %f msecs.\n", numRunsDone, (t1 - t0) * 1000.0 / ticks_per_sec()); if (numRunsDone >= totalRuns) { double accumulatedTimeMsecs = accumulatedTicks * 1000.0 / ticks_per_sec(); std::sort(allTicks, allTicks + totalRuns); printf("Total: %d runs, avg. %f msecs per run. Counter: %d.\n", totalRuns, accumulatedTimeMsecs / totalRuns, counter); printf("Best run: %f msecs.\n", allTicks[0] * 1000.0 / ticks_per_sec()); printf("1%% Best percentile: %f msecs. 1%% Worst percentile: %f msecs.\n", averageBestPercentileMsecs(0.01), averageWorstPercentileMsecs(0.01)); printf("5%% Best percentile: %f msecs. 5%% Worst percentile: %f msecs.\n", averageBestPercentileMsecs(0.05), averageWorstPercentileMsecs(0.05)); printf("10%% Best percentile: %f msecs. 10%% Worst percentile: %f msecs.\n", averageBestPercentileMsecs(0.10), averageWorstPercentileMsecs(0.10)); printf("25%% Best percentile: %f msecs. 25%% Worst percentile: %f msecs.\n", averageBestPercentileMsecs(0.25), averageWorstPercentileMsecs(0.25)); printf("50%% Best percentile: %f msecs. 50%% Worst percentile: %f msecs.\n", averageBestPercentileMsecs(0.50), averageWorstPercentileMsecs(0.50)); printf("75%% Best percentile: %f msecs. 75%% Worst percentile: %f msecs.\n", averageBestPercentileMsecs(0.75), averageWorstPercentileMsecs(0.75)); printf("95%% Best percentile: %f msecs. 95%% Worst percentile: %f msecs.\n", averageBestPercentileMsecs(0.95), averageWorstPercentileMsecs(0.95)); printf("100%% Best/Worst percentile (==average over all samples): %f msecs.\n", averageBestPercentileMsecs(1.00)); printf("Median run: %f msecs.\n", allTicks[totalRuns/2] * 1000.0 / ticks_per_sec()); printf("Total time: %f\n", accumulatedTimeMsecs); #ifdef __EMSCRIPTEN__ emscripten_cancel_main_loop(); #endif exit(0); } }
/** * "time" command * * @v argc Argument count * @v argv Argument list * @ret rc Return status code */ static int time_exec ( int argc, char **argv ) { struct time_options opts; unsigned long start; int secs; int rc; /* Parse options */ if ( ( rc = parse_options ( argc, argv, &time_cmd, &opts ) ) != 0 ) return rc; start = currticks(); rc = execv ( argv[1], argv + 1 ); secs = (currticks() - start) / ticks_per_sec(); printf ( "%s: %ds\n", argv[0], secs ); return rc; }
virtual void do_update_ui() { const unsigned c_width = 60; if (total == 0) percent_done = 0; else percent_done = al_round(static_cast<double>(completed) * 100 / total); if (percent_done > 100) percent_done = 100; unsigned __int64 speed; if (time_elapsed() == 0) speed = 0; else speed = al_round(static_cast<double>(completed) / time_elapsed() * ticks_per_sec()); wostringstream st; st << setw(7) << format_data_size(completed, get_size_suffixes()) << L" / " << format_data_size(total, get_size_suffixes()) << L" @ " << setw(9) << format_data_size(speed, get_speed_suffixes()) << L'\n'; st << Far::get_progress_bar_str(c_width, percent_done, 100) << L'\n'; progress_text = st.str(); }
/** * "time" command * * @v argc Argument count * @v argv Argument list * @ret rc Return status code */ static int time_exec ( int argc, char **argv ) { struct time_options opts; unsigned long start; unsigned long elapsed; int decisecs; int rc; /* Parse options */ if ( ( rc = parse_options ( argc, argv, &time_cmd, &opts ) ) != 0 ) return rc; start = currticks(); rc = execv ( argv[1], argv + 1 ); elapsed = ( currticks() - start ); decisecs = ( 10 * elapsed / ticks_per_sec() ); printf ( "%s: %d.%ds\n", argv[0], ( decisecs / 10 ), ( decisecs % 10 ) ); return rc; }
virtual void do_update_ui() { const unsigned c_width = 60; percent_done = calc_percent(completed, total); unsigned __int64 time = time_elapsed(); unsigned __int64 speed; if (time == 0) speed = 0; else speed = al_round(static_cast<double>(completed) / time * ticks_per_sec()); unsigned __int64 total_time; if (completed) total_time = static_cast<unsigned __int64>(static_cast<double>(total) / completed * time); else total_time = 0; if (total_time < time) total_time = time; wostringstream st; st << fit_str(arc_path, c_width) << L'\n'; st << L"\x1\n"; st << fit_str(file_path, c_width) << L'\n'; st << setw(7) << format_data_size(file_completed, get_size_suffixes()) << L" / " << format_data_size(file_total, get_size_suffixes()) << L'\n'; st << Far::get_progress_bar_str(c_width, calc_percent(file_completed, file_total), 100) << L'\n'; st << L"\x1\n"; st << setw(7) << format_data_size(completed, get_size_suffixes()) << L" / " << format_data_size(total, get_size_suffixes()) << L" @ " << setw(9) << format_data_size(speed, get_speed_suffixes()) << L" -" << format_time((total_time - time) / ticks_per_sec()) << L'\n'; st << setw(7) << format_data_size(total_data_read, get_size_suffixes()) << L" \x2192 " << setw(7) << format_data_size(total_data_written, get_size_suffixes()) << L" = " << setw(2) << calc_percent(total_data_written, total_data_read) << L"%" << L'\n'; st << Far::get_progress_bar_str(c_width, percent_done, 100) << L'\n'; progress_text = st.str(); }
virtual void do_update_ui() { const unsigned c_width = 60; percent_done = calc_percent(extract_completed, extract_total); unsigned __int64 extract_speed; if (time_elapsed() == 0) extract_speed = 0; else extract_speed = al_round(static_cast<double>(extract_completed) / time_elapsed() * ticks_per_sec()); if (extract_total && cache_total > extract_total) cache_total = extract_total; unsigned cache_stored_percent = calc_percent(cache_stored, cache_total); unsigned cache_written_percent = calc_percent(cache_written, cache_total); wostringstream st; st << fit_str(arc_path, c_width) << L'\n'; st << L"\x1\n"; st << fit_str(extract_file_path, c_width) << L'\n'; st << setw(7) << format_data_size(extract_completed, get_size_suffixes()) << L" / " << format_data_size(extract_total, get_size_suffixes()) << L" @ " << setw(9) << format_data_size(extract_speed, get_speed_suffixes()) << L'\n'; st << Far::get_progress_bar_str(c_width, percent_done, 100) << L'\n'; st << L"\x1\n"; st << fit_str(cache_file_path, c_width) << L'\n'; st << L"(" << format_data_size(cache_stored, get_size_suffixes()) << L" - " << format_data_size(cache_written, get_size_suffixes()) << L") / " << format_data_size(cache_total, get_size_suffixes()) << L'\n'; st << get_progress_bar_str(c_width, cache_written_percent, cache_stored_percent) << L'\n'; progress_text = st.str(); }