summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/stat-tool.cc
diff options
context:
space:
mode:
authorNick <[email protected]>2019-09-13 07:54:00 -0400
committerNick <[email protected]>2019-09-13 07:54:00 -0400
commita34a4baad45a40840308167307c79371b4024a9d (patch)
treec9bef005b3a42ba7d65173ef68aba8eedfbb35d9 /src/gpgpu-sim/stat-tool.cc
parentae63df6d86f995876f38ab3cdf47eac61ccda8cd (diff)
Big reformat change using clang-format-6.0
Diffstat (limited to 'src/gpgpu-sim/stat-tool.cc')
-rw-r--r--src/gpgpu-sim/stat-tool.cc1129
1 files changed, 550 insertions, 579 deletions
diff --git a/src/gpgpu-sim/stat-tool.cc b/src/gpgpu-sim/stat-tool.cc
index 35a4cc3..6fafaa6 100644
--- a/src/gpgpu-sim/stat-tool.cc
+++ b/src/gpgpu-sim/stat-tool.cc
@@ -7,180 +7,179 @@
//
// Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
-// Redistributions in binary form must reproduce the above copyright notice, this
-// list of conditions and the following disclaimer in the documentation and/or
-// other materials provided with the distribution.
-// Neither the name of The University of British Columbia nor the names of its
-// contributors may be used to endorse or promote products derived from this
-// software without specific prior written permission.
+// Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution. Neither the name of
+// The University of British Columbia nor the names of its contributors may be
+// used to endorse or promote products derived from this software without
+// specific prior written permission.
//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
#include "stat-tool.h"
+#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
-#include <assert.h>
#include <zlib.h>
-#include <string>
+#include <algorithm>
#include <list>
-#include <vector>
#include <map>
-#include <algorithm>
#include <string>
+#include <vector>
#include "../../libcuda/gpgpu_context.h"
////////////////////////////////////////////////////////////////////////////////
-static unsigned long long min_snap_shot_interval = 0;
-static unsigned long long next_snap_shot_cycle = 0;
-static std::list<snap_shot_trigger*> list_ss_trigger;
+static unsigned long long min_snap_shot_interval = 0;
+static unsigned long long next_snap_shot_cycle = 0;
+static std::list<snap_shot_trigger *> list_ss_trigger;
-void add_snap_shot_trigger (snap_shot_trigger* ss_trigger)
-{
- // quick optimization assuming that all snap shot intervals are perfect multiples of each other
- if (min_snap_shot_interval == 0 || min_snap_shot_interval > ss_trigger->get_interval()) {
- min_snap_shot_interval = ss_trigger->get_interval();
- next_snap_shot_cycle = min_snap_shot_interval; // assume that snap shots haven't started yet
- }
- list_ss_trigger.push_back(ss_trigger);
+void add_snap_shot_trigger(snap_shot_trigger *ss_trigger) {
+ // quick optimization assuming that all snap shot intervals are perfect
+ // multiples of each other
+ if (min_snap_shot_interval == 0 ||
+ min_snap_shot_interval > ss_trigger->get_interval()) {
+ min_snap_shot_interval = ss_trigger->get_interval();
+ next_snap_shot_cycle =
+ min_snap_shot_interval; // assume that snap shots haven't started yet
+ }
+ list_ss_trigger.push_back(ss_trigger);
}
-void remove_snap_shot_trigger (snap_shot_trigger* ss_trigger)
-{
- list_ss_trigger.remove(ss_trigger);
+void remove_snap_shot_trigger(snap_shot_trigger *ss_trigger) {
+ list_ss_trigger.remove(ss_trigger);
}
-void try_snap_shot (unsigned long long current_cycle)
-{
- if (min_snap_shot_interval == 0) return;
- if (current_cycle != next_snap_shot_cycle) return;
-
- std::list<snap_shot_trigger*>::iterator ss_trigger_iter = list_ss_trigger.begin();
- for(; ss_trigger_iter != list_ss_trigger.end(); ++ss_trigger_iter) {
- (*ss_trigger_iter)->snap_shot(current_cycle); // WF: should be try_snap_shot
- }
- next_snap_shot_cycle = current_cycle + min_snap_shot_interval; // WF: stateful testing, maybe bad
+void try_snap_shot(unsigned long long current_cycle) {
+ if (min_snap_shot_interval == 0) return;
+ if (current_cycle != next_snap_shot_cycle) return;
+
+ std::list<snap_shot_trigger *>::iterator ss_trigger_iter =
+ list_ss_trigger.begin();
+ for (; ss_trigger_iter != list_ss_trigger.end(); ++ss_trigger_iter) {
+ (*ss_trigger_iter)
+ ->snap_shot(current_cycle); // WF: should be try_snap_shot
+ }
+ next_snap_shot_cycle =
+ current_cycle +
+ min_snap_shot_interval; // WF: stateful testing, maybe bad
}
////////////////////////////////////////////////////////////////////////////////
-
-static unsigned long long spill_interval = 0;
-static unsigned long long next_spill_cycle = 0;
-static std::list<spill_log_interface*> list_spill_log;
-void add_spill_log (spill_log_interface* spill_log)
-{
- list_spill_log.push_back(spill_log);
+static unsigned long long spill_interval = 0;
+static unsigned long long next_spill_cycle = 0;
+static std::list<spill_log_interface *> list_spill_log;
+
+void add_spill_log(spill_log_interface *spill_log) {
+ list_spill_log.push_back(spill_log);
}
-void remove_spill_log (spill_log_interface* spill_log)
-{
- list_spill_log.remove(spill_log);
+void remove_spill_log(spill_log_interface *spill_log) {
+ list_spill_log.remove(spill_log);
}
-void set_spill_interval (unsigned long long interval)
-{
- spill_interval = interval;
- next_spill_cycle = spill_interval;
+void set_spill_interval(unsigned long long interval) {
+ spill_interval = interval;
+ next_spill_cycle = spill_interval;
}
-void spill_log_to_file (FILE *fout, int final, unsigned long long current_cycle)
-{
- if (!final && spill_interval == 0) return;
- if (!final && current_cycle <= next_spill_cycle) return;
+void spill_log_to_file(FILE *fout, int final,
+ unsigned long long current_cycle) {
+ if (!final && spill_interval == 0) return;
+ if (!final && current_cycle <= next_spill_cycle) return;
- fprintf(fout, "\n"); // ensure that the spill occurs at a new line
- std::list<spill_log_interface*>::iterator i_spill_log = list_spill_log.begin();
- for(; i_spill_log != list_spill_log.end(); ++i_spill_log) {
- (*i_spill_log)->spill(fout, final);
- }
- fflush(fout);
+ fprintf(fout, "\n"); // ensure that the spill occurs at a new line
+ std::list<spill_log_interface *>::iterator i_spill_log =
+ list_spill_log.begin();
+ for (; i_spill_log != list_spill_log.end(); ++i_spill_log) {
+ (*i_spill_log)->spill(fout, final);
+ }
+ fflush(fout);
- next_spill_cycle = current_cycle + spill_interval; // WF: stateful testing, maybe bad
+ next_spill_cycle =
+ current_cycle + spill_interval; // WF: stateful testing, maybe bad
}
////////////////////////////////////////////////////////////////////////////////
static int n_thread_CFloggers = 0;
-static thread_CFlocality** thread_CFlogger = NULL;
+static thread_CFlocality **thread_CFlogger = NULL;
-void create_thread_CFlogger(gpgpu_context* ctx, int n_loggers, int n_threads, address_type start_pc, unsigned long long logging_interval)
-{
- destroy_thread_CFlogger();
-
- n_thread_CFloggers = n_loggers;
- thread_CFlogger = new thread_CFlocality*[n_loggers];
+void create_thread_CFlogger(gpgpu_context *ctx, int n_loggers, int n_threads,
+ address_type start_pc,
+ unsigned long long logging_interval) {
+ destroy_thread_CFlogger();
+
+ n_thread_CFloggers = n_loggers;
+ thread_CFlogger = new thread_CFlocality *[n_loggers];
- std::string name_tpl("CFLog");
- char buffer[32];
- for (int i = 0; i < n_thread_CFloggers; i++) {
- snprintf(buffer, 32, "%02d", i);
- thread_CFlogger[i] = new thread_CFlocality( ctx, name_tpl + buffer, logging_interval, n_threads, start_pc);
- if (logging_interval != 0) {
- add_snap_shot_trigger(thread_CFlogger[i]);
- add_spill_log(thread_CFlogger[i]);
- }
- }
+ std::string name_tpl("CFLog");
+ char buffer[32];
+ for (int i = 0; i < n_thread_CFloggers; i++) {
+ snprintf(buffer, 32, "%02d", i);
+ thread_CFlogger[i] = new thread_CFlocality(
+ ctx, name_tpl + buffer, logging_interval, n_threads, start_pc);
+ if (logging_interval != 0) {
+ add_snap_shot_trigger(thread_CFlogger[i]);
+ add_spill_log(thread_CFlogger[i]);
+ }
+ }
}
-void destroy_thread_CFlogger( )
-{
- if (thread_CFlogger != NULL) {
- for (int i = 0; i < n_thread_CFloggers; i++) {
- remove_snap_shot_trigger(thread_CFlogger[i]);
- remove_spill_log(thread_CFlogger[i]);
- delete thread_CFlogger[i];
- }
- delete [] thread_CFlogger;
- thread_CFlogger = NULL;
- }
+void destroy_thread_CFlogger() {
+ if (thread_CFlogger != NULL) {
+ for (int i = 0; i < n_thread_CFloggers; i++) {
+ remove_snap_shot_trigger(thread_CFlogger[i]);
+ remove_spill_log(thread_CFlogger[i]);
+ delete thread_CFlogger[i];
+ }
+ delete[] thread_CFlogger;
+ thread_CFlogger = NULL;
+ }
}
-void cflog_update_thread_pc( int logger_id, int thread_id, address_type pc )
-{
- if (thread_CFlogger == NULL) return; // this means no visualizer output
- if (thread_id < 0) return;
- thread_CFlogger[logger_id]->update_thread_pc(thread_id, pc);
+void cflog_update_thread_pc(int logger_id, int thread_id, address_type pc) {
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
+ if (thread_id < 0) return;
+ thread_CFlogger[logger_id]->update_thread_pc(thread_id, pc);
}
-// deprecated
-void cflog_snapshot( int logger_id, unsigned long long cycle )
-{
- thread_CFlogger[logger_id]->snap_shot(cycle);
+// deprecated
+void cflog_snapshot(int logger_id, unsigned long long cycle) {
+ thread_CFlogger[logger_id]->snap_shot(cycle);
}
-void cflog_print(FILE *fout)
-{
- if (thread_CFlogger == NULL) return; // this means no visualizer output
- for (int i = 0; i < n_thread_CFloggers; i++) {
- thread_CFlogger[i]->print_histo(fout);
- }
+void cflog_print(FILE *fout) {
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
+ for (int i = 0; i < n_thread_CFloggers; i++) {
+ thread_CFlogger[i]->print_histo(fout);
+ }
}
-void cflog_visualizer_print(FILE *fout)
-{
- if (thread_CFlogger == NULL) return; // this means no visualizer output
- for (int i = 0; i < n_thread_CFloggers; i++) {
- thread_CFlogger[i]->print_visualizer(fout);
- }
+void cflog_visualizer_print(FILE *fout) {
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
+ for (int i = 0; i < n_thread_CFloggers; i++) {
+ thread_CFlogger[i]->print_visualizer(fout);
+ }
}
-void cflog_visualizer_gzprint(gzFile fout)
-{
- if (thread_CFlogger == NULL) return; // this means no visualizer output
- for (int i = 0; i < n_thread_CFloggers; i++) {
- thread_CFlogger[i]->print_visualizer(fout);
- }
+void cflog_visualizer_gzprint(gzFile fout) {
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
+ for (int i = 0; i < n_thread_CFloggers; i++) {
+ thread_CFlogger[i]->print_visualizer(fout);
+ }
}
////////////////////////////////////////////////////////////////////////////////
@@ -189,26 +188,23 @@ int insn_warp_occ_logger::s_ids = 0;
static std::vector<insn_warp_occ_logger> iwo_logger;
-void insn_warp_occ_create( int n_loggers, int simd_width )
-{
- iwo_logger.clear();
- iwo_logger.assign(n_loggers, insn_warp_occ_logger(simd_width));
- for (unsigned i = 0; i < iwo_logger.size(); i++) {
- iwo_logger[i].set_id(i);
- }
+void insn_warp_occ_create(int n_loggers, int simd_width) {
+ iwo_logger.clear();
+ iwo_logger.assign(n_loggers, insn_warp_occ_logger(simd_width));
+ for (unsigned i = 0; i < iwo_logger.size(); i++) {
+ iwo_logger[i].set_id(i);
+ }
}
-void insn_warp_occ_log( int logger_id, address_type pc, int warp_occ)
-{
- if (warp_occ <= 0) return;
- iwo_logger[logger_id].log(pc, warp_occ);
+void insn_warp_occ_log(int logger_id, address_type pc, int warp_occ) {
+ if (warp_occ <= 0) return;
+ iwo_logger[logger_id].log(pc, warp_occ);
}
-void insn_warp_occ_print( FILE *fout )
-{
- for (unsigned i = 0; i < iwo_logger.size(); i++) {
- iwo_logger[i].print(fout);
- }
+void insn_warp_occ_print(FILE *fout) {
+ for (unsigned i = 0; i < iwo_logger.size(); i++) {
+ iwo_logger[i].print(fout);
+ }
}
////////////////////////////////////////////////////////////////////////////////
@@ -221,36 +217,33 @@ int linear_histogram_logger::s_ids = 0;
static std::vector<linear_histogram_logger> s_warp_occ_logger;
-void shader_warp_occ_create( int n_loggers, int simd_width, unsigned long long logging_interval)
-{
- // simd_width + 1 to include the case with full warp
- s_warp_occ_logger.assign(n_loggers,
- linear_histogram_logger(simd_width + 1, logging_interval, "ShdrWarpOcc"));
- for (unsigned i = 0; i < s_warp_occ_logger.size(); i++) {
- s_warp_occ_logger[i].set_id(i);
- add_snap_shot_trigger(&(s_warp_occ_logger[i]));
- add_spill_log(&(s_warp_occ_logger[i]));
- }
+void shader_warp_occ_create(int n_loggers, int simd_width,
+ unsigned long long logging_interval) {
+ // simd_width + 1 to include the case with full warp
+ s_warp_occ_logger.assign(
+ n_loggers,
+ linear_histogram_logger(simd_width + 1, logging_interval, "ShdrWarpOcc"));
+ for (unsigned i = 0; i < s_warp_occ_logger.size(); i++) {
+ s_warp_occ_logger[i].set_id(i);
+ add_snap_shot_trigger(&(s_warp_occ_logger[i]));
+ add_spill_log(&(s_warp_occ_logger[i]));
+ }
}
-void shader_warp_occ_log( int logger_id, int warp_occ)
-{
- s_warp_occ_logger[logger_id].log(warp_occ);
+void shader_warp_occ_log(int logger_id, int warp_occ) {
+ s_warp_occ_logger[logger_id].log(warp_occ);
}
-void shader_warp_occ_snapshot( int logger_id, unsigned long long current_cycle)
-{
- s_warp_occ_logger[logger_id].snap_shot(current_cycle);
+void shader_warp_occ_snapshot(int logger_id, unsigned long long current_cycle) {
+ s_warp_occ_logger[logger_id].snap_shot(current_cycle);
}
-void shader_warp_occ_print( FILE *fout )
-{
- for (unsigned i = 0; i < s_warp_occ_logger.size(); i++) {
- s_warp_occ_logger[i].print(fout);
- }
+void shader_warp_occ_print(FILE *fout) {
+ for (unsigned i = 0; i < s_warp_occ_logger.size(); i++) {
+ s_warp_occ_logger[i].print(fout);
+ }
}
-
/////////////////////////////////////////////////////////////////////////////////////
// per-shadercore memory-access logger
/////////////////////////////////////////////////////////////////////////////////////
@@ -259,105 +252,115 @@ static int s_mem_acc_logger_n_dram = 0;
static int s_mem_acc_logger_n_bank = 0;
static std::vector<linear_histogram_logger> s_mem_acc_logger;
-void shader_mem_acc_create( int n_loggers, int n_dram, int n_bank, unsigned long long logging_interval)
-{
- // (n_bank + 1) to space data out; 2x to separate read and write
- s_mem_acc_logger.assign(n_loggers,
- linear_histogram_logger(2 * n_dram * (n_bank + 1), logging_interval, "ShdrMemAcc"));
+void shader_mem_acc_create(int n_loggers, int n_dram, int n_bank,
+ unsigned long long logging_interval) {
+ // (n_bank + 1) to space data out; 2x to separate read and write
+ s_mem_acc_logger.assign(
+ n_loggers, linear_histogram_logger(2 * n_dram * (n_bank + 1),
+ logging_interval, "ShdrMemAcc"));
- s_mem_acc_logger_n_dram = n_dram;
- s_mem_acc_logger_n_bank = n_bank;
- for (unsigned i = 0; i < s_mem_acc_logger.size(); i++) {
- s_mem_acc_logger[i].set_id(i);
- add_snap_shot_trigger(&(s_mem_acc_logger[i]));
- add_spill_log(&(s_mem_acc_logger[i]));
- }
+ s_mem_acc_logger_n_dram = n_dram;
+ s_mem_acc_logger_n_bank = n_bank;
+ for (unsigned i = 0; i < s_mem_acc_logger.size(); i++) {
+ s_mem_acc_logger[i].set_id(i);
+ add_snap_shot_trigger(&(s_mem_acc_logger[i]));
+ add_spill_log(&(s_mem_acc_logger[i]));
+ }
}
-void shader_mem_acc_log( int logger_id, int dram_id, int bank, char rw)
-{
- if (s_mem_acc_logger_n_dram == 0) return;
- int write_offset = 0;
- switch(rw) {
- case 'r': write_offset = 0; break;
- case 'w': write_offset = (s_mem_acc_logger_n_bank + 1) * s_mem_acc_logger_n_dram; break;
- default: assert(0); break;
- }
- s_mem_acc_logger[logger_id].log(dram_id * s_mem_acc_logger_n_bank + bank + write_offset);
+void shader_mem_acc_log(int logger_id, int dram_id, int bank, char rw) {
+ if (s_mem_acc_logger_n_dram == 0) return;
+ int write_offset = 0;
+ switch (rw) {
+ case 'r':
+ write_offset = 0;
+ break;
+ case 'w':
+ write_offset = (s_mem_acc_logger_n_bank + 1) * s_mem_acc_logger_n_dram;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ s_mem_acc_logger[logger_id].log(dram_id * s_mem_acc_logger_n_bank + bank +
+ write_offset);
}
-void shader_mem_acc_snapshot( int logger_id, unsigned long long current_cycle)
-{
- s_mem_acc_logger[logger_id].snap_shot(current_cycle);
+void shader_mem_acc_snapshot(int logger_id, unsigned long long current_cycle) {
+ s_mem_acc_logger[logger_id].snap_shot(current_cycle);
}
-void shader_mem_acc_print( FILE *fout )
-{
- for (unsigned i = 0; i < s_mem_acc_logger.size(); i++) {
- s_mem_acc_logger[i].print(fout);
- }
+void shader_mem_acc_print(FILE *fout) {
+ for (unsigned i = 0; i < s_mem_acc_logger.size(); i++) {
+ s_mem_acc_logger[i].print(fout);
+ }
}
-
/////////////////////////////////////////////////////////////////////////////////////
// per-shadercore memory-latency logger
/////////////////////////////////////////////////////////////////////////////////////
static bool s_mem_lat_logger_used = false;
-static int s_mem_lat_logger_nbins = 48; // up to 2^24 = 16M
+static int s_mem_lat_logger_nbins = 48; // up to 2^24 = 16M
static std::vector<linear_histogram_logger> s_mem_lat_logger;
-void shader_mem_lat_create( int n_loggers, unsigned long long logging_interval)
-{
- s_mem_lat_logger.assign(n_loggers,
- linear_histogram_logger(s_mem_lat_logger_nbins, logging_interval, "ShdrMemLat"));
+void shader_mem_lat_create(int n_loggers, unsigned long long logging_interval) {
+ s_mem_lat_logger.assign(
+ n_loggers, linear_histogram_logger(s_mem_lat_logger_nbins,
+ logging_interval, "ShdrMemLat"));
+
+ for (unsigned i = 0; i < s_mem_lat_logger.size(); i++) {
+ s_mem_lat_logger[i].set_id(i);
+ add_snap_shot_trigger(&(s_mem_lat_logger[i]));
+ add_spill_log(&(s_mem_lat_logger[i]));
+ }
- for (unsigned i = 0; i < s_mem_lat_logger.size(); i++) {
- s_mem_lat_logger[i].set_id(i);
- add_snap_shot_trigger(&(s_mem_lat_logger[i]));
- add_spill_log(&(s_mem_lat_logger[i]));
- }
-
- s_mem_lat_logger_used = true;
+ s_mem_lat_logger_used = true;
}
-void shader_mem_lat_log( int logger_id, int latency)
-{
- if (s_mem_lat_logger_used == false) return;
- if (latency > (1<<(s_mem_lat_logger_nbins/2))) assert(0); // guard for out of bound bin
- assert(latency > 0);
-
- int latency_bin;
-
- int bin; // LOG_2(latency)
- int v = latency;
- register unsigned int shift;
+void shader_mem_lat_log(int logger_id, int latency) {
+ if (s_mem_lat_logger_used == false) return;
+ if (latency > (1 << (s_mem_lat_logger_nbins / 2)))
+ assert(0); // guard for out of bound bin
+ assert(latency > 0);
- bin = (v > 0xFFFF) << 4; v >>= bin;
- shift = (v > 0xFF ) << 3; v >>= shift; bin |= shift;
- shift = (v > 0xF ) << 2; v >>= shift; bin |= shift;
- shift = (v > 0x3 ) << 1; v >>= shift; bin |= shift;
- bin |= (v >> 1);
- latency_bin = 2 * bin;
- if (bin > 0) {
- latency_bin += ((latency & (1 << (bin - 1))) != 0)? 1 : 0; // approx. for LOG_sqrt2(latency)
- }
+ int latency_bin;
- s_mem_lat_logger[logger_id].log(latency_bin);
-}
+ int bin; // LOG_2(latency)
+ int v = latency;
+ register unsigned int shift;
-void shader_mem_lat_snapshot( int logger_id, unsigned long long current_cycle)
-{
- s_mem_lat_logger[logger_id].snap_shot(current_cycle);
+ bin = (v > 0xFFFF) << 4;
+ v >>= bin;
+ shift = (v > 0xFF) << 3;
+ v >>= shift;
+ bin |= shift;
+ shift = (v > 0xF) << 2;
+ v >>= shift;
+ bin |= shift;
+ shift = (v > 0x3) << 1;
+ v >>= shift;
+ bin |= shift;
+ bin |= (v >> 1);
+ latency_bin = 2 * bin;
+ if (bin > 0) {
+ latency_bin += ((latency & (1 << (bin - 1))) != 0)
+ ? 1
+ : 0; // approx. for LOG_sqrt2(latency)
+ }
+
+ s_mem_lat_logger[logger_id].log(latency_bin);
}
-void shader_mem_lat_print( FILE *fout )
-{
- for (unsigned i = 0; i < s_mem_lat_logger.size(); i++) {
- s_mem_lat_logger[i].print(fout);
- }
+void shader_mem_lat_snapshot(int logger_id, unsigned long long current_cycle) {
+ s_mem_lat_logger[logger_id].snap_shot(current_cycle);
}
+void shader_mem_lat_print(FILE *fout) {
+ for (unsigned i = 0; i < s_mem_lat_logger.size(); i++) {
+ s_mem_lat_logger[i].print(fout);
+ }
+}
/////////////////////////////////////////////////////////////////////////////////////
// per-shadercore cache-miss logger
@@ -366,425 +369,393 @@ void shader_mem_lat_print( FILE *fout )
static int s_cache_access_logger_n_types = 0;
static std::vector<linear_histogram_logger> s_cache_access_logger;
-enum cache_access_logger_types {
- NORMALS, TEXTURE, CONSTANT, INSTRUCTION
-};
+enum cache_access_logger_types { NORMALS, TEXTURE, CONSTANT, INSTRUCTION };
int get_shader_normal_cache_id() { return NORMALS; }
int get_shader_texture_cache_id() { return TEXTURE; }
int get_shader_constant_cache_id() { return CONSTANT; }
int get_shader_instruction_cache_id() { return INSTRUCTION; }
-void shader_cache_access_create( int n_loggers, int n_types, unsigned long long logging_interval)
-{
- // There are different type of cache (x2 for recording accesses and misses)
- s_cache_access_logger.assign(n_loggers,
- linear_histogram_logger(n_types * 2, logging_interval, "ShdrCacheMiss"));
+void shader_cache_access_create(int n_loggers, int n_types,
+ unsigned long long logging_interval) {
+ // There are different type of cache (x2 for recording accesses and misses)
+ s_cache_access_logger.assign(
+ n_loggers,
+ linear_histogram_logger(n_types * 2, logging_interval, "ShdrCacheMiss"));
- s_cache_access_logger_n_types = n_types;
- for (unsigned i = 0; i < s_cache_access_logger.size(); i++) {
- s_cache_access_logger[i].set_id(i);
- add_snap_shot_trigger(&(s_cache_access_logger[i]));
- add_spill_log(&(s_cache_access_logger[i]));
- }
+ s_cache_access_logger_n_types = n_types;
+ for (unsigned i = 0; i < s_cache_access_logger.size(); i++) {
+ s_cache_access_logger[i].set_id(i);
+ add_snap_shot_trigger(&(s_cache_access_logger[i]));
+ add_spill_log(&(s_cache_access_logger[i]));
+ }
}
-void shader_cache_access_log( int logger_id, int type, int miss)
-{
- if (s_cache_access_logger_n_types == 0) return;
- if (logger_id < 0) return;
- assert(type == NORMALS || type == TEXTURE || type == CONSTANT || type == INSTRUCTION);
- assert(miss == 0 || miss == 1);
-
- s_cache_access_logger[logger_id].log(2 * type + miss);
-}
+void shader_cache_access_log(int logger_id, int type, int miss) {
+ if (s_cache_access_logger_n_types == 0) return;
+ if (logger_id < 0) return;
+ assert(type == NORMALS || type == TEXTURE || type == CONSTANT ||
+ type == INSTRUCTION);
+ assert(miss == 0 || miss == 1);
-void shader_cache_access_unlog( int logger_id, int type, int miss)
-{
- if (s_cache_access_logger_n_types == 0) return;
- if (logger_id < 0) return;
- assert(type == NORMALS || type == TEXTURE || type == CONSTANT || type == INSTRUCTION);
- assert(miss == 0 || miss == 1);
-
- s_cache_access_logger[logger_id].unlog(2 * type + miss);
+ s_cache_access_logger[logger_id].log(2 * type + miss);
}
-void shader_cache_access_print( FILE *fout )
-{
- for (unsigned i = 0; i < s_cache_access_logger.size(); i++) {
- s_cache_access_logger[i].print(fout);
- }
+void shader_cache_access_unlog(int logger_id, int type, int miss) {
+ if (s_cache_access_logger_n_types == 0) return;
+ if (logger_id < 0) return;
+ assert(type == NORMALS || type == TEXTURE || type == CONSTANT ||
+ type == INSTRUCTION);
+ assert(miss == 0 || miss == 1);
+
+ s_cache_access_logger[logger_id].unlog(2 * type + miss);
}
+void shader_cache_access_print(FILE *fout) {
+ for (unsigned i = 0; i < s_cache_access_logger.size(); i++) {
+ s_cache_access_logger[i].print(fout);
+ }
+}
/////////////////////////////////////////////////////////////////////////////////////
-// per-shadercore CTA count logger (only make sense with gpgpu_spread_blocks_across_cores)
+// per-shadercore CTA count logger (only make sense with
+// gpgpu_spread_blocks_across_cores)
/////////////////////////////////////////////////////////////////////////////////////
static linear_histogram_logger *s_CTA_count_logger = NULL;
-void shader_CTA_count_create( int n_shaders, unsigned long long logging_interval)
-{
- // only need one logger to track all the shaders
- if (s_CTA_count_logger != NULL) delete s_CTA_count_logger;
- s_CTA_count_logger = new linear_histogram_logger(n_shaders, logging_interval, "ShdrCTACount", false);
+void shader_CTA_count_create(int n_shaders,
+ unsigned long long logging_interval) {
+ // only need one logger to track all the shaders
+ if (s_CTA_count_logger != NULL) delete s_CTA_count_logger;
+ s_CTA_count_logger = new linear_histogram_logger(n_shaders, logging_interval,
+ "ShdrCTACount", false);
- s_CTA_count_logger->set_id(-1);
- if (logging_interval != 0) {
- add_snap_shot_trigger(s_CTA_count_logger);
- add_spill_log(s_CTA_count_logger);
- }
+ s_CTA_count_logger->set_id(-1);
+ if (logging_interval != 0) {
+ add_snap_shot_trigger(s_CTA_count_logger);
+ add_spill_log(s_CTA_count_logger);
+ }
}
-void shader_CTA_count_log( int shader_id, int nCTAadded )
-{
- if (s_CTA_count_logger == NULL) return;
-
- for (int i = 0; i < nCTAadded; i++) {
- s_CTA_count_logger->log(shader_id);
- }
-}
+void shader_CTA_count_log(int shader_id, int nCTAadded) {
+ if (s_CTA_count_logger == NULL) return;
-void shader_CTA_count_unlog( int shader_id, int nCTAdone )
-{
- if (s_CTA_count_logger == NULL) return;
-
- for (int i = 0; i < nCTAdone; i++) {
- s_CTA_count_logger->unlog(shader_id);
- }
+ for (int i = 0; i < nCTAadded; i++) {
+ s_CTA_count_logger->log(shader_id);
+ }
}
-void shader_CTA_count_print( FILE *fout )
-{
- if (s_CTA_count_logger == NULL) return;
- s_CTA_count_logger->print(fout);
+void shader_CTA_count_unlog(int shader_id, int nCTAdone) {
+ if (s_CTA_count_logger == NULL) return;
+
+ for (int i = 0; i < nCTAdone; i++) {
+ s_CTA_count_logger->unlog(shader_id);
+ }
}
-void shader_CTA_count_visualizer_print( FILE *fout )
-{
- if (s_CTA_count_logger == NULL) return;
- s_CTA_count_logger->print_visualizer(fout);
+void shader_CTA_count_print(FILE *fout) {
+ if (s_CTA_count_logger == NULL) return;
+ s_CTA_count_logger->print(fout);
}
-void shader_CTA_count_visualizer_gzprint( gzFile fout )
-{
- if (s_CTA_count_logger == NULL) return;
- s_CTA_count_logger->print_visualizer(fout);
+void shader_CTA_count_visualizer_print(FILE *fout) {
+ if (s_CTA_count_logger == NULL) return;
+ s_CTA_count_logger->print_visualizer(fout);
}
+void shader_CTA_count_visualizer_gzprint(gzFile fout) {
+ if (s_CTA_count_logger == NULL) return;
+ s_CTA_count_logger->print_visualizer(fout);
+}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
-thread_insn_span::thread_insn_span(unsigned long long cycle, gpgpu_context* ctx)
- : m_cycle(cycle),
+thread_insn_span::thread_insn_span(unsigned long long cycle, gpgpu_context *ctx)
+ : m_cycle(cycle),
#if (tr1_hash_map_ismap == 1)
- m_insn_span_count()
-#else
- m_insn_span_count(32*1024)
+ m_insn_span_count()
+#else
+ m_insn_span_count(32 * 1024)
#endif
{
- gpgpu_ctx = ctx;
+ gpgpu_ctx = ctx;
}
-thread_insn_span::~thread_insn_span() { }
-
-thread_insn_span::thread_insn_span(const thread_insn_span& other, gpgpu_context* ctx)
- : m_cycle(other.m_cycle),
- m_insn_span_count(other.m_insn_span_count)
-{
- gpgpu_ctx = ctx;
+thread_insn_span::~thread_insn_span() {}
+
+thread_insn_span::thread_insn_span(const thread_insn_span &other,
+ gpgpu_context *ctx)
+ : m_cycle(other.m_cycle), m_insn_span_count(other.m_insn_span_count) {
+ gpgpu_ctx = ctx;
}
-
-thread_insn_span& thread_insn_span::operator=(const thread_insn_span& other)
-{
- printf("thread_insn_span& operator=\n");
- if (this != &other) {
- m_insn_span_count = other.m_insn_span_count;
- m_cycle = other.m_cycle;
- }
- return *this;
+
+thread_insn_span &thread_insn_span::operator=(const thread_insn_span &other) {
+ printf("thread_insn_span& operator=\n");
+ if (this != &other) {
+ m_insn_span_count = other.m_insn_span_count;
+ m_cycle = other.m_cycle;
+ }
+ return *this;
}
-
-thread_insn_span& thread_insn_span::operator+=(const thread_insn_span& other)
-{
- span_count_map::const_iterator i_sc = other.m_insn_span_count.begin();
- for (; i_sc != other.m_insn_span_count.end(); ++i_sc) {
- m_insn_span_count[i_sc->first] += i_sc->second;
- }
- return *this;
+
+thread_insn_span &thread_insn_span::operator+=(const thread_insn_span &other) {
+ span_count_map::const_iterator i_sc = other.m_insn_span_count.begin();
+ for (; i_sc != other.m_insn_span_count.end(); ++i_sc) {
+ m_insn_span_count[i_sc->first] += i_sc->second;
+ }
+ return *this;
}
-
-void thread_insn_span::set_span( address_type pc )
-{
- if( ((int)pc) >= 0 )
- m_insn_span_count[pc] += 1;
+
+void thread_insn_span::set_span(address_type pc) {
+ if (((int)pc) >= 0) m_insn_span_count[pc] += 1;
}
-
-void thread_insn_span::reset(unsigned long long cycle)
-{
- m_cycle = cycle;
- m_insn_span_count.clear();
+
+void thread_insn_span::reset(unsigned long long cycle) {
+ m_cycle = cycle;
+ m_insn_span_count.clear();
}
-
-void thread_insn_span::print_span(FILE *fout) const
-{
- fprintf(fout, "%d: ", (int)m_cycle);
- span_count_map::const_iterator i_sc = m_insn_span_count.begin();
- for (; i_sc != m_insn_span_count.end(); ++i_sc) {
- fprintf(fout, "%d ", i_sc->first);
- }
- fprintf(fout, "\n");
+
+void thread_insn_span::print_span(FILE *fout) const {
+ fprintf(fout, "%d: ", (int)m_cycle);
+ span_count_map::const_iterator i_sc = m_insn_span_count.begin();
+ for (; i_sc != m_insn_span_count.end(); ++i_sc) {
+ fprintf(fout, "%d ", i_sc->first);
+ }
+ fprintf(fout, "\n");
}
-void thread_insn_span::print_histo(FILE *fout) const
-{
- fprintf(fout, "%d:", (int)m_cycle);
- span_count_map::const_iterator i_sc = m_insn_span_count.begin();
- for (; i_sc != m_insn_span_count.end(); ++i_sc) {
- fprintf(fout, "%d ", i_sc->second);
- }
- fprintf(fout, "\n");
+void thread_insn_span::print_histo(FILE *fout) const {
+ fprintf(fout, "%d:", (int)m_cycle);
+ span_count_map::const_iterator i_sc = m_insn_span_count.begin();
+ for (; i_sc != m_insn_span_count.end(); ++i_sc) {
+ fprintf(fout, "%d ", i_sc->second);
+ }
+ fprintf(fout, "\n");
}
-void thread_insn_span::print_sparse_histo(FILE *fout) const
-{
- int n_printed_entries = 0;
- span_count_map::const_iterator i_sc = m_insn_span_count.begin();
- for (; i_sc != m_insn_span_count.end(); ++i_sc) {
- unsigned ptx_lineno = gpgpu_ctx->translate_pc_to_ptxlineno(i_sc->first);
- fprintf(fout, "%u %d ", ptx_lineno, i_sc->second);
- n_printed_entries++;
- }
- if (n_printed_entries == 0) {
- fprintf(fout, "0 0 ");
- }
- fprintf(fout, "\n");
+void thread_insn_span::print_sparse_histo(FILE *fout) const {
+ int n_printed_entries = 0;
+ span_count_map::const_iterator i_sc = m_insn_span_count.begin();
+ for (; i_sc != m_insn_span_count.end(); ++i_sc) {
+ unsigned ptx_lineno = gpgpu_ctx->translate_pc_to_ptxlineno(i_sc->first);
+ fprintf(fout, "%u %d ", ptx_lineno, i_sc->second);
+ n_printed_entries++;
+ }
+ if (n_printed_entries == 0) {
+ fprintf(fout, "0 0 ");
+ }
+ fprintf(fout, "\n");
}
-void thread_insn_span::print_sparse_histo(gzFile fout) const
-{
- int n_printed_entries = 0;
- span_count_map::const_iterator i_sc = m_insn_span_count.begin();
- for (; i_sc != m_insn_span_count.end(); ++i_sc) {
- unsigned ptx_lineno = gpgpu_ctx->translate_pc_to_ptxlineno(i_sc->first);
- gzprintf(fout, "%u %d ", ptx_lineno, i_sc->second);
- n_printed_entries++;
- }
- if (n_printed_entries == 0) {
- gzprintf(fout, "0 0 ");
- }
- gzprintf(fout, "\n");
+void thread_insn_span::print_sparse_histo(gzFile fout) const {
+ int n_printed_entries = 0;
+ span_count_map::const_iterator i_sc = m_insn_span_count.begin();
+ for (; i_sc != m_insn_span_count.end(); ++i_sc) {
+ unsigned ptx_lineno = gpgpu_ctx->translate_pc_to_ptxlineno(i_sc->first);
+ gzprintf(fout, "%u %d ", ptx_lineno, i_sc->second);
+ n_printed_entries++;
+ }
+ if (n_printed_entries == 0) {
+ gzprintf(fout, "0 0 ");
+ }
+ gzprintf(fout, "\n");
}
////////////////////////////////////////////////////////////////////////////////
-thread_CFlocality::thread_CFlocality( gpgpu_context* ctx, std::string name,
- unsigned long long snap_shot_interval,
- int nthreads,
- address_type start_pc,
- unsigned long long start_cycle)
- : snap_shot_trigger(snap_shot_interval), m_name(name),
- m_nthreads(nthreads), m_thread_pc(nthreads, start_pc), m_cycle(start_cycle),
- m_thd_span(start_cycle, ctx)
-{
- std::fill(m_thread_pc.begin(), m_thread_pc.end(), -1); // so that hw thread with no work assigned will not clobber results
+thread_CFlocality::thread_CFlocality(gpgpu_context *ctx, std::string name,
+ unsigned long long snap_shot_interval,
+ int nthreads, address_type start_pc,
+ unsigned long long start_cycle)
+ : snap_shot_trigger(snap_shot_interval),
+ m_name(name),
+ m_nthreads(nthreads),
+ m_thread_pc(nthreads, start_pc),
+ m_cycle(start_cycle),
+ m_thd_span(start_cycle, ctx) {
+ std::fill(
+ m_thread_pc.begin(), m_thread_pc.end(),
+ -1); // so that hw thread with no work assigned will not clobber results
}
-
-thread_CFlocality::~thread_CFlocality()
-{
-}
-
-void thread_CFlocality::update_thread_pc( int thread_id, address_type pc )
-{
- m_thread_pc[thread_id] = pc;
- m_thd_span.set_span(pc);
+
+thread_CFlocality::~thread_CFlocality() {}
+
+void thread_CFlocality::update_thread_pc(int thread_id, address_type pc) {
+ m_thread_pc[thread_id] = pc;
+ m_thd_span.set_span(pc);
}
-
-void thread_CFlocality::snap_shot(unsigned long long current_cycle)
-{
- m_thd_span_archive.push_back(m_thd_span);
- m_thd_span.reset(current_cycle);
- for (int i = 0; i < (int)m_thread_pc.size(); i++) {
- m_thd_span.set_span(m_thread_pc[i]);
- }
+
+void thread_CFlocality::snap_shot(unsigned long long current_cycle) {
+ m_thd_span_archive.push_back(m_thd_span);
+ m_thd_span.reset(current_cycle);
+ for (int i = 0; i < (int)m_thread_pc.size(); i++) {
+ m_thd_span.set_span(m_thread_pc[i]);
+ }
}
-
-void thread_CFlocality::spill(FILE *fout, bool final)
-{
- std::list<thread_insn_span>::iterator lit = m_thd_span_archive.begin();
- for (; lit != m_thd_span_archive.end(); lit = m_thd_span_archive.erase(lit) ) {
- fprintf(fout, "%s-", m_name.c_str());
- lit->print_histo(fout);
- }
- assert( m_thd_span_archive.empty() );
- if (final) {
- fprintf(fout, "%s-", m_name.c_str());
- m_thd_span.print_histo(fout);
- }
+
+void thread_CFlocality::spill(FILE *fout, bool final) {
+ std::list<thread_insn_span>::iterator lit = m_thd_span_archive.begin();
+ for (; lit != m_thd_span_archive.end(); lit = m_thd_span_archive.erase(lit)) {
+ fprintf(fout, "%s-", m_name.c_str());
+ lit->print_histo(fout);
+ }
+ assert(m_thd_span_archive.empty());
+ if (final) {
+ fprintf(fout, "%s-", m_name.c_str());
+ m_thd_span.print_histo(fout);
+ }
}
-
-
-void thread_CFlocality::print_visualizer(FILE *fout)
-{
- fprintf(fout, "%s: ", m_name.c_str());
- if (m_thd_span_archive.empty()) {
-
- // visualizer do no require snap_shots
- m_thd_span.print_sparse_histo(fout);
-
- // clean the thread span
- m_thd_span.reset(0);
- for (int i = 0; i < (int)m_thread_pc.size(); i++)
- m_thd_span.set_span(m_thread_pc[i]);
- } else {
- assert(0); // TODO: implement fall back so that visualizer can work with snap shots
- }
+
+void thread_CFlocality::print_visualizer(FILE *fout) {
+ fprintf(fout, "%s: ", m_name.c_str());
+ if (m_thd_span_archive.empty()) {
+ // visualizer do no require snap_shots
+ m_thd_span.print_sparse_histo(fout);
+
+ // clean the thread span
+ m_thd_span.reset(0);
+ for (int i = 0; i < (int)m_thread_pc.size(); i++)
+ m_thd_span.set_span(m_thread_pc[i]);
+ } else {
+ assert(0); // TODO: implement fall back so that visualizer can work with
+ // snap shots
+ }
}
-
-void thread_CFlocality::print_visualizer(gzFile fout)
-{
- gzprintf(fout, "%s: ", m_name.c_str());
- if (m_thd_span_archive.empty()) {
-
- // visualizer do no require snap_shots
- m_thd_span.print_sparse_histo(fout);
-
- // clean the thread span
- m_thd_span.reset(0);
- for (int i = 0; i < (int)m_thread_pc.size(); i++) {
- m_thd_span.set_span(m_thread_pc[i]);
- }
- } else {
- assert(0); // TODO: implement fall back so that visualizer can work with snap shots
- }
+
+void thread_CFlocality::print_visualizer(gzFile fout) {
+ gzprintf(fout, "%s: ", m_name.c_str());
+ if (m_thd_span_archive.empty()) {
+ // visualizer do no require snap_shots
+ m_thd_span.print_sparse_histo(fout);
+
+ // clean the thread span
+ m_thd_span.reset(0);
+ for (int i = 0; i < (int)m_thread_pc.size(); i++) {
+ m_thd_span.set_span(m_thread_pc[i]);
+ }
+ } else {
+ assert(0); // TODO: implement fall back so that visualizer can work with
+ // snap shots
+ }
}
-
-void thread_CFlocality::print_span(FILE *fout) const
-{
- std::list<thread_insn_span>::const_iterator lit = m_thd_span_archive.begin();
- for (; lit != m_thd_span_archive.end(); ++lit) {
- fprintf(fout, "%s-", m_name.c_str());
- lit->print_span(fout);
- }
- fprintf(fout, "%s-", m_name.c_str());
- m_thd_span.print_span(fout);
+
+void thread_CFlocality::print_span(FILE *fout) const {
+ std::list<thread_insn_span>::const_iterator lit = m_thd_span_archive.begin();
+ for (; lit != m_thd_span_archive.end(); ++lit) {
+ fprintf(fout, "%s-", m_name.c_str());
+ lit->print_span(fout);
+ }
+ fprintf(fout, "%s-", m_name.c_str());
+ m_thd_span.print_span(fout);
}
-void thread_CFlocality::print_histo(FILE *fout) const
-{
- std::list<thread_insn_span>::const_iterator lit = m_thd_span_archive.begin();
- for (; lit != m_thd_span_archive.end(); ++lit) {
- fprintf(fout, "%s-", m_name.c_str());
- lit->print_histo(fout);
- }
- fprintf(fout, "%s-", m_name.c_str());
- m_thd_span.print_histo(fout);
+void thread_CFlocality::print_histo(FILE *fout) const {
+ std::list<thread_insn_span>::const_iterator lit = m_thd_span_archive.begin();
+ for (; lit != m_thd_span_archive.end(); ++lit) {
+ fprintf(fout, "%s-", m_name.c_str());
+ lit->print_histo(fout);
+ }
+ fprintf(fout, "%s-", m_name.c_str());
+ m_thd_span.print_histo(fout);
}
////////////////////////////////////////////////////////////////////////////////
-linear_histogram_logger::linear_histogram_logger(int n_bins,
- unsigned long long snap_shot_interval,
- const char *name,
- bool reset_at_snap_shot,
- unsigned long long start_cycle )
- : snap_shot_trigger(snap_shot_interval),
- m_n_bins(n_bins),
- m_curr_lin_hist(m_n_bins, start_cycle),
- m_lin_hist_archive(),
- m_cycle(start_cycle),
- m_reset_at_snap_shot(reset_at_snap_shot),
- m_name(name),
- m_id(s_ids++)
-{
-}
+linear_histogram_logger::linear_histogram_logger(
+ int n_bins, unsigned long long snap_shot_interval, const char *name,
+ bool reset_at_snap_shot, unsigned long long start_cycle)
+ : snap_shot_trigger(snap_shot_interval),
+ m_n_bins(n_bins),
+ m_curr_lin_hist(m_n_bins, start_cycle),
+ m_lin_hist_archive(),
+ m_cycle(start_cycle),
+ m_reset_at_snap_shot(reset_at_snap_shot),
+ m_name(name),
+ m_id(s_ids++) {}
-linear_histogram_logger::linear_histogram_logger(const linear_histogram_logger& other)
- : snap_shot_trigger(other.get_interval()),
- m_n_bins(other.m_n_bins),
- m_curr_lin_hist(m_n_bins, other.m_cycle),
- m_lin_hist_archive(),
- m_cycle(other.m_cycle),
- m_reset_at_snap_shot(other.m_reset_at_snap_shot),
- m_name(other.m_name),
- m_id(s_ids++)
-{
-}
+linear_histogram_logger::linear_histogram_logger(
+ const linear_histogram_logger &other)
+ : snap_shot_trigger(other.get_interval()),
+ m_n_bins(other.m_n_bins),
+ m_curr_lin_hist(m_n_bins, other.m_cycle),
+ m_lin_hist_archive(),
+ m_cycle(other.m_cycle),
+ m_reset_at_snap_shot(other.m_reset_at_snap_shot),
+ m_name(other.m_name),
+ m_id(s_ids++) {}
-linear_histogram_logger::~linear_histogram_logger()
-{
- remove_snap_shot_trigger(this);
- remove_spill_log(this);
-}
-
-void linear_histogram_logger::snap_shot(unsigned long long current_cycle) {
- m_lin_hist_archive.push_back(m_curr_lin_hist);
- if (m_reset_at_snap_shot) {
- m_curr_lin_hist.reset(current_cycle);
- } else {
- m_curr_lin_hist.set_cycle(current_cycle);
- }
+linear_histogram_logger::~linear_histogram_logger() {
+ remove_snap_shot_trigger(this);
+ remove_spill_log(this);
}
-
-void linear_histogram_logger::spill(FILE *fout, bool final)
-{
- std::list<linear_histogram_snapshot>::iterator iter = m_lin_hist_archive.begin();
- for (; iter != m_lin_hist_archive.end(); iter = m_lin_hist_archive.erase(iter) ) {
- fprintf(fout, "%s%02d-", m_name.c_str(), (m_id >= 0)? m_id : 0);
- iter->print(fout);
- fprintf(fout, "\n");
- }
- assert( m_lin_hist_archive.empty() );
- if (final) {
- fprintf(fout, "%s%02d-", m_name.c_str(), (m_id >= 0)? m_id : 0);
- m_curr_lin_hist.print(fout);
- fprintf(fout, "\n");
- }
+
+void linear_histogram_logger::snap_shot(unsigned long long current_cycle) {
+ m_lin_hist_archive.push_back(m_curr_lin_hist);
+ if (m_reset_at_snap_shot) {
+ m_curr_lin_hist.reset(current_cycle);
+ } else {
+ m_curr_lin_hist.set_cycle(current_cycle);
+ }
}
-
-void linear_histogram_logger::print(FILE *fout) const
-{
- std::list<linear_histogram_snapshot>::const_iterator iter = m_lin_hist_archive.begin();
- for (; iter != m_lin_hist_archive.end(); ++iter) {
- fprintf(fout, "%s%02d-", m_name.c_str(), m_id);
- iter->print(fout);
- fprintf(fout, "\n");
- }
- fprintf(fout, "%s%02d-", m_name.c_str(), m_id);
- m_curr_lin_hist.print(fout);
- fprintf(fout, "\n");
+
+void linear_histogram_logger::spill(FILE *fout, bool final) {
+ std::list<linear_histogram_snapshot>::iterator iter =
+ m_lin_hist_archive.begin();
+ for (; iter != m_lin_hist_archive.end();
+ iter = m_lin_hist_archive.erase(iter)) {
+ fprintf(fout, "%s%02d-", m_name.c_str(), (m_id >= 0) ? m_id : 0);
+ iter->print(fout);
+ fprintf(fout, "\n");
+ }
+ assert(m_lin_hist_archive.empty());
+ if (final) {
+ fprintf(fout, "%s%02d-", m_name.c_str(), (m_id >= 0) ? m_id : 0);
+ m_curr_lin_hist.print(fout);
+ fprintf(fout, "\n");
+ }
}
-void linear_histogram_logger::print_visualizer(FILE *fout)
-{
- assert(m_lin_hist_archive.empty()); // don't support snapshot for now
- fprintf(fout, "%s", m_name.c_str());
- if (m_id >= 0) {
- fprintf(fout, "%02d: ", m_id);
- } else {
- fprintf(fout, ": ");
- }
- m_curr_lin_hist.print_visualizer(fout);
- fprintf(fout, "\n");
- if (m_reset_at_snap_shot) {
- m_curr_lin_hist.reset(0);
- }
+void linear_histogram_logger::print(FILE *fout) const {
+ std::list<linear_histogram_snapshot>::const_iterator iter =
+ m_lin_hist_archive.begin();
+ for (; iter != m_lin_hist_archive.end(); ++iter) {
+ fprintf(fout, "%s%02d-", m_name.c_str(), m_id);
+ iter->print(fout);
+ fprintf(fout, "\n");
+ }
+ fprintf(fout, "%s%02d-", m_name.c_str(), m_id);
+ m_curr_lin_hist.print(fout);
+ fprintf(fout, "\n");
}
-void linear_histogram_logger::print_visualizer(gzFile fout)
-{
- assert(m_lin_hist_archive.empty()); // don't support snapshot for now
- gzprintf(fout, "%s", m_name.c_str());
- if (m_id >= 0) {
- gzprintf(fout, "%02d: ", m_id);
- } else {
- gzprintf(fout, ": ");
- }
- m_curr_lin_hist.print_visualizer(fout);
- gzprintf(fout, "\n");
- if (m_reset_at_snap_shot) {
- m_curr_lin_hist.reset(0);
- }
+void linear_histogram_logger::print_visualizer(FILE *fout) {
+ assert(m_lin_hist_archive.empty()); // don't support snapshot for now
+ fprintf(fout, "%s", m_name.c_str());
+ if (m_id >= 0) {
+ fprintf(fout, "%02d: ", m_id);
+ } else {
+ fprintf(fout, ": ");
+ }
+ m_curr_lin_hist.print_visualizer(fout);
+ fprintf(fout, "\n");
+ if (m_reset_at_snap_shot) {
+ m_curr_lin_hist.reset(0);
+ }
}
+void linear_histogram_logger::print_visualizer(gzFile fout) {
+ assert(m_lin_hist_archive.empty()); // don't support snapshot for now
+ gzprintf(fout, "%s", m_name.c_str());
+ if (m_id >= 0) {
+ gzprintf(fout, "%02d: ", m_id);
+ } else {
+ gzprintf(fout, ": ");
+ }
+ m_curr_lin_hist.print_visualizer(fout);
+ gzprintf(fout, "\n");
+ if (m_reset_at_snap_shot) {
+ m_curr_lin_hist.reset(0);
+ }
+}