summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/traffic_breakdown.cc
diff options
context:
space:
mode:
authorWilson Fung <[email protected]>2013-06-23 02:59:55 -0800
committerAndrew Boktor <[email protected]>2014-08-14 13:50:48 -0700
commitd0d12843ce57c1b0c1e77bae2a43bf222af19375 (patch)
tree07d17add206d8b8d6e83b89954afd8dcd98ac967 /src/gpgpu-sim/traffic_breakdown.cc
parent33c2bb5ba2f0b45474fe2a72d87886692d6bf4ca (diff)
Interconnection traffic breakdown stats (integration from TM branch).
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 16495]
Diffstat (limited to 'src/gpgpu-sim/traffic_breakdown.cc')
-rw-r--r--src/gpgpu-sim/traffic_breakdown.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/gpgpu-sim/traffic_breakdown.cc b/src/gpgpu-sim/traffic_breakdown.cc
new file mode 100644
index 0000000..b21b8d8
--- /dev/null
+++ b/src/gpgpu-sim/traffic_breakdown.cc
@@ -0,0 +1,50 @@
+#include "traffic_breakdown.h"
+#include "mem_fetch.h"
+
+void traffic_breakdown::print(FILE* fout)
+{
+ for (traffic_stat_t::const_iterator i_stat = m_stats.begin(); i_stat != m_stats.end(); i_stat++) {
+ unsigned int byte_transferred = 0;
+ for (traffic_class_t::const_iterator i_class = i_stat->second.begin(); i_class != i_stat->second.end(); i_class++) {
+ byte_transferred += i_class->first * i_class->second; // byte/packet x #packets
+ }
+ fprintf(fout, "traffic_breakdown_%s[%s] = %u {", m_network_name.c_str(), i_stat->first.c_str(), byte_transferred);
+ for (traffic_class_t::const_iterator i_class = i_stat->second.begin(); i_class != i_stat->second.end(); i_class++) {
+ fprintf(fout, "%u:%u,", i_class->first, i_class->second);
+ }
+ fprintf(fout, "}\n");
+ }
+}
+
+void traffic_breakdown::record_traffic(class mem_fetch * mf, unsigned int size)
+{
+ m_stats[classify_memfetch(mf)][size] += 1;
+}
+
+std::string traffic_breakdown::classify_memfetch(class mem_fetch * mf)
+{
+ std::string traffic_name;
+
+ enum mem_access_type access_type = mf->get_access_type();
+
+ switch (access_type) {
+ case CONST_ACC_R:
+ case TEXTURE_ACC_R:
+ case GLOBAL_ACC_W:
+ case LOCAL_ACC_R:
+ case LOCAL_ACC_W:
+ case INST_ACC_R:
+ case L1_WRBK_ACC:
+ case L2_WRBK_ACC:
+ case L2_WR_ALLOC_R:
+ traffic_name = mem_access_type_str(access_type);
+ break;
+ case GLOBAL_ACC_R:
+ // check for global atomic operation
+ traffic_name = (mf->isatomic())? "GLOBAL_ATOMIC" : mem_access_type_str(GLOBAL_ACC_R);
+ break;
+ default: assert(0 && "Unknown traffic type");
+ }
+ return traffic_name;
+}
+