From d3d0b38b90f14660ecb6243373daa921f8ae02b1 Mon Sep 17 00:00:00 2001 From: Tor Aamodt Date: Sat, 17 Jul 2010 10:29:05 -0800 Subject: integrating Wilson's bugfixes from release branch [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 6869] --- src/gpgpu-sim/histogram.h | 1 + src/gpgpu-sim/stat-tool.cc | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src/gpgpu-sim') diff --git a/src/gpgpu-sim/histogram.h b/src/gpgpu-sim/histogram.h index 2d39410..5470050 100644 --- a/src/gpgpu-sim/histogram.h +++ b/src/gpgpu-sim/histogram.h @@ -78,6 +78,7 @@ protected: int *m_bins; // bin boundaries int *m_bin_cnts; // counters int m_maximum; // the maximum sample + signed long long int m_sum; // for calculating the average public: diff --git a/src/gpgpu-sim/stat-tool.cc b/src/gpgpu-sim/stat-tool.cc index 9845e06..98a6917 100644 --- a/src/gpgpu-sim/stat-tool.cc +++ b/src/gpgpu-sim/stat-tool.cc @@ -91,7 +91,7 @@ #include "../abstract_hardware_model.h" binned_histogram::binned_histogram (std::string name, int nbins, int* bins) - : m_name(name), m_nbins(nbins), m_bins(NULL), m_bin_cnts(new int[m_nbins]), m_maximum(0) + : m_name(name), m_nbins(nbins), m_bins(NULL), m_bin_cnts(new int[m_nbins]), m_maximum(0), m_sum(0) { if (bins) { m_bins = new int[m_nbins]; @@ -105,7 +105,7 @@ binned_histogram::binned_histogram (std::string name, int nbins, int* bins) binned_histogram::binned_histogram (const binned_histogram& other) : m_name(other.m_name), m_nbins(other.m_nbins), m_bins(NULL), - m_bin_cnts(new int[m_nbins]), m_maximum(0) + m_bin_cnts(new int[m_nbins]), m_maximum(0), m_sum(0) { for (int i = 0; i < m_nbins; i++) { m_bin_cnts[i] = other.m_bin_cnts[i]; @@ -125,10 +125,17 @@ void binned_histogram::add2bin (int sample) { void binned_histogram::fprint (FILE *fout) { if (m_name.c_str() != NULL) fprintf(fout, "%s = ", m_name.c_str()); + int total_sample = 0; for (int i = 0; i < m_nbins; i++) { fprintf(fout, "%d ", m_bin_cnts[i]); + total_sample += m_bin_cnts[i]; } fprintf(fout, "max=%d ", m_maximum); + float avg = 0.0f; + if (total_sample > 0) { + avg = (float)m_sum / total_sample; + } + fprintf(fout, "avg=%0.2f ", avg); } binned_histogram::~binned_histogram () { @@ -156,6 +163,7 @@ void pow2_histogram::add2bin (int sample) { m_bin_cnts[bin] += 1; m_maximum = (sample > m_maximum)? sample : m_maximum; + m_sum += sample; } linear_histogram::linear_histogram (int stride, const char *name, int nbins, int* bins) @@ -167,10 +175,12 @@ void linear_histogram::add2bin (int sample) { assert(sample >= 0); int bin = sample / m_stride; + if (bin >= m_nbins) bin = m_nbins - 1; m_bin_cnts[bin] += 1; m_maximum = (sample > m_maximum)? sample : m_maximum; + m_sum += sample; } -- cgit v1.3