Tidy up timing printing to reduce code duplication
This commit is contained in:
parent
377b348748
commit
8d88afdedb
82
src/main.cpp
82
src/main.cpp
@ -41,10 +41,7 @@ int main(int argc, char *argv[])
|
|||||||
stream->write_arrays(a, b, c);
|
stream->write_arrays(a, b, c);
|
||||||
|
|
||||||
// List of times
|
// List of times
|
||||||
std::vector<double> copy_timings;
|
std::vector<std::vector<double>> timings(4);
|
||||||
std::vector<double> mul_timings;
|
|
||||||
std::vector<double> add_timings;
|
|
||||||
std::vector<double> triad_timings;
|
|
||||||
|
|
||||||
// Declare timers
|
// Declare timers
|
||||||
std::chrono::high_resolution_clock::time_point t1, t2;
|
std::chrono::high_resolution_clock::time_point t1, t2;
|
||||||
@ -52,30 +49,29 @@ int main(int argc, char *argv[])
|
|||||||
// Main loop
|
// Main loop
|
||||||
for (unsigned int k = 0; k < ntimes; k++)
|
for (unsigned int k = 0; k < ntimes; k++)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Execute Copy
|
// Execute Copy
|
||||||
t1 = std::chrono::high_resolution_clock::now();
|
t1 = std::chrono::high_resolution_clock::now();
|
||||||
stream->copy();
|
stream->copy();
|
||||||
t2 = std::chrono::high_resolution_clock::now();
|
t2 = std::chrono::high_resolution_clock::now();
|
||||||
copy_timings.push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
timings[0].push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
||||||
|
|
||||||
// Execute Mul
|
// Execute Mul
|
||||||
t1 = std::chrono::high_resolution_clock::now();
|
t1 = std::chrono::high_resolution_clock::now();
|
||||||
stream->mul();
|
stream->mul();
|
||||||
t2 = std::chrono::high_resolution_clock::now();
|
t2 = std::chrono::high_resolution_clock::now();
|
||||||
mul_timings.push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
timings[1].push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
||||||
|
|
||||||
// Execute Add
|
// Execute Add
|
||||||
t1 = std::chrono::high_resolution_clock::now();
|
t1 = std::chrono::high_resolution_clock::now();
|
||||||
stream->add();
|
stream->add();
|
||||||
t2 = std::chrono::high_resolution_clock::now();
|
t2 = std::chrono::high_resolution_clock::now();
|
||||||
add_timings.push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
timings[2].push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
||||||
|
|
||||||
// Execute Triad
|
// Execute Triad
|
||||||
t1 = std::chrono::high_resolution_clock::now();
|
t1 = std::chrono::high_resolution_clock::now();
|
||||||
stream->triad();
|
stream->triad();
|
||||||
t2 = std::chrono::high_resolution_clock::now();
|
t2 = std::chrono::high_resolution_clock::now();
|
||||||
triad_timings.push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
timings[3].push_back(std::chrono::duration_cast<std::chrono::duration<double> >(t2 - t1).count());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,21 +79,7 @@ int main(int argc, char *argv[])
|
|||||||
stream->read_arrays(a, b, c);
|
stream->read_arrays(a, b, c);
|
||||||
check_solution<double>(ntimes, a, b, c);
|
check_solution<double>(ntimes, a, b, c);
|
||||||
|
|
||||||
// Crunch timing results
|
// Display timing results
|
||||||
|
|
||||||
// Get min/max; ignore first result
|
|
||||||
auto copy_minmax = std::minmax_element(copy_timings.begin()+1, copy_timings.end());
|
|
||||||
auto mul_minmax = std::minmax_element(mul_timings.begin()+1, mul_timings.end());
|
|
||||||
auto add_minmax = std::minmax_element(add_timings.begin()+1, add_timings.end());
|
|
||||||
auto triad_minmax = std::minmax_element(triad_timings.begin()+1, triad_timings.end());
|
|
||||||
|
|
||||||
double copy_average = std::accumulate(copy_timings.begin()+1, copy_timings.end(), 0.0) / (double)(ntimes - 1);
|
|
||||||
double mul_average = std::accumulate(mul_timings.begin()+1, mul_timings.end(), 0.0) / (double)(ntimes - 1);
|
|
||||||
double add_average = std::accumulate(add_timings.begin()+1, add_timings.end(), 0.0) / (double)(ntimes - 1);
|
|
||||||
double triad_average = std::accumulate(triad_timings.begin()+1, triad_timings.end(), 0.0) / (double)(ntimes - 1);
|
|
||||||
|
|
||||||
|
|
||||||
// Display results
|
|
||||||
std::cout
|
std::cout
|
||||||
<< std::left << std::setw(12) << "Function"
|
<< std::left << std::setw(12) << "Function"
|
||||||
<< std::left << std::setw(12) << "MBytes/sec"
|
<< std::left << std::setw(12) << "MBytes/sec"
|
||||||
@ -107,39 +89,33 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
std::cout << std::fixed;
|
std::cout << std::fixed;
|
||||||
|
|
||||||
|
std::string labels[4] = {"Copy", "Mul", "Add", "Triad"};
|
||||||
|
size_t sizes[4] = {
|
||||||
|
2 * sizeof(double) * ARRAY_SIZE,
|
||||||
|
2 * sizeof(double) * ARRAY_SIZE,
|
||||||
|
3 * sizeof(double) * ARRAY_SIZE,
|
||||||
|
3 * sizeof(double) * ARRAY_SIZE
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
// Get min/max; ignore the first result
|
||||||
|
auto minmax = std::minmax_element(timings[i].begin()+1, timings[i].end());
|
||||||
|
|
||||||
|
// Calculate average; ignore the first result
|
||||||
|
double average = std::accumulate(timings[i].begin()+1, timings[i].end(), 0.0) / (double)(ntimes - 1);
|
||||||
|
|
||||||
|
// Display results
|
||||||
std::cout
|
std::cout
|
||||||
<< std::left << std::setw(12) << "Copy"
|
<< std::left << std::setw(12) << labels[i]
|
||||||
<< std::left << std::setw(12) << std::setprecision(3) << 1.0E-06 * (2 * sizeof(double) * ARRAY_SIZE)/(*copy_minmax.first)
|
<< std::left << std::setw(12) << std::setprecision(3) << 1.0E-6 * sizes[i] / (*minmax.first)
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *copy_minmax.first
|
<< std::left << std::setw(12) << std::setprecision(5) << *minmax.first
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *copy_minmax.second
|
<< std::left << std::setw(12) << std::setprecision(5) << *minmax.second
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << copy_average
|
<< std::left << std::setw(12) << std::setprecision(5) << average
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
|
|
||||||
std::cout
|
}
|
||||||
<< std::left << std::setw(12) << "Mul"
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(3) << 1.0E-06 * (2 * sizeof(double) * ARRAY_SIZE)/(*mul_minmax.first)
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *mul_minmax.first
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *mul_minmax.second
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << mul_average
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
std::cout
|
|
||||||
<< std::left << std::setw(12) << "Add"
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(3) << 1.0E-06 * (3 * sizeof(double) * ARRAY_SIZE)/(*add_minmax.first)
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *add_minmax.first
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *add_minmax.second
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << add_average
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
std::cout
|
|
||||||
<< std::left << std::setw(12) << "Triad"
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(3) << 1.0E-06 * (3 * sizeof(double) * ARRAY_SIZE)/(*triad_minmax.first)
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *triad_minmax.first
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << *triad_minmax.second
|
|
||||||
<< std::left << std::setw(12) << std::setprecision(5) << triad_average
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
delete[] stream;
|
delete[] stream;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user